diff --git a/assets/workflows/subworkflows/categories.yml b/assets/workflows/subworkflows/categories.yml index aa9a98bb..6fb5be89 100644 --- a/assets/workflows/subworkflows/categories.yml +++ b/assets/workflows/subworkflows/categories.yml @@ -53,6 +53,17 @@ entities: - total_energy - total_energy_contributions - total_force + - filename: espresso/average_electrostatic_potential.json + categories: + - atomic_forces + - average_potential_profile + - espresso + - fermi_energy + - pressure + - stress_tensor + - total_energy + - total_energy_contributions + - total_force - filename: espresso/band_gap_hse_dos.json categories: - atomic_forces diff --git a/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml b/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml new file mode 100644 index 00000000..d173d811 --- /dev/null +++ b/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml @@ -0,0 +1,29 @@ +application: + name: espresso + version: "6.3" +method: + name: PseudopotentialMethod +model: + name: DFTModel +name: Average Electrostatic Potential +units: + - config: + execName: pw.x + flavorName: pw_scf + name: pw_scf + type: executionBuilder + - config: + execName: pp.x + flavorName: pp_electrostatic_potential + name: Electrostatic Potential (ESP) + type: executionBuilder + - config: + execName: average.x + flavorName: average_potential + name: average ESP + flowchartId: average-electrostatic-potential + type: executionBuilder + attributes: + results: + - name: average_potential_profile + diff --git a/assets/workflows/workflows/categories.yml b/assets/workflows/workflows/categories.yml index 305ed3ee..12498694 100644 --- a/assets/workflows/workflows/categories.yml +++ b/assets/workflows/workflows/categories.yml @@ -31,6 +31,17 @@ categories: - shell - vasp entities: + - filename: espresso/average_electrostatic_potential.json + categories: + - atomic_forces + - average_potential_profile + - espresso + - fermi_energy + - pressure + - stress_tensor + - total_energy + - total_energy_contributions + - total_force - filename: espresso/band_gap_dos_hse.json categories: - atomic_forces diff --git a/assets/workflows/workflows/espresso/average_electrostatic_potential.yml b/assets/workflows/workflows/espresso/average_electrostatic_potential.yml new file mode 100644 index 00000000..abfe559b --- /dev/null +++ b/assets/workflows/workflows/espresso/average_electrostatic_potential.yml @@ -0,0 +1,5 @@ +name: Average Electrostatic Potential +units: + - name: average_electrostatic_potential + type: subworkflow + diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json new file mode 100644 index 00000000..f1285f74 --- /dev/null +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json @@ -0,0 +1,277 @@ +{ + "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", + "name": "Average Electrostatic Potential", + "application": { + "name": "espresso" + }, + "properties": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force", + "average_potential_profile" + ], + "model": { + "type": "dft", + "subtype": "gga", + "method": { + "type": "pseudopotential", + "subtype": "us", + "data": {} + }, + "functional": { + "slug": "pbe" + }, + "refiners": [], + "modifiers": [] + }, + "units": [ + { + "type": "execution", + "name": "pw_scf", + "head": true, + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "monitors": [ + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } + ], + "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "hasAdvancedComputeOptions": true, + "isDefault": true, + "monitors": [ + "standard_output", + "convergence_ionic", + "convergence_electronic" + ], + "postProcessors": [ + "remove_non_zero_weight_kpoints" + ], + "name": "pw.x", + "schemaVersion": "2022.8.16" + }, + "flavor": { + "applicationName": "espresso", + "executableName": "pw.x", + "input": [ + { + "name": "pw_scf.in" + } + ], + "isDefault": true, + "monitors": [ + "standard_output", + "convergence_electronic" + ], + "results": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" + ], + "name": "pw_scf", + "schemaVersion": "2022.8.16" + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", + "schemaVersion": "2022.8.16" + } + ], + "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" + }, + { + "type": "execution", + "name": "Electrostatic Potential (ESP)", + "head": false, + "results": [], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "monitors": [ + "standard_output" + ], + "name": "pp.x", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "flavor": { + "applicationName": "espresso", + "executableName": "pp.x", + "input": [ + { + "name": "pp_electrostatic_potential.in" + } + ], + "monitors": [ + "standard_output" + ], + "results": [], + "name": "pp_electrostatic_potential", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "schemaVersion": "2022.8.16" + } + ], + "next": "average-electrostatic-potential" + }, + { + "type": "execution", + "name": "average ESP", + "head": false, + "results": [ + { + "name": "average_potential_profile" + } + ], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "average-electrostatic-potential", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "monitors": [ + "standard_output" + ], + "name": "average.x", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "flavor": { + "applicationName": "espresso", + "executableName": "average.x", + "input": [ + { + "name": "average.in" + } + ], + "monitors": [ + "standard_output" + ], + "results": [ + "average_potential_profile" + ], + "name": "average_potential", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "schemaVersion": "2022.8.16" + } + ] + } + ] +} diff --git a/data/workflows/workflows/espresso/average_electrostatic_potential.json b/data/workflows/workflows/espresso/average_electrostatic_potential.json new file mode 100644 index 00000000..62398174 --- /dev/null +++ b/data/workflows/workflows/espresso/average_electrostatic_potential.json @@ -0,0 +1,318 @@ +{ + "name": "Average Electrostatic Potential", + "subworkflows": [ + { + "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", + "name": "Average Electrostatic Potential", + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "properties": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force", + "average_potential_profile" + ], + "model": { + "type": "dft", + "subtype": "gga", + "method": { + "type": "pseudopotential", + "subtype": "us", + "data": {} + }, + "functional": { + "slug": "pbe" + }, + "refiners": [], + "modifiers": [] + }, + "units": [ + { + "type": "execution", + "name": "pw_scf", + "head": true, + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "monitors": [ + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } + ], + "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "hasAdvancedComputeOptions": true, + "isDefault": true, + "monitors": [ + "standard_output", + "convergence_ionic", + "convergence_electronic" + ], + "postProcessors": [ + "remove_non_zero_weight_kpoints" + ], + "name": "pw.x", + "schemaVersion": "2022.8.16" + }, + "flavor": { + "applicationName": "espresso", + "executableName": "pw.x", + "input": [ + { + "name": "pw_scf.in" + } + ], + "isDefault": true, + "monitors": [ + "standard_output", + "convergence_electronic" + ], + "results": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" + ], + "name": "pw_scf", + "schemaVersion": "2022.8.16" + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", + "schemaVersion": "2022.8.16" + } + ], + "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" + }, + { + "type": "execution", + "name": "Electrostatic Potential (ESP)", + "head": false, + "results": [], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "monitors": [ + "standard_output" + ], + "name": "pp.x", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "flavor": { + "applicationName": "espresso", + "executableName": "pp.x", + "input": [ + { + "name": "pp_electrostatic_potential.in" + } + ], + "monitors": [ + "standard_output" + ], + "results": [], + "name": "pp_electrostatic_potential", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "schemaVersion": "2022.8.16" + } + ], + "next": "average-electrostatic-potential" + }, + { + "type": "execution", + "name": "average ESP", + "head": false, + "results": [ + { + "name": "average_potential_profile" + } + ], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "average-electrostatic-potential", + "preProcessors": [], + "postProcessors": [], + "application": { + "name": "espresso", + "shortName": "qe", + "summary": "Quantum ESPRESSO", + "build": "GNU", + "hasAdvancedComputeOptions": true, + "isDefault": true, + "version": "6.3", + "schemaVersion": "2022.8.16" + }, + "executable": { + "monitors": [ + "standard_output" + ], + "name": "average.x", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "flavor": { + "applicationName": "espresso", + "executableName": "average.x", + "input": [ + { + "name": "average.in" + } + ], + "monitors": [ + "standard_output" + ], + "results": [ + "average_potential_profile" + ], + "name": "average_potential", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "schemaVersion": "2022.8.16" + } + ] + } + ] + } + ], + "units": [ + { + "name": "Average Electrostatic Potential", + "type": "subworkflow", + "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", + "status": "idle", + "statusTrack": [], + "flowchartId": "88861e21-1e6d-557d-b080-eafe3511872f", + "tags": [], + "head": true + } + ], + "properties": [ + "atomic_forces", + "average_potential_profile", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" + ], + "_id": "7e865869-82fb-5769-84f0-ac9f9df354db", + "workflows": [], + "schemaVersion": "2022.8.16", + "isDefault": false, + "application": { + "name": "espresso" + } +} diff --git a/dist/js/runtime_data/subworkflows.json b/dist/js/runtime_data/subworkflows.json index caf9aff5..99fa3d87 100644 --- a/dist/js/runtime_data/subworkflows.json +++ b/dist/js/runtime_data/subworkflows.json @@ -1 +1 @@ -{"filesMapByName":{"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_hse","results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_bands_hse","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_magn","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_magn","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_soc","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_soc","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"nc","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":["standard_output"],"name":"dielectric_tensor","results":["dielectric_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_density","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm_relax","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_full_frequency","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_plasmon_pole","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_kpt_conv","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":["standard_output"],"name":"neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_init_qpoints","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:k_means_clustering:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":["standard_output"],"name":"vasp_neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_hse","results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_bands_hse","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_magn","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_magn","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_soc","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_soc","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"nc","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":["standard_output"],"name":"dielectric_tensor","results":["dielectric_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_density","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm_relax","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_full_frequency","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_plasmon_pole","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_kpt_conv","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":["standard_output"],"name":"neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_init_qpoints","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:k_means_clustering:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":["standard_output"],"name":"vasp_neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","head":true,"name":"Preliminary SCF Calculation","next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","head":false,"name":"ph-init-qpoints","next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","head":false,"name":"espresso-xml-get-qpt-irr","next":"24e3c1f0-8090-512e-9727-8770071d17c8","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","head":false,"input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"name":"map","next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","head":false,"name":"reduce","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","compute":{"cluster":{"fqdn":""},"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00"},"isDefault":false,"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","head":true,"name":"pre-processor","next":"c2195045-7a5c-54d3-ab88-211c82de09f1","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","head":false,"name":"ph-single-irr-qpt","next":"e483c7fb-2a29-5e91-819a-7465ead70134","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","head":false,"name":"post-processor","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","head":true,"name":"Recalculate Bands","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","head":true,"name":"Surface Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"name":"Set Material Index (Interface left)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"name":"Set Material Index (Interface right)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","head":true,"name":"BS + Avg ESP (Interface)","next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","head":false,"name":"Find ESP Values (Interface)","next":"8d5b4734-edfd-55cc-ad80-aaa72487398d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","head":false,"name":"BS + Avg ESP (interface left)","next":"102ec582-5b75-52f5-8b39-19ca725ed47a","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","head":false,"name":"Find ESP Value (Interface left)","next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","head":false,"name":"BS + Avg ESP (interface right)","next":"e3444d35-cc41-59f5-8481-78d0c383b84e","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","head":false,"name":"Find ESP Value (Interface right)","next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","head":false,"name":"Calculate VBO","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","head":true,"name":"Variable-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","head":true,"name":"Zero Point Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","head":true,"name":"Python Script","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","head":true,"name":"Shell Batch Job (Espresso PWSCF)","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","head":true,"name":"Shell Hello World","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","head":true,"name":"Band Gap","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","head":true,"name":"Band Structure","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","head":true,"name":"Band Structure + Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","head":true,"name":"Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","head":true,"name":"Fixed-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","head":true,"name":"K-point Convergence","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"df41740d-5989-553c-b845-0559d6f8f86b","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","atomic_forces","fermi_energy","fermi_energy","pressure","pressure","stress_tensor","stress_tensor","total_energy","total_energy","total_energy_contributions","total_energy_contributions","total_force","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","head":true,"name":"Preliminary SCF Calculation","next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","head":false,"name":"ph-init-qpoints","next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","head":false,"name":"espresso-xml-get-qpt-irr","next":"24e3c1f0-8090-512e-9727-8770071d17c8","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","head":false,"input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"name":"map","next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","head":false,"name":"reduce","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","compute":{"cluster":{"fqdn":""},"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00"},"isDefault":false,"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","head":true,"name":"pre-processor","next":"c2195045-7a5c-54d3-ab88-211c82de09f1","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","head":false,"name":"ph-single-irr-qpt","next":"e483c7fb-2a29-5e91-819a-7465ead70134","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","head":false,"name":"post-processor","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","head":true,"name":"Recalculate Bands","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","head":true,"name":"Surface Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"name":"Set Material Index (Interface left)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"name":"Set Material Index (Interface right)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","head":true,"name":"BS + Avg ESP (Interface)","next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","head":false,"name":"Find ESP Values (Interface)","next":"8d5b4734-edfd-55cc-ad80-aaa72487398d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","head":false,"name":"BS + Avg ESP (interface left)","next":"102ec582-5b75-52f5-8b39-19ca725ed47a","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","head":false,"name":"Find ESP Value (Interface left)","next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","head":false,"name":"BS + Avg ESP (interface right)","next":"e3444d35-cc41-59f5-8481-78d0c383b84e","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","head":false,"name":"Find ESP Value (Interface right)","next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","head":false,"name":"Calculate VBO","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","head":true,"name":"Variable-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","head":true,"name":"Zero Point Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","head":true,"name":"Python Script","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","head":true,"name":"Shell Batch Job (Espresso PWSCF)","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","head":true,"name":"Shell Hello World","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","head":true,"name":"Band Gap","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","head":true,"name":"Band Structure","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","head":true,"name":"Band Structure + Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","head":true,"name":"Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","head":true,"name":"Fixed-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","head":true,"name":"K-point Convergence","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"df41740d-5989-553c-b845-0559d6f8f86b","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","atomic_forces","fermi_energy","fermi_energy","pressure","pressure","stress_tensor","stress_tensor","total_energy","total_energy","total_energy_contributions","total_energy_contributions","total_force","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=6.9.0" @@ -138,6 +148,8 @@ }, "node_modules/@babel/core": { "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -166,10 +178,14 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, "node_modules/@babel/eslint-parser": { "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", + "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", "license": "MIT", "dependencies": { "eslint-scope": "^5.1.1", @@ -185,11 +201,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -200,6 +218,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -209,10 +229,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -223,15 +245,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -243,6 +267,8 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -258,6 +284,8 @@ }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", @@ -273,6 +301,8 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -283,6 +313,8 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -290,6 +322,8 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", @@ -300,23 +334,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -327,6 +365,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -336,7 +376,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -344,6 +386,8 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -358,12 +402,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -374,6 +420,8 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -385,6 +433,8 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -392,6 +442,8 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -399,29 +451,35 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -429,6 +487,8 @@ }, "node_modules/@babel/highlight": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -442,6 +502,8 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -452,6 +514,8 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -464,6 +528,8 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -471,10 +537,14 @@ }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" @@ -482,6 +552,8 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", "engines": { "node": ">=4" @@ -489,6 +561,8 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -498,10 +572,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.28.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -512,6 +588,8 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -527,6 +605,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { @@ -541,6 +621,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -554,6 +636,8 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -568,12 +652,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -584,6 +670,9 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -600,6 +689,9 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", @@ -614,6 +706,9 @@ }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -629,6 +724,9 @@ }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -643,6 +741,9 @@ }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", @@ -657,6 +758,9 @@ }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -671,6 +775,9 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -685,6 +792,9 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -699,6 +809,9 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -713,6 +826,9 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", @@ -730,6 +846,9 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -744,6 +863,9 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -759,6 +881,9 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -773,6 +898,9 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -789,6 +917,9 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -803,6 +934,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -813,6 +946,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -823,6 +958,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -836,6 +973,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -846,6 +985,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" @@ -855,11 +996,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -869,11 +1012,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -884,6 +1029,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -893,10 +1040,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -907,6 +1056,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -917,6 +1068,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -927,6 +1080,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -937,6 +1092,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -947,6 +1104,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -957,6 +1116,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -967,6 +1128,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -980,6 +1143,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -992,10 +1157,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1006,6 +1173,8 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { @@ -1021,6 +1190,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1033,13 +1204,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", + "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1049,11 +1222,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -1065,6 +1240,8 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1077,10 +1254,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1090,12 +1269,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1105,12 +1286,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1120,15 +1303,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1138,11 +1323,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1153,6 +1340,8 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1166,11 +1355,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1181,6 +1372,8 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1193,12 +1386,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", + "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1209,6 +1404,8 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { @@ -1222,12 +1419,14 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1237,10 +1436,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1251,6 +1452,8 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1265,6 +1468,8 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1279,6 +1484,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1293,11 +1500,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1308,6 +1517,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1320,11 +1531,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1335,6 +1548,8 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1348,6 +1563,8 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1361,11 +1578,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1376,6 +1595,8 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.28.3", @@ -1392,6 +1613,8 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1406,6 +1629,8 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1420,6 +1645,8 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1432,11 +1659,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1446,11 +1675,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1460,15 +1691,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1479,6 +1712,8 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1492,11 +1727,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1506,10 +1743,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1521,6 +1760,8 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1533,12 +1774,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1548,13 +1791,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1565,6 +1810,8 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1578,6 +1825,8 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1590,14 +1839,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1608,6 +1859,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" @@ -1621,6 +1874,8 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1634,10 +1889,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", + "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1647,12 +1904,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1663,6 +1922,8 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1676,6 +1937,8 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1688,10 +1951,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1703,6 +1968,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1716,6 +1983,8 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1729,6 +1998,8 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1741,14 +2012,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" + "@babel/plugin-syntax-typescript": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1759,6 +2032,8 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1771,12 +2046,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1787,6 +2064,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1800,12 +2079,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1816,6 +2097,8 @@ }, "node_modules/@babel/preset-env": { "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.4", @@ -1902,6 +2185,8 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1916,6 +2201,8 @@ }, "node_modules/@babel/preset-react": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", @@ -1934,6 +2221,8 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1950,7 +2239,9 @@ } }, "node_modules/@babel/register": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", + "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -1967,7 +2258,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "dev": true, "license": "MIT", "engines": { @@ -1975,7 +2268,9 @@ } }, "node_modules/@babel/runtime-corejs2": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.28.6.tgz", + "integrity": "sha512-pOHfxftxpetWUeBacCB3ZOPc/OO6hiT9MLv0qd9j474khiCcduwO8uuJI3N7vX3m8GJotTT6lxlA89TS/PylGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1987,6 +2282,8 @@ }, "node_modules/@babel/runtime-corejs3": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", "license": "MIT", "dependencies": { "core-js-pure": "^3.20.2", @@ -1997,27 +2294,31 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", "debug": "^4.3.1" }, "engines": { @@ -2025,7 +2326,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2037,6 +2340,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2047,6 +2352,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2055,6 +2362,8 @@ }, "node_modules/@es-joy/jsdoccomment": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz", + "integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2068,6 +2377,8 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/comment-parser": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", "dev": true, "license": "MIT", "engines": { @@ -2076,6 +2387,8 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz", + "integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==", "dev": true, "license": "MIT", "engines": { @@ -2083,7 +2396,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2101,6 +2416,8 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2112,6 +2429,8 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2120,6 +2439,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -2138,6 +2459,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2152,6 +2475,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2159,6 +2484,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "license": "MIT", "engines": { "node": ">= 4" @@ -2166,6 +2493,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2177,14 +2506,20 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, "node_modules/@exabyte-io/eslint-config": { "version": "2022.11.17-0", + "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2022.11.17-0.tgz", + "integrity": "sha512-BYTDSqvjj6ZiWb8l46T5BKrVfkelct+vK2mh7joHu5UWtJMUzLkb0KQMV1+6SUy4xHFnws33XS7/+JSW1yeZOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2213,6 +2548,8 @@ }, "node_modules/@exabyte-io/periodic-table.js": { "version": "2022.5.28-0", + "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz", + "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -2232,6 +2569,8 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/core": { "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "license": "MIT", "peer": true, @@ -2262,6 +2601,8 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/register": { "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", + "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "dev": true, "license": "MIT", "peer": true, @@ -2281,12 +2622,17 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/underscore": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "deprecated": "Use @eslint/config-array instead", "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -2299,10 +2645,15 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2318,6 +2669,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2326,6 +2679,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -2338,6 +2693,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -2350,6 +2707,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2361,6 +2720,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -2375,6 +2736,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2386,6 +2749,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -2394,11 +2759,15 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -2407,6 +2776,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -2415,6 +2786,8 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2424,6 +2797,8 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2431,10 +2806,14 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2443,6 +2822,8 @@ }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "dev": true, "license": "MIT" }, @@ -2543,9 +2924,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/cli": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", - "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", + "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2573,21 +2954,21 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -2604,9 +2985,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/eslint-parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", - "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", + "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -2671,76 +3052,76 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-env": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", - "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", + "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.5", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.4", - "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.4", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", @@ -2792,9 +3173,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.6.tgz", + "integrity": "sha512-kz2fAQ5UzjV7X7D3ySxmj3vRq89dTpqOZWv76Z6pNPztkwb/0Yj1Mtx1xFrYj6mbIHysxtBot8J4o0JLCblcFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3156,9 +3537,9 @@ } }, "node_modules/@mat3ra/wode": { - "version": "2026.1.12-0", - "resolved": "https://registry.npmjs.org/@mat3ra/wode/-/wode-2026.1.12-0.tgz", - "integrity": "sha512-XwooOkqerz6XeegtX//KjONP0sZxSnsJr5cw4lfiIi3Cxit+tDtSXtTOxIdY+2tQkqyC7LsOUt5CCfwdusVfPg==", + "version": "2026.1.13-0", + "resolved": "https://registry.npmjs.org/@mat3ra/wode/-/wode-2026.1.13-0.tgz", + "integrity": "sha512-CY6eFCLRiY0JWeaqKW9YVndDC5XKoMwKaWFAeVKOCnejiJwuo62Oxb8RXoq2VR7mHjicGIMhpM07U1+Nx6c2WQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3273,11 +3654,15 @@ }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "license": "MIT", "optional": true }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { @@ -3286,6 +3671,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -3298,6 +3685,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -3306,6 +3695,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3318,27 +3709,39 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "license": "MIT" }, "node_modules/@types/chai": { "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", "dev": true, "license": "MIT" }, "node_modules/@types/chai-almost": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/chai-almost/-/chai-almost-1.0.3.tgz", + "integrity": "sha512-NMLjvnFjgxS0Z36whNuoma2p/2Fu6m+dV8eddO8tRAztMAqTqYxFYGyJNsAsOlwx89siUMfxQ1Wdqew2xXsiEg==", "dev": true, "license": "MIT", "peer": true, @@ -3348,16 +3751,22 @@ }, "node_modules/@types/js-yaml": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema-merge-allof": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz", + "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==", "dev": true, "license": "MIT", "dependencies": { @@ -3366,16 +3775,22 @@ }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.21", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", "dev": true, "license": "MIT" }, "node_modules/@types/mathjs": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-5.0.1.tgz", + "integrity": "sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==", "dev": true, "license": "MIT", "dependencies": { @@ -3384,18 +3799,24 @@ }, "node_modules/@types/mocha": { "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.26", + "version": "20.19.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.29.tgz", + "integrity": "sha512-YrT9ArrGaHForBaCNwFjoqJWmn8G1Pr7+BH/vwyLHciA9qT/wSiuOhxGCT50JA5xLvFBd6PIiGkE3afxcPE1nw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/react": { - "version": "19.2.7", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "dev": true, "license": "MIT", "dependencies": { @@ -3404,6 +3825,8 @@ }, "node_modules/@types/react-jsonschema-form": { "version": "1.7.13", + "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.13.tgz", + "integrity": "sha512-C2jgO7/ow76oCSfUK++jKKox17R0A7ryMYNE5hJ2dR1Ske9jhuvjIlurvzMePh+Xjk8wey0nzB2C7HFKe2pRdg==", "dev": true, "license": "MIT", "dependencies": { @@ -3413,16 +3836,22 @@ }, "node_modules/@types/semver": { "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, "node_modules/@types/underscore": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.13.0.tgz", + "integrity": "sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA==", "dev": true, "license": "MIT" }, "node_modules/@types/underscore.string": { "version": "0.0.40", + "resolved": "https://registry.npmjs.org/@types/underscore.string/-/underscore.string-0.0.40.tgz", + "integrity": "sha512-6J3Wp6PnuXhSxVSVaSoh9SKiormScoa2pPLKpZk5QsjKD3RKQZQj/mwBVfULd2MUl5gM/UlLSvr+cynd/7VWQA==", "dev": true, "license": "MIT", "peer": true, @@ -3432,6 +3861,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "license": "MIT", "dependencies": { @@ -3465,6 +3896,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3476,6 +3909,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3502,6 +3937,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { @@ -3518,6 +3955,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "license": "MIT", "dependencies": { @@ -3544,6 +3983,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { @@ -3556,6 +3997,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3582,6 +4025,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3593,6 +4038,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3618,6 +4065,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3629,6 +4078,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3645,6 +4096,8 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3656,11 +4109,15 @@ }, "node_modules/a-sync-waterfall": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", "dev": true, "license": "MIT" }, "node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3671,6 +4128,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -3678,6 +4137,8 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -3688,6 +4149,8 @@ }, "node_modules/acorn-walk/node_modules/acorn": { "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3698,6 +4161,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -3710,6 +4175,8 @@ }, "node_modules/ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -3724,6 +4191,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -3740,18 +4209,24 @@ }, "node_modules/almost-equal": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-0.0.0.tgz", + "integrity": "sha512-/wvWNupeAr7sp7J2ZXvQvd97uyxsokx4TXdV6YMhd/EDwctlgY3wUGZCgQx1sJQyxU+c8EWRCWsLGOumdiS9aw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/an-array": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", + "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "license": "MIT", "engines": { "node": ">=6" @@ -3759,6 +4234,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3773,6 +4250,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3784,6 +4263,8 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -3791,6 +4272,8 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3804,6 +4287,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "devOptional": true, "license": "ISC", "dependencies": { @@ -3816,6 +4301,8 @@ }, "node_modules/append-transform": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { @@ -3827,19 +4314,27 @@ }, "node_modules/archy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/aria-query": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3852,6 +4347,8 @@ }, "node_modules/array-almost-equal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-almost-equal/-/array-almost-equal-1.0.0.tgz", + "integrity": "sha512-NiQJq0vH5nEebm7FMs52fli23nwCh+RBKZZtA5g5qUmqGAkb9n8/WOTW8zjDocLADXXM1CRanFfPTMdrI2yZwg==", "dev": true, "license": "MIT", "peer": true, @@ -3862,6 +4359,8 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -3877,6 +4376,8 @@ }, "node_modules/array-includes": { "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3898,6 +4399,8 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -3906,6 +4409,8 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -3923,6 +4428,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -3940,6 +4447,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3960,11 +4469,15 @@ }, "node_modules/asap": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "license": "MIT", "engines": { @@ -3973,11 +4486,15 @@ }, "node_modules/ast-types-flow": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true, "license": "ISC" }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "license": "MIT", "engines": { "node": ">=8" @@ -3985,6 +4502,8 @@ }, "node_modules/async-function": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -3993,6 +4512,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4006,7 +4527,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.0", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", "dev": true, "license": "MPL-2.0", "engines": { @@ -4015,11 +4538,16 @@ }, "node_modules/axobject-query": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true, "license": "Apache-2.0" }, "node_modules/babel-eslint": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, "license": "MIT", "dependencies": { @@ -4039,6 +4567,8 @@ }, "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4047,6 +4577,8 @@ }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", @@ -4059,6 +4591,8 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -4070,6 +4604,8 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" @@ -4080,10 +4616,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.5", + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -4091,6 +4631,8 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "devOptional": true, "license": "MIT", "engines": { @@ -4102,6 +4644,8 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4110,6 +4654,8 @@ }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4121,11 +4667,15 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "funding": [ { "type": "opencollective", @@ -4157,10 +4707,14 @@ }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/caching-transform": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { @@ -4175,6 +4729,8 @@ }, "node_modules/caching-transform/node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -4189,6 +4745,8 @@ }, "node_modules/call-bind": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -4206,6 +4764,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4218,6 +4778,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -4233,6 +4795,8 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", "engines": { "node": ">=6" @@ -4240,6 +4804,8 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -4247,7 +4813,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001760", + "version": "1.0.30001764", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", "funding": [ { "type": "opencollective", @@ -4266,6 +4834,8 @@ }, "node_modules/chai": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "license": "MIT", "dependencies": { @@ -4283,6 +4853,8 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4297,6 +4869,8 @@ }, "node_modules/charenc": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4305,6 +4879,8 @@ }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "license": "MIT", "dependencies": { @@ -4316,6 +4892,8 @@ }, "node_modules/chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "optional": true, "dependencies": { @@ -4339,6 +4917,8 @@ }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -4347,6 +4927,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4358,6 +4940,8 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "license": "MIT", "dependencies": { @@ -4373,6 +4957,8 @@ }, "node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4383,11 +4969,15 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -4396,6 +4986,8 @@ }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -4409,6 +5001,8 @@ }, "node_modules/clone": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", "engines": { @@ -4417,6 +5011,8 @@ }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -4429,6 +5025,8 @@ }, "node_modules/cmd-ts": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/cmd-ts/-/cmd-ts-0.13.0.tgz", + "integrity": "sha512-nsnxf6wNIM/JAS7T/x/1JmbEsjH0a8tezXqqpaL0O6+eV0/aDEnRxwjxpu0VzDdRcaC1ixGSbRlUuf/IU59I4g==", "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -4439,6 +5037,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4449,15 +5049,21 @@ }, "node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "license": "MIT", "engines": { "node": ">= 6" @@ -4465,6 +5071,8 @@ }, "node_modules/comment-parser": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", + "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", "dev": true, "license": "MIT", "engines": { @@ -4473,10 +5081,14 @@ }, "node_modules/commondir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "license": "MIT" }, "node_modules/complex.js": { "version": "2.0.11", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", + "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -4485,6 +5097,8 @@ }, "node_modules/compute-gcd": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", + "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -4494,6 +5108,8 @@ }, "node_modules/compute-lcm": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", + "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", "dev": true, "dependencies": { "compute-gcd": "^1.2.1", @@ -4504,25 +5120,36 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "license": "MIT" }, "node_modules/core-js": { "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, "hasInstallScript": true, "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", "license": "MIT", "dependencies": { "browserslist": "^4.28.0" @@ -4534,6 +5161,8 @@ }, "node_modules/core-js-pure": { "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -4543,10 +5172,14 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -4559,6 +5192,8 @@ }, "node_modules/crypt": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4567,26 +5202,36 @@ }, "node_modules/crypto-js": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", "dev": true, "license": "MIT" }, "node_modules/csstype": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, "node_modules/dag-map": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4603,6 +5248,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4619,6 +5266,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4635,6 +5284,8 @@ }, "node_modules/debug": { "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4650,6 +5301,8 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -4658,11 +5311,15 @@ }, "node_modules/decimal.js": { "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, "node_modules/deep-eql": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -4674,10 +5331,14 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "license": "MIT", "dependencies": { @@ -4692,6 +5353,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -4708,6 +5371,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -4724,10 +5389,14 @@ }, "node_modules/didyoumean": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4736,6 +5405,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -4747,6 +5418,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -4757,6 +5430,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -4770,20 +5445,28 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/enquirer": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", @@ -4794,7 +5477,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -4862,6 +5547,8 @@ }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -4870,6 +5557,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -4878,6 +5567,8 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -4889,6 +5580,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4903,6 +5596,8 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -4914,6 +5609,8 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -4930,11 +5627,15 @@ }, "node_modules/es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -4942,11 +5643,15 @@ }, "node_modules/escape-latex": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { "node": ">=10" @@ -4957,6 +5662,9 @@ }, "node_modules/eslint": { "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -5012,6 +5720,8 @@ }, "node_modules/eslint-config-airbnb": { "version": "19.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.2.tgz", + "integrity": "sha512-4v5DEMVSl043LaCT+gsxPcoiIk0iYG5zxJKKjIy80H/D//2E0vtuOBWkb0CBDxjF+y26yQzspIXYuY6wMmt9Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -5032,6 +5742,8 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { @@ -5050,6 +5762,8 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", "bin": { @@ -5061,6 +5775,8 @@ }, "node_modules/eslint-import-resolver-exports": { "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", + "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", "dev": true, "license": "MIT", "dependencies": { @@ -5073,6 +5789,8 @@ }, "node_modules/eslint-import-resolver-meteor": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-meteor/-/eslint-import-resolver-meteor-0.4.0.tgz", + "integrity": "sha512-BSqvgt6QZvk9EGhDGnM4azgbxyBD8b0y6FYA52WFzpWpHcZV9ys8PxM33bx8dlCy3HyopRLLsMUnlhTpZzsZmQ==", "dev": true, "license": "MIT", "peer": true, @@ -5086,6 +5804,8 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -5096,6 +5816,8 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5104,6 +5826,8 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -5120,6 +5844,8 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5128,6 +5854,8 @@ }, "node_modules/eslint-plugin-import": { "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, "license": "MIT", "dependencies": { @@ -5154,6 +5882,8 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -5162,6 +5892,8 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5173,11 +5905,15 @@ }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/eslint-plugin-jsdoc": { "version": "37.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.1.0.tgz", + "integrity": "sha512-DpkFzX5Sqkqzy4MCgowhDXmusWcF1Gn7wYnphdGfWmIkoQr6SwL0jEtltGAVyF5Rj6ACi6ydw0oCCI5hF3yz6w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5200,6 +5936,8 @@ }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -5211,6 +5949,8 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "license": "MIT", "dependencies": { @@ -5236,6 +5976,8 @@ }, "node_modules/eslint-plugin-mui-path-imports": { "version": "0.0.15", + "resolved": "https://registry.npmjs.org/eslint-plugin-mui-path-imports/-/eslint-plugin-mui-path-imports-0.0.15.tgz", + "integrity": "sha512-u61kgRBtUAG+zoApuf8oWuW6mf3SIfrpMq/gSQEM2h/3qzkqvWXB4RRmPzVryS6bpeXT0QsW8rFcdcMVnoz0hw==", "dev": true, "license": "MIT", "dependencies": { @@ -5250,6 +5992,8 @@ }, "node_modules/eslint-plugin-prettier": { "version": "4.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", + "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", "dev": true, "license": "MIT", "dependencies": { @@ -5270,6 +6014,8 @@ }, "node_modules/eslint-plugin-react": { "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", + "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", "dev": true, "license": "MIT", "dependencies": { @@ -5297,6 +6043,8 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "license": "MIT", "peer": true, @@ -5309,6 +6057,8 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5320,6 +6070,8 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -5336,6 +6088,8 @@ }, "node_modules/eslint-plugin-simple-import-sort": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", + "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5344,6 +6098,8 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -5355,6 +6111,8 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -5362,6 +6120,8 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -5375,6 +6135,8 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "license": "Apache-2.0", "engines": { "node": ">=4" @@ -5382,6 +6144,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "license": "Apache-2.0", "engines": { "node": ">=10" @@ -5389,6 +6153,8 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -5396,6 +6162,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5410,6 +6178,8 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -5417,6 +6187,8 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "license": "MIT", "engines": { "node": ">= 4" @@ -5424,6 +6196,8 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -5435,10 +6209,14 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/eslint/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5449,10 +6227,14 @@ }, "node_modules/eslint/node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, "node_modules/espree": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -5465,6 +6247,8 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "license": "Apache-2.0", "engines": { "node": ">=4" @@ -5472,6 +6256,8 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -5482,7 +6268,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -5493,6 +6281,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -5503,6 +6293,8 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -5510,6 +6302,8 @@ }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -5517,6 +6311,8 @@ }, "node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -5539,15 +6335,21 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -5563,14 +6365,20 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -5584,7 +6392,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -5593,6 +6403,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -5603,6 +6415,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5614,6 +6428,8 @@ }, "node_modules/find-cache-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -5626,6 +6442,8 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -5641,6 +6459,8 @@ }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -5649,6 +6469,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -5661,10 +6483,14 @@ }, "node_modules/flatted": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -5679,6 +6505,8 @@ }, "node_modules/foreground-child": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { @@ -5691,6 +6519,8 @@ }, "node_modules/fraction.js": { "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", + "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -5699,6 +6529,8 @@ }, "node_modules/fromentries": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -5718,15 +6550,22 @@ }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -5738,6 +6577,8 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5745,6 +6586,8 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5764,10 +6607,14 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -5776,6 +6623,8 @@ }, "node_modules/generator-function": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { @@ -5784,6 +6633,8 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -5791,6 +6642,8 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -5799,6 +6652,8 @@ }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "license": "MIT", "engines": { @@ -5807,6 +6662,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5830,6 +6687,8 @@ }, "node_modules/get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -5838,6 +6697,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -5850,6 +6711,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -5861,6 +6724,8 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -5877,6 +6742,9 @@ }, "node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -5895,6 +6763,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -5905,6 +6775,8 @@ }, "node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -5918,6 +6790,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5933,6 +6807,8 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -5952,6 +6828,8 @@ }, "node_modules/globby/node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -5960,6 +6838,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -5971,16 +6851,22 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/has": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, "license": "MIT", "engines": { @@ -5989,6 +6875,8 @@ }, "node_modules/has-bigints": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -6000,6 +6888,8 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -6007,6 +6897,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -6018,6 +6910,8 @@ }, "node_modules/has-proto": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6032,6 +6926,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -6043,6 +6939,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -6057,6 +6955,8 @@ }, "node_modules/hasha": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6072,6 +6972,8 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6080,6 +6982,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -6090,6 +6994,8 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -6098,11 +7004,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6111,6 +7021,8 @@ }, "node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -6119,6 +7031,8 @@ }, "node_modules/import-fresh": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -6133,6 +7047,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { "node": ">=0.8.19" @@ -6140,6 +7056,8 @@ }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -6148,6 +7066,9 @@ }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -6156,10 +7077,14 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -6173,6 +7098,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -6189,6 +7116,8 @@ }, "node_modules/is-async-function": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6207,6 +7136,8 @@ }, "node_modules/is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6221,6 +7152,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -6232,6 +7165,8 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -6247,11 +7182,15 @@ }, "node_modules/is-buffer": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -6263,6 +7202,8 @@ }, "node_modules/is-core-module": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -6276,6 +7217,8 @@ }, "node_modules/is-data-view": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -6292,6 +7235,8 @@ }, "node_modules/is-date-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -6307,6 +7252,8 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6314,6 +7261,8 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -6328,6 +7277,8 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -6339,6 +7290,8 @@ }, "node_modules/is-generator-function": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { @@ -6357,6 +7310,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -6367,6 +7322,8 @@ }, "node_modules/is-invalid-path": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6378,6 +7335,8 @@ }, "node_modules/is-invalid-path/node_modules/is-extglob": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -6386,6 +7345,8 @@ }, "node_modules/is-invalid-path/node_modules/is-glob": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -6397,6 +7358,8 @@ }, "node_modules/is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -6408,6 +7371,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -6419,6 +7384,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "devOptional": true, "license": "MIT", "engines": { @@ -6427,6 +7394,8 @@ }, "node_modules/is-number-object": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -6442,6 +7411,8 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -6450,6 +7421,8 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -6460,6 +7433,8 @@ }, "node_modules/is-regex": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -6477,6 +7452,8 @@ }, "node_modules/is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -6488,6 +7465,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -6502,6 +7481,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -6513,6 +7494,8 @@ }, "node_modules/is-string": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -6528,6 +7511,8 @@ }, "node_modules/is-symbol": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -6544,6 +7529,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6558,11 +7545,15 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -6574,6 +7565,8 @@ }, "node_modules/is-valid-path": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", "dev": true, "license": "MIT", "dependencies": { @@ -6585,6 +7578,8 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -6596,6 +7591,8 @@ }, "node_modules/is-weakref": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -6610,6 +7607,8 @@ }, "node_modules/is-weakset": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6625,6 +7624,8 @@ }, "node_modules/is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -6633,15 +7634,21 @@ }, "node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6649,6 +7656,8 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6657,6 +7666,8 @@ }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6668,6 +7679,8 @@ }, "node_modules/istanbul-lib-instrument": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6682,6 +7695,8 @@ }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "license": "ISC", "dependencies": { @@ -6698,6 +7713,8 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6709,6 +7726,8 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6722,6 +7741,8 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -6736,6 +7757,8 @@ }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -6747,6 +7770,8 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6760,6 +7785,8 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6768,6 +7795,8 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6780,15 +7809,21 @@ }, "node_modules/javascript-natural-sort": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", "dev": true, "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -6799,6 +7834,8 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", + "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", "dev": true, "license": "MIT", "engines": { @@ -6807,6 +7844,8 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -6817,15 +7856,21 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", + "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6834,6 +7879,8 @@ }, "node_modules/json-schema-deref-sync": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.14.0.tgz", + "integrity": "sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==", "dev": true, "license": "MIT", "dependencies": { @@ -6852,6 +7899,8 @@ }, "node_modules/json-schema-merge-allof": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", + "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -6865,6 +7914,8 @@ }, "node_modules/json-schema-to-typescript": { "version": "15.0.4", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz", + "integrity": "sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6887,6 +7938,8 @@ }, "node_modules/json-schema-to-typescript/node_modules/prettier": { "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { @@ -6901,14 +7954,20 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -6919,6 +7978,8 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6933,6 +7994,8 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -6940,6 +8003,8 @@ }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6947,11 +8012,15 @@ }, "node_modules/language-subtag-registry": { "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -6963,6 +8032,8 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -6974,6 +8045,8 @@ }, "node_modules/lilconfig": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", "dev": true, "license": "MIT", "engines": { @@ -6982,6 +8055,8 @@ }, "node_modules/lint-staged": { "version": "12.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", + "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", "dev": true, "license": "MIT", "dependencies": { @@ -7012,6 +8087,8 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", "engines": { @@ -7020,6 +8097,8 @@ }, "node_modules/lint-staged/node_modules/supports-color": { "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, "license": "MIT", "engines": { @@ -7031,6 +8110,8 @@ }, "node_modules/listr2": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, "license": "MIT", "dependencies": { @@ -7057,6 +8138,8 @@ }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { @@ -7072,11 +8155,15 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -7085,6 +8172,8 @@ }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7098,6 +8187,8 @@ }, "node_modules/listr2/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -7111,6 +8202,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -7125,27 +8218,39 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7161,6 +8266,8 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { @@ -7178,11 +8285,15 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -7191,6 +8302,8 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7207,6 +8320,8 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -7220,6 +8335,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -7233,6 +8350,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7244,6 +8363,8 @@ }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -7252,6 +8373,8 @@ }, "node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -7259,6 +8382,8 @@ }, "node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "license": "MIT", "dependencies": { "pify": "^4.0.1", @@ -7270,6 +8395,8 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", "bin": { "semver": "bin/semver" @@ -7277,10 +8404,14 @@ }, "node_modules/make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "license": "ISC" }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -7289,6 +8420,8 @@ }, "node_modules/mathjs": { "version": "5.10.3", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", + "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7310,11 +8443,15 @@ }, "node_modules/mathjs/node_modules/decimal.js": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==", "dev": true, "license": "MIT" }, "node_modules/md5": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7325,16 +8462,22 @@ }, "node_modules/memory-cache": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -7343,6 +8486,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -7355,6 +8500,8 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -7363,6 +8510,8 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -7373,6 +8522,8 @@ }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -7381,11 +8532,15 @@ }, "node_modules/mixwith": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", + "integrity": "sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A==", "dev": true, "license": "Apache-2.0" }, "node_modules/mocha": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "license": "MIT", "dependencies": { @@ -7420,6 +8575,8 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "license": "MIT", "engines": { @@ -7428,6 +8585,8 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7436,6 +8595,8 @@ }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -7462,6 +8623,8 @@ }, "node_modules/mocha/node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7478,11 +8641,16 @@ }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "license": "MIT" }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -7501,6 +8669,8 @@ }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -7512,6 +8682,8 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "license": "ISC", "dependencies": { @@ -7523,6 +8695,8 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7548,10 +8722,14 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -7569,15 +8747,21 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7589,10 +8773,14 @@ }, "node_modules/node-releases": { "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "devOptional": true, "license": "MIT", "engines": { @@ -7601,6 +8789,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -7612,6 +8802,8 @@ }, "node_modules/nunjucks": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7636,6 +8828,8 @@ }, "node_modules/nunjucks/node_modules/commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, "license": "MIT", "engines": { @@ -7644,6 +8838,8 @@ }, "node_modules/nyc": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "license": "ISC", "dependencies": { @@ -7684,6 +8880,8 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7694,11 +8892,15 @@ }, "node_modules/nyc/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/nyc/node_modules/find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { @@ -7715,6 +8917,8 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -7727,6 +8931,8 @@ }, "node_modules/nyc/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -7735,6 +8941,8 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7746,6 +8954,8 @@ }, "node_modules/nyc/node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -7760,6 +8970,8 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -7774,6 +8986,8 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -7785,6 +8999,8 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7796,6 +9012,8 @@ }, "node_modules/nyc/node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7807,6 +9025,8 @@ }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -7815,6 +9035,8 @@ }, "node_modules/nyc/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -7828,6 +9050,8 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -7841,11 +9065,15 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -7867,6 +9095,8 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7879,6 +9109,8 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -7887,6 +9119,8 @@ }, "node_modules/object-inspect": { "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -7898,6 +9132,8 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -7906,6 +9142,8 @@ }, "node_modules/object.assign": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -7925,6 +9163,8 @@ }, "node_modules/object.entries": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -7939,6 +9179,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7956,6 +9198,8 @@ }, "node_modules/object.hasown": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -7972,6 +9216,8 @@ }, "node_modules/object.values": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -7989,6 +9235,8 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -7996,6 +9244,8 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -8010,6 +9260,8 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -8025,6 +9277,8 @@ }, "node_modules/own-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -8041,6 +9295,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8055,6 +9311,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -8069,6 +9327,8 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8083,6 +9343,8 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -8090,6 +9352,8 @@ }, "node_modules/package-hash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8104,6 +9368,8 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -8114,6 +9380,8 @@ }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -8122,6 +9390,8 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8129,6 +9399,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -8136,10 +9408,14 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -8148,6 +9424,8 @@ }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "license": "MIT", "engines": { @@ -8156,10 +9434,14 @@ }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "devOptional": true, "license": "MIT", "engines": { @@ -8171,6 +9453,8 @@ }, "node_modules/pidtree": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, "license": "MIT", "bin": { @@ -8182,6 +9466,8 @@ }, "node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "license": "MIT", "engines": { "node": ">=6" @@ -8189,6 +9475,8 @@ }, "node_modules/pirates": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { "node": ">= 6" @@ -8196,6 +9484,8 @@ }, "node_modules/pkg-dir": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "license": "MIT", "dependencies": { "find-up": "^3.0.0" @@ -8206,6 +9496,8 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "license": "MIT", "dependencies": { "locate-path": "^3.0.0" @@ -8216,6 +9508,8 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "license": "MIT", "dependencies": { "p-locate": "^3.0.0", @@ -8227,6 +9521,8 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -8240,6 +9536,8 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "license": "MIT", "dependencies": { "p-limit": "^2.0.0" @@ -8250,6 +9548,8 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", "engines": { "node": ">=4" @@ -8265,6 +9565,8 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -8273,6 +9575,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -8280,6 +9584,8 @@ }, "node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -8293,7 +9599,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -8305,6 +9613,8 @@ }, "node_modules/process-on-spawn": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8316,6 +9626,8 @@ }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -8323,6 +9635,8 @@ }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -8333,6 +9647,8 @@ }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -8340,6 +9656,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -8359,6 +9677,8 @@ }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8366,7 +9686,9 @@ } }, "node_modules/react": { - "version": "19.2.1", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "dev": true, "license": "MIT", "peer": true, @@ -8376,11 +9698,16 @@ }, "node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, "node_modules/react-jsonschema-form": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz", + "integrity": "sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==", + "deprecated": "react-jsonschema-form has been moved to @rjsf/core", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8403,6 +9730,8 @@ }, "node_modules/react-jsonschema-form/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -8418,16 +9747,22 @@ }, "node_modules/react-jsonschema-form/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -8439,6 +9774,8 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -8460,10 +9797,14 @@ }, "node_modules/regenerate": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -8474,10 +9815,14 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -8497,6 +9842,8 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "license": "MIT", "engines": { "node": ">=8" @@ -8507,6 +9854,8 @@ }, "node_modules/regexpu-core": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -8522,6 +9871,8 @@ }, "node_modules/regextras": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true, "license": "MIT", "engines": { @@ -8530,10 +9881,14 @@ }, "node_modules/regjsgen": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -8544,6 +9899,8 @@ }, "node_modules/release-zalgo": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "license": "ISC", "dependencies": { @@ -8555,6 +9912,8 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -8563,6 +9922,8 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8570,11 +9931,15 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "license": "ISC" }, "node_modules/requireindex": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, "license": "MIT", "engines": { @@ -8583,6 +9948,8 @@ }, "node_modules/resolve": { "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", @@ -8601,6 +9968,8 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", "engines": { "node": ">=4" @@ -8608,6 +9977,8 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -8616,6 +9987,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -8628,6 +10001,8 @@ }, "node_modules/reusify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -8637,11 +10012,16 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -8655,6 +10035,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -8677,6 +10059,8 @@ }, "node_modules/rxjs": { "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8685,6 +10069,8 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8703,6 +10089,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -8722,6 +10110,8 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -8737,6 +10127,8 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -8753,16 +10145,22 @@ }, "node_modules/seed-random": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", "dev": true, "license": "MIT" }, "node_modules/seedrandom": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true, "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8770,6 +10168,8 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8778,11 +10178,15 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -8799,6 +10203,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8813,6 +10219,8 @@ }, "node_modules/set-proto": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -8826,6 +10234,8 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -8836,6 +10246,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -8846,6 +10258,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -8853,6 +10267,8 @@ }, "node_modules/shortid": { "version": "2.2.17", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.17.tgz", + "integrity": "sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==", "dev": true, "license": "MIT", "dependencies": { @@ -8861,6 +10277,8 @@ }, "node_modules/side-channel": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -8879,6 +10297,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -8894,6 +10314,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8911,6 +10333,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -8929,11 +10353,15 @@ }, "node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "license": "MIT", "engines": { "node": ">=6" @@ -8941,6 +10369,8 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8956,6 +10386,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -8967,6 +10399,8 @@ }, "node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8974,6 +10408,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -8982,6 +10418,8 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8989,6 +10427,8 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "license": "ISC", "dependencies": { @@ -9005,6 +10445,8 @@ }, "node_modules/spawn-wrap/node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9019,11 +10461,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9033,16 +10479,22 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9055,6 +10507,8 @@ }, "node_modules/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -9063,6 +10517,8 @@ }, "node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -9079,6 +10535,8 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -9090,6 +10548,8 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -9104,6 +10564,8 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -9130,6 +10592,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -9150,6 +10614,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9167,6 +10633,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -9183,6 +10651,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9193,6 +10663,8 @@ }, "node_modules/strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -9201,6 +10673,8 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -9209,6 +10683,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", "engines": { "node": ">=8" @@ -9219,6 +10695,8 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -9229,6 +10707,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9239,6 +10719,8 @@ }, "node_modules/table": { "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -9253,10 +10735,14 @@ }, "node_modules/table/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -9264,6 +10750,8 @@ }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9279,6 +10767,8 @@ }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9291,6 +10781,8 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -9304,20 +10796,28 @@ }, "node_modules/text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "license": "MIT" }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9333,6 +10833,8 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -9349,6 +10851,8 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -9360,6 +10864,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9371,6 +10877,8 @@ }, "node_modules/traverse": { "version": "0.6.11", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", + "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", "dev": true, "license": "MIT", "dependencies": { @@ -9387,6 +10895,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -9428,6 +10938,8 @@ }, "node_modules/ts-node/node_modules/acorn": { "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -9438,6 +10950,8 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -9445,6 +10959,8 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -9456,6 +10972,8 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -9467,6 +10985,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -9475,11 +10995,15 @@ }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "license": "MIT", "dependencies": { @@ -9494,11 +11018,15 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -9509,6 +11037,8 @@ }, "node_modules/type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -9517,6 +11047,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -9527,6 +11059,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9540,6 +11074,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -9558,6 +11094,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9578,6 +11116,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -9597,6 +11137,8 @@ }, "node_modules/typed-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.0.tgz", + "integrity": "sha512-TuQzwiT4DDg19beHam3E66oRXhyqlyfgjHB/5fcvsRXbfmWPJfto9B4a0TBdTrQAPGlGmXh/k7iUI+WsObgORA==", "dev": true, "engines": { "node": ">= 6" @@ -9604,6 +11146,8 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9612,6 +11156,8 @@ }, "node_modules/typedarray.prototype.slice": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", + "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", "dev": true, "license": "MIT", "dependencies": { @@ -9633,6 +11179,8 @@ }, "node_modules/typescript": { "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -9644,6 +11192,8 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -9661,11 +11211,15 @@ }, "node_modules/underscore": { "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "dev": true, "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9678,10 +11232,14 @@ }, "node_modules/undici-types": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "license": "MIT", "engines": { "node": ">=4" @@ -9689,6 +11247,8 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -9700,6 +11260,8 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "license": "MIT", "engines": { "node": ">=4" @@ -9707,13 +11269,17 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/update-browserslist-db": { - "version": "1.2.2", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -9742,6 +11308,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -9749,11 +11317,15 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -9769,27 +11341,39 @@ }, "node_modules/v8-compile-cache": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "license": "MIT" }, "node_modules/valid-url": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", "dev": true }, "node_modules/validate.io-array": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", "dev": true, "license": "MIT" }, "node_modules/validate.io-function": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==", "dev": true }, "node_modules/validate.io-integer": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dev": true, "dependencies": { "validate.io-number": "^1.0.3" @@ -9797,6 +11381,8 @@ }, "node_modules/validate.io-integer-array": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -9805,10 +11391,14 @@ }, "node_modules/validate.io-number": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==", "dev": true }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9822,6 +11412,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -9840,6 +11432,8 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9866,6 +11460,8 @@ }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -9883,11 +11479,15 @@ }, "node_modules/which-module": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -9908,6 +11508,8 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9915,11 +11517,15 @@ }, "node_modules/workerpool": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9936,11 +11542,15 @@ }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -9949,6 +11559,8 @@ }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9962,10 +11574,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "license": "ISC", "dependencies": { @@ -9977,6 +11593,8 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -9985,10 +11603,14 @@ }, "node_modules/yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", "engines": { @@ -9997,6 +11619,8 @@ }, "node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -10014,6 +11638,8 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "license": "ISC", "engines": { @@ -10022,6 +11648,8 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -10036,6 +11664,8 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -10047,6 +11677,8 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -10058,11 +11690,15 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -10071,6 +11707,8 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -10084,6 +11722,8 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "license": "MIT", "engines": { "node": ">=6" @@ -10091,6 +11731,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 54f7616e..ea2dff67 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@exabyte-io/eslint-config": "^2022.11.17-0", "@mat3ra/ade": "2025.11.19-0", - "@mat3ra/wode": "2026.1.12-0", + "@mat3ra/wode": "2026.1.13-0", "@mat3ra/mode": "2025.11.13-0", "@mat3ra/utils": "^2025.12.2-0", "@mat3ra/code": "^2025.8.7-0", diff --git a/src/py/mat3ra/standata/data/subworkflows.py b/src/py/mat3ra/standata/data/subworkflows.py index 35636b0d..a675ed0b 100644 --- a/src/py/mat3ra/standata/data/subworkflows.py +++ b/src/py/mat3ra/standata/data/subworkflows.py @@ -1,3 +1,3 @@ import json -subworkflows_data = json.loads(r'''{"standataConfig":{"categories":{"properties":["atomic_forces","average_potential_profile","band_gaps","band_structure","charge_density_profile","density_of_states","dielectric_tensor","fermi_energy","file_content","final_structure","phonon_dispersions","phonon_dos","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset","workflow:pyml_predict","zero_point_energy"],"tags":["creates-predictions-csv-during-predict-phase","default","pyml:workflow-type-setter","remove-all-results","set-io-unit-filenames","variable-cell_relaxation"],"application":["espresso","nwchem","python","shell","vasp"]},"entities":[{"filename":"espresso/average_electrostatic_potential_find_minima.json","categories":["espresso","python"]},{"filename":"espresso/average_electrostatic_potential_via_band_structure.json","categories":["atomic_forces","average_potential_profile","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap_hse_dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap.json","categories":["atomic_forces","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_dos.json","categories":["atomic_forces","band_gaps","band_structure","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_hse.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_magn.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_soc.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dielectric_tensor.json","categories":["atomic_forces","band_gaps","dielectric_tensor","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/electronic_density_mesh.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm_relax.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/espresso_extract_kpoints.json","categories":["espresso","python"]},{"filename":"espresso/espresso_xml_get_qpt_irr.json","categories":["espresso","python"]},{"filename":"espresso/fixed_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_full_frequency.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_plasmon_pole.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/kpoint_convergence.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/neb.json","categories":["espresso","reaction_energy_barrier","reaction_energy_profile"]},{"filename":"espresso/ph_init_qpoints.json","categories":["espresso"]},{"filename":"espresso/ph_single_irr_qpt.json","categories":["espresso"]},{"filename":"espresso/phonon_dispersions.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos_dispersion.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_reduce.json","categories":["espresso","phonon_dispersions","phonon_dos"]},{"filename":"espresso/post_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pre_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pw_scf.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/recalculate_bands.json","categories":["band_structure","espresso"]},{"filename":"espresso/surface_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/total_energy.json","categories":["atomic_forces","default","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/valence_band_offset_calc_from_previous_esp_vbm.json","categories":["espresso","python","valence_band_offset"]},{"filename":"espresso/variable_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation"]},{"filename":"espresso/zero_point_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"]},{"filename":"nwchem/total_energy.json","categories":["nwchem","total_energy","total_energy_contributions"]},{"filename":"python/ml/classification_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/clustering_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/regression_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/train_head.json","categories":["pyml:workflow-type-setter","python","set-io-unit-filenames"]},{"filename":"python/python_script.json","categories":["python"]},{"filename":"shell/batch_espresso_pwscf.json","categories":["shell"]},{"filename":"shell/hello_world.json","categories":["shell"]},{"filename":"vasp/band_gap.json","categories":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure_dos.json","categories":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure.json","categories":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/dos.json","categories":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/fixed_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","vasp"]},{"filename":"vasp/initial_final_total_energies.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/kpoint_convergence.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/neb_subworkflow.json","categories":["reaction_energy_barrier","reaction_energy_profile","vasp"]},{"filename":"vasp/prepare_images.json","categories":["shell","vasp"]},{"filename":"vasp/recalculate_bands.json","categories":["band_structure","vasp"]},{"filename":"vasp/surface_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/total_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/variable_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation","vasp"]},{"filename":"vasp/zero_point_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","vasp","zero_point_energy"]}]},"filesMapByName":{"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"status":"idle","statusTrack":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1"},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752"},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0"},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b"},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3b230ec3-0791-52f7-a4db-625390b8718f"},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"status":"idle","statusTrack":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","tags":[],"head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb"},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":["standard_output"],"results":["dielectric_tensor"],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061"},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":["standard_output"],"results":[],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"next":"d0fd8654-2106-546b-8792-7bb46272befc","status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e"},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78"},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"pwscf-kpoint-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":["standard_output"],"results":[],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["variable-cell_relaxation"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef"},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"status":"idle","statusTrack":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1"},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752"},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0"},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b"},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3b230ec3-0791-52f7-a4db-625390b8718f"},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"status":"idle","statusTrack":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","tags":[],"head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb"},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":["standard_output"],"results":["dielectric_tensor"],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061"},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":["standard_output"],"results":[],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"next":"d0fd8654-2106-546b-8792-7bb46272befc","status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e"},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78"},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"pwscf-kpoint-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":["standard_output"],"results":[],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["variable-cell_relaxation"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef"},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Preliminary SCF Calculation","type":"subworkflow","_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","status":"idle","statusTrack":[],"flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","tags":[],"head":true,"next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271"},{"name":"ph-init-qpoints","type":"subworkflow","_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","status":"idle","statusTrack":[],"flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","tags":[],"head":false,"next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0"},{"name":"espresso-xml-get-qpt-irr","type":"subworkflow","_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","status":"idle","statusTrack":[],"flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","tags":[],"head":false,"next":"24e3c1f0-8090-512e-9727-8770071d17c8"},{"name":"map","type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a","input":{"target":"MAP_DATA","scope":"global","name":"Q_POINTS","values":[],"useValues":false},"status":"idle","statusTrack":[],"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","tags":[],"head":false,"next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6"},{"name":"reduce","type":"subworkflow","_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","status":"idle","statusTrack":[],"flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","tags":[],"head":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","workflows":[{"name":"pre-processor","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"pre-processor","type":"subworkflow","_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","status":"idle","statusTrack":[],"flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","tags":[],"head":true,"next":"c2195045-7a5c-54d3-ab88-211c82de09f1"},{"name":"ph-single-irr-qpt","type":"subworkflow","_id":"e68db280-8636-53e3-81a0-88396ba6147d","status":"idle","statusTrack":[],"flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","tags":[],"head":false,"next":"e483c7fb-2a29-5e91-819a-7465ead70134"},{"name":"post-processor","type":"subworkflow","_id":"7239fc3a-b343-513f-af35-e8687e1829da","status":"idle","statusTrack":[],"flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","tags":[],"head":false}],"properties":[],"_id":"731d3397-3278-516a-b28e-53626ef50f0a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""}}}],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/recalculate_bands.json":{"name":"Recalculate Bands","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Recalculate Bands","type":"subworkflow","_id":"64551dfb-e529-5d8d-9092-ff268f4da134","status":"idle","statusTrack":[],"flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","tags":[],"head":true}],"properties":["band_structure"],"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/surface_energy.json":{"name":"Surface Energy","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]}],"units":[{"name":"Surface Energy","type":"subworkflow","_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","status":"idle","statusTrack":[],"flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"_id":"68512987-de73-5614-bab2-0f8b575cffa3","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["default"],"application":{"name":"espresso"}},"espresso/valence_band_offset.json":{"name":"Valence Band Offset (2D)","subworkflows":[{"isMultiMaterial":true,"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","name":"BS + Avg ESP (Interface)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface)","type":"assignment","operand":"MATERIAL_INDEX","value":"0","input":[],"status":"idle","statusTrack":[],"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","name":"Find ESP Values (Interface)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"status":"idle","statusTrack":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-left"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-left"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"status":"idle","statusTrack":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-right"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-right"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"BS + Avg ESP (Interface)","type":"subworkflow","_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","status":"idle","statusTrack":[],"flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","tags":[],"head":true,"next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b"},{"name":"Find ESP Values (Interface)","type":"subworkflow","_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","status":"idle","statusTrack":[],"flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","tags":[],"head":false,"next":"8d5b4734-edfd-55cc-ad80-aaa72487398d"},{"name":"BS + Avg ESP (interface left)","type":"subworkflow","_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","status":"idle","statusTrack":[],"flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","tags":[],"head":false,"next":"102ec582-5b75-52f5-8b39-19ca725ed47a"},{"name":"Find ESP Value (Interface left)","type":"subworkflow","_id":"6c303926-905c-5749-81d5-2d2964fdf09a","status":"idle","statusTrack":[],"flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","tags":[],"head":false,"next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d"},{"name":"BS + Avg ESP (interface right)","type":"subworkflow","_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","status":"idle","statusTrack":[],"flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","tags":[],"head":false,"next":"e3444d35-cc41-59f5-8481-78d0c383b84e"},{"name":"Find ESP Value (Interface right)","type":"subworkflow","_id":"736295e8-2ee0-5974-83bc-362061ac0688","status":"idle","statusTrack":[],"flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","tags":[],"head":false,"next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39"},{"name":"Calculate VBO","type":"subworkflow","_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","status":"idle","statusTrack":[],"flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","tags":[],"head":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Variable-cell Relaxation","type":"subworkflow","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","status":"idle","statusTrack":[],"flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Zero Point Energy","type":"subworkflow","_id":"151538cc-9e71-5269-8b9e-cb5977151227","status":"idle","statusTrack":[],"flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["total_energy","total_energy_contributions"],"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Python Script","type":"subworkflow","_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","status":"idle","statusTrack":[],"flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","tags":[],"head":true}],"properties":[],"_id":"de816646-766b-5f97-b468-0937d4381440","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Batch Job (Espresso PWSCF)","type":"subworkflow","_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","status":"idle","statusTrack":[],"flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","tags":[],"head":true}],"properties":[],"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Hello World","type":"subworkflow","_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","status":"idle","statusTrack":[],"flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","tags":[],"head":true}],"properties":[],"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Gap","type":"subworkflow","_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","status":"idle","statusTrack":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","tags":[],"head":true}],"properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure + Density of States","type":"subworkflow","_id":"d38fea11-9781-5151-8dae-d705381498be","status":"idle","statusTrack":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","tags":[],"head":true}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure","type":"subworkflow","_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","status":"idle","statusTrack":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","tags":[],"head":true}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Density of States","type":"subworkflow","_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","status":"idle","statusTrack":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","tags":[],"head":true}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Fixed-cell Relaxation","type":"subworkflow","_id":"db6cc94b-2f26-5688-ba97-80b11567b549","status":"idle","statusTrack":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"K-point Convergence","type":"subworkflow","_id":"5d736d84-d616-538f-a09b-81a32ac0777c","status":"idle","statusTrack":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Preliminary SCF Calculation","type":"subworkflow","_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","status":"idle","statusTrack":[],"flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","tags":[],"head":true,"next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271"},{"name":"ph-init-qpoints","type":"subworkflow","_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","status":"idle","statusTrack":[],"flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","tags":[],"head":false,"next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0"},{"name":"espresso-xml-get-qpt-irr","type":"subworkflow","_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","status":"idle","statusTrack":[],"flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","tags":[],"head":false,"next":"24e3c1f0-8090-512e-9727-8770071d17c8"},{"name":"map","type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a","input":{"target":"MAP_DATA","scope":"global","name":"Q_POINTS","values":[],"useValues":false},"status":"idle","statusTrack":[],"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","tags":[],"head":false,"next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6"},{"name":"reduce","type":"subworkflow","_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","status":"idle","statusTrack":[],"flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","tags":[],"head":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","workflows":[{"name":"pre-processor","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"pre-processor","type":"subworkflow","_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","status":"idle","statusTrack":[],"flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","tags":[],"head":true,"next":"c2195045-7a5c-54d3-ab88-211c82de09f1"},{"name":"ph-single-irr-qpt","type":"subworkflow","_id":"e68db280-8636-53e3-81a0-88396ba6147d","status":"idle","statusTrack":[],"flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","tags":[],"head":false,"next":"e483c7fb-2a29-5e91-819a-7465ead70134"},{"name":"post-processor","type":"subworkflow","_id":"7239fc3a-b343-513f-af35-e8687e1829da","status":"idle","statusTrack":[],"flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","tags":[],"head":false}],"properties":[],"_id":"731d3397-3278-516a-b28e-53626ef50f0a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""}}}],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/recalculate_bands.json":{"name":"Recalculate Bands","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Recalculate Bands","type":"subworkflow","_id":"64551dfb-e529-5d8d-9092-ff268f4da134","status":"idle","statusTrack":[],"flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","tags":[],"head":true}],"properties":["band_structure"],"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/surface_energy.json":{"name":"Surface Energy","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]}],"units":[{"name":"Surface Energy","type":"subworkflow","_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","status":"idle","statusTrack":[],"flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"_id":"68512987-de73-5614-bab2-0f8b575cffa3","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["default"],"application":{"name":"espresso"}},"espresso/valence_band_offset.json":{"name":"Valence Band Offset (2D)","subworkflows":[{"isMultiMaterial":true,"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","name":"BS + Avg ESP (Interface)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface)","type":"assignment","operand":"MATERIAL_INDEX","value":"0","input":[],"status":"idle","statusTrack":[],"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","name":"Find ESP Values (Interface)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"status":"idle","statusTrack":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-left"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-left"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"status":"idle","statusTrack":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-right"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-right"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"BS + Avg ESP (Interface)","type":"subworkflow","_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","status":"idle","statusTrack":[],"flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","tags":[],"head":true,"next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b"},{"name":"Find ESP Values (Interface)","type":"subworkflow","_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","status":"idle","statusTrack":[],"flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","tags":[],"head":false,"next":"8d5b4734-edfd-55cc-ad80-aaa72487398d"},{"name":"BS + Avg ESP (interface left)","type":"subworkflow","_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","status":"idle","statusTrack":[],"flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","tags":[],"head":false,"next":"102ec582-5b75-52f5-8b39-19ca725ed47a"},{"name":"Find ESP Value (Interface left)","type":"subworkflow","_id":"6c303926-905c-5749-81d5-2d2964fdf09a","status":"idle","statusTrack":[],"flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","tags":[],"head":false,"next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d"},{"name":"BS + Avg ESP (interface right)","type":"subworkflow","_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","status":"idle","statusTrack":[],"flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","tags":[],"head":false,"next":"e3444d35-cc41-59f5-8481-78d0c383b84e"},{"name":"Find ESP Value (Interface right)","type":"subworkflow","_id":"736295e8-2ee0-5974-83bc-362061ac0688","status":"idle","statusTrack":[],"flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","tags":[],"head":false,"next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39"},{"name":"Calculate VBO","type":"subworkflow","_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","status":"idle","statusTrack":[],"flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","tags":[],"head":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Variable-cell Relaxation","type":"subworkflow","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","status":"idle","statusTrack":[],"flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Zero Point Energy","type":"subworkflow","_id":"151538cc-9e71-5269-8b9e-cb5977151227","status":"idle","statusTrack":[],"flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["total_energy","total_energy_contributions"],"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Python Script","type":"subworkflow","_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","status":"idle","statusTrack":[],"flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","tags":[],"head":true}],"properties":[],"_id":"de816646-766b-5f97-b468-0937d4381440","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Batch Job (Espresso PWSCF)","type":"subworkflow","_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","status":"idle","statusTrack":[],"flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","tags":[],"head":true}],"properties":[],"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Hello World","type":"subworkflow","_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","status":"idle","statusTrack":[],"flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","tags":[],"head":true}],"properties":[],"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Gap","type":"subworkflow","_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","status":"idle","statusTrack":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","tags":[],"head":true}],"properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure + Density of States","type":"subworkflow","_id":"d38fea11-9781-5151-8dae-d705381498be","status":"idle","statusTrack":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","tags":[],"head":true}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure","type":"subworkflow","_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","status":"idle","statusTrack":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","tags":[],"head":true}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Density of States","type":"subworkflow","_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","status":"idle","statusTrack":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","tags":[],"head":true}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Fixed-cell Relaxation","type":"subworkflow","_id":"db6cc94b-2f26-5688-ba97-80b11567b549","status":"idle","statusTrack":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"K-point Convergence","type":"subworkflow","_id":"5d736d84-d616-538f-a09b-81a32ac0777c","status":"idle","statusTrack":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <