From d72816d43938898984747c5e2266583c9a5e1e8e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:27:31 +0200 Subject: [PATCH 1/6] Add tests for jupyter notebooks --- .github/workflows/pipeline.yml | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .github/workflows/pipeline.yml diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml new file mode 100644 index 0000000..1b5921d --- /dev/null +++ b/.github/workflows/pipeline.yml @@ -0,0 +1,83 @@ +name: Pipeline + +on: + push: + branches: [ main ] + pull_request: + +jobs: + nfdi4ing: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v6 + - name: Conda config + run: echo -e "channels:\n - conda-forge\n" > .condarc + - uses: conda-incubator/setup-miniconda@v4 + with: + python-version: "3.12" + miniforge-version: latest + condarc-file: .condarc + environment-file: environment.yml + - name: Installation and setup + shell: bash -l {0} + run: | + conda install -c conda-forge jupyter papermill + - name: Create Additional Conda Environments + shell: bash -l {0} + run: | + conda env create -n preprocessing -f nfdi/source/envs/preprocessing.yaml -y + conda env create -n processing -f nfdi/source/envs/processing.yaml -y + conda env create -n postprocessing -f nfdi/source/envs/postprocessing.yaml -y + - name: Tests + shell: bash -l {0} + run: | + cd nfdi/ + papermill pyironflow.ipynb pyironflow_out.ipynb -k "python3" + + quantumespresso: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Setup environment + shell: bash -l {0} + run: echo -e "channels:\n - conda-forge\n" > .condarc + - uses: conda-incubator/setup-miniconda@v4 + with: + python-version: "3.12" + miniforge-version: latest + condarc-file: .condarc + environment-file: environment.yml + - name: Installation and setup + shell: bash -l {0} + run: | + pip install --no-deps --no-build-isolation -e quantum_espresso/qe_xml_parser + conda install -c conda-forge jupyter papermill + - name: Tests + shell: bash -l {0} + run: | + export ESPRESSO_PSEUDO=$(pwd)/espresso/pseudo + cp -r quantum_espresso/espresso . + cd quantum_espresso + papermill pyironflow.ipynb pyironflow_out.ipynb -k "python3" + + arithmetic: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Conda config + run: echo -e "channels:\n - conda-forge\n" > .condarc + - uses: conda-incubator/setup-miniconda@v4 + with: + python-version: "3.12" + miniforge-version: latest + condarc-file: .condarc + environment-file: environment.yml + - name: Installation and setup + shell: bash -l {0} + run: | + conda install -c conda-forge jupyter papermill + - name: Tests + shell: bash -l {0} + run: | + cd arithmetic + papermill pyironflow.ipynb pyironflow_out.ipynb -k "python3" From c62ba3428965e23e5693dc184e385ecce518b717 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:34:14 +0200 Subject: [PATCH 2/6] install hatchling --- .github/workflows/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 1b5921d..5699ae9 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -50,8 +50,8 @@ jobs: - name: Installation and setup shell: bash -l {0} run: | + conda install -c conda-forge jupyter papermill hatchling pip install --no-deps --no-build-isolation -e quantum_espresso/qe_xml_parser - conda install -c conda-forge jupyter papermill - name: Tests shell: bash -l {0} run: | From 772a17b29a8d5f670f521cb8847a4672799a6bcd Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:34:26 +0200 Subject: [PATCH 3/6] Use JSON files from official repo --- arithmetic/workflow.json | 80 +--- nfdi/workflow.json | 175 ++------- quantum_espresso/workflow.json | 645 +++++---------------------------- 3 files changed, 131 insertions(+), 769 deletions(-) diff --git a/arithmetic/workflow.json b/arithmetic/workflow.json index 24b1d52..7aa94a8 100644 --- a/arithmetic/workflow.json +++ b/arithmetic/workflow.json @@ -1,75 +1,19 @@ { "version": "0.1.0", "nodes": [ - { - "id": 0, - "type": "function", - "value": "workflow.get_prod_and_div" - }, - { - "id": 1, - "type": "function", - "value": "workflow.get_sum" - }, - { - "id": 2, - "type": "function", - "value": "workflow.get_square" - }, - { - "id": 3, - "type": "input", - "name": "x", - "value": 1 - }, - { - "id": 4, - "type": "input", - "name": "y", - "value": 2 - }, - { - "id": 5, - "type": "output", - "name": "result" - } + {"id": 0, "type": "function", "value": "workflow.get_prod_and_div"}, + {"id": 1, "type": "function", "value": "workflow.get_sum"}, + {"id": 2, "type": "function", "value": "workflow.get_square"}, + {"id": 3, "type": "input", "value": 1, "name": "x"}, + {"id": 4, "type": "input", "value": 2, "name": "y"}, + {"id": 5, "type": "output", "name": "result"} ], "edges": [ - { - "target": 1, - "targetPort": "y", - "source": 0, - "sourcePort": "div" - }, - { - "target": 1, - "targetPort": "x", - "source": 0, - "sourcePort": "prod" - }, - { - "target": 2, - "targetPort": "x", - "source": 1, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "x", - "source": 3, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "y", - "source": 4, - "sourcePort": null - }, - { - "target": 5, - "targetPort": null, - "source": 2, - "sourcePort": null - } + {"target": 0, "targetPort": "x", "source": 3, "sourcePort": null}, + {"target": 0, "targetPort": "y", "source": 4, "sourcePort": null}, + {"target": 1, "targetPort": "x", "source": 0, "sourcePort": "prod"}, + {"target": 1, "targetPort": "y", "source": 0, "sourcePort": "div"}, + {"target": 2, "targetPort": "x", "source": 1, "sourcePort": null}, + {"target": 5, "targetPort": null, "source": 2, "sourcePort": null} ] } \ No newline at end of file diff --git a/nfdi/workflow.json b/nfdi/workflow.json index 8803901..b9135dc 100644 --- a/nfdi/workflow.json +++ b/nfdi/workflow.json @@ -1,156 +1,33 @@ { "version": "0.1.0", "nodes": [ - { - "id": 0, - "type": "function", - "value": "workflow.generate_mesh" - }, - { - "id": 1, - "type": "function", - "value": "workflow.convert_to_xdmf" - }, - { - "id": 2, - "type": "function", - "value": "workflow.poisson" - }, - { - "id": 3, - "type": "function", - "value": "workflow.plot_over_line" - }, - { - "id": 4, - "type": "function", - "value": "workflow.substitute_macros" - }, - { - "id": 5, - "type": "function", - "value": "workflow.compile_paper" - }, - { - "id": 6, - "type": "input", - "name": "domain_size", - "value": 2.0 - }, - { - "id": 7, - "type": "input", - "name": "source_directory", - "value": "/home/jan/Desktop/visual-programming-with-pyironflow/nfdi/source" - }, - { - "id": 8, - "type": "output", - "name": "result" - } + {"id": 0, "type": "function", "value": "workflow.generate_mesh"}, + {"id": 1, "type": "function", "value": "workflow.convert_to_xdmf"}, + {"id": 2, "type": "function", "value": "workflow.poisson"}, + {"id": 3, "type": "function", "value": "workflow.plot_over_line"}, + {"id": 4, "type": "function", "value": "workflow.substitute_macros"}, + {"id": 5, "type": "function", "value": "workflow.compile_paper"}, + {"id": 6, "type": "input", "value": 2.0, "name": "domain_size"}, + {"id": 7, "type": "input", "value": "source", "name": "source_directory"}, + {"id": 8, "type": "output", "name": "result"} ], "edges": [ - { - "target": 2, - "targetPort": "meshio_output_h5", - "source": 1, - "sourcePort": "h5_file" - }, - { - "target": 2, - "targetPort": "meshio_output_xdmf", - "source": 1, - "sourcePort": "xdmf_file" - }, - { - "target": 4, - "targetPort": "ndofs", - "source": 2, - "sourcePort": "numdofs" - }, - { - "target": 3, - "targetPort": "poisson_output_vtu_file", - "source": 2, - "sourcePort": "vtu_file" - }, - { - "target": 3, - "targetPort": "poisson_output_pvd_file", - "source": 2, - "sourcePort": "pvd_file" - }, - { - "target": 1, - "targetPort": "gmsh_output_file", - "source": 0, - "sourcePort": null - }, - { - "target": 5, - "targetPort": "plot_file", - "source": 3, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "pvbatch_output_file", - "source": 3, - "sourcePort": null - }, - { - "target": 5, - "targetPort": "macros_tex", - "source": 4, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "domain_size", - "source": 6, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "source_directory", - "source": 7, - "sourcePort": null - }, - { - "target": 2, - "targetPort": "source_directory", - "source": 7, - "sourcePort": null - }, - { - "target": 3, - "targetPort": "source_directory", - "source": 7, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "domain_size", - "source": 6, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "source_directory", - "source": 7, - "sourcePort": null - }, - { - "target": 5, - "targetPort": "source_directory", - "source": 7, - "sourcePort": null - }, - { - "target": 8, - "targetPort": null, - "source": 5, - "sourcePort": null - } + {"target": 0, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 0, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 1, "targetPort": "gmsh_output_file", "source": 0, "sourcePort": null}, + {"target": 2, "targetPort": "meshio_output_xdmf", "source": 1, "sourcePort": "xdmf_file"}, + {"target": 2, "targetPort": "meshio_output_h5", "source": 1, "sourcePort": "h5_file"}, + {"target": 2, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 3, "targetPort": "poisson_output_pvd_file", "source": 2, "sourcePort": "pvd_file"}, + {"target": 3, "targetPort": "poisson_output_vtu_file", "source": 2, "sourcePort": "vtu_file"}, + {"target": 3, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 4, "targetPort": "pvbatch_output_file", "source": 3, "sourcePort": null}, + {"target": 4, "targetPort": "ndofs", "source": 2, "sourcePort": "numdofs"}, + {"target": 4, "targetPort": "domain_size", "source": 6, "sourcePort": null}, + {"target": 4, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 5, "targetPort": "macros_tex", "source": 4, "sourcePort": null}, + {"target": 5, "targetPort": "plot_file", "source": 3, "sourcePort": null}, + {"target": 5, "targetPort": "source_directory", "source": 7, "sourcePort": null}, + {"target": 8, "targetPort": null, "source": 5, "sourcePort": null} ] } \ No newline at end of file diff --git a/quantum_espresso/workflow.json b/quantum_espresso/workflow.json index 078d9e7..e653d59 100644 --- a/quantum_espresso/workflow.json +++ b/quantum_espresso/workflow.json @@ -1,559 +1,100 @@ { "version": "0.1.0", "nodes": [ - { - "id": 0, - "type": "function", - "value": "workflow.get_bulk_structure" - }, - { - "id": 1, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 2, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 3, - "type": "function", - "value": "workflow.generate_structures" - }, - { - "id": 4, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 5, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 6, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 7, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 8, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 9, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 10, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 11, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 12, - "type": "function", - "value": "python_workflow_definition.shared.get_dict" - }, - { - "id": 13, - "type": "function", - "value": "workflow.calculate_qe" - }, - { - "id": 14, - "type": "function", - "value": "python_workflow_definition.shared.get_list" - }, - { - "id": 15, - "type": "function", - "value": "python_workflow_definition.shared.get_list" - }, - { - "id": 16, - "type": "function", - "value": "workflow.plot_energy_volume_curve" - }, - { - "id": 17, - "type": "input", - "name": "element", - "value": "Al" - }, - { - "id": 18, - "type": "input", - "name": "a", - "value": 4.04 - }, - { - "id": 19, - "type": "input", - "name": "cubic", - "value": true - }, - { - "id": 20, - "type": "input", - "name": "pseudopotentials", - "value": { - "Al": "Al.pbe-n-kjpaw_psl.1.0.0.UPF" - } - }, - { - "id": 21, - "type": "input", - "name": "kpts", - "value": [ - 3, - 3, - 3 - ] - }, - { - "id": 22, - "type": "input", - "name": "calculation_0", - "value": "vc-relax" - }, - { - "id": 23, - "type": "input", - "name": "smearing", - "value": 0.02 - }, - { - "id": 24, - "type": "input", - "name": "working_directory_0", - "value": "mini" - }, - { - "id": 25, - "type": "input", - "name": "strain_lst", - "value": [ - 0.9, - 0.9500000000000001, - 1.0, - 1.05, - 1.1 - ] - }, - { - "id": 26, - "type": "input", - "name": "calculation_1", - "value": "scf" - }, - { - "id": 27, - "type": "input", - "name": "working_directory_1", - "value": "strain_0" - }, - { - "id": 28, - "type": "input", - "name": "working_directory_2", - "value": "strain_1" - }, - { - "id": 29, - "type": "input", - "name": "working_directory_3", - "value": "strain_2" - }, - { - "id": 30, - "type": "input", - "name": "working_directory_4", - "value": "strain_3" - }, - { - "id": 31, - "type": "input", - "name": "working_directory_5", - "value": "strain_4" - }, - { - "id": 32, - "type": "output", - "name": "result" - } + {"id": 0, "type": "function", "value": "workflow.get_bulk_structure"}, + {"id": 1, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 2, "type": "function", "value": "workflow.generate_structures"}, + {"id": 3, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 4, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 5, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 6, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 7, "type": "function", "value": "workflow.calculate_qe"}, + {"id": 8, "type": "function", "value": "workflow.plot_energy_volume_curve"}, + {"id": 9, "type": "input", "value": "Al", "name": "element"}, + {"id": 10, "type": "input", "value": 4.05, "name": "a"}, + {"id": 11, "type": "input", "value": true, "name": "cubic"}, + {"id": 12, "type": "input", "value": "mini", "name": "working_directory_0"}, + {"id": 13, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 14, "type": "input", "value": {"Al": "Al.pbe-n-kjpaw_psl.1.0.0.UPF"}, "name": "pseudopotentials"}, + {"id": 15, "type": "input", "value": [3, 3, 3], "name": "kpts"}, + {"id": 16, "type": "input", "value": "vc-relax", "name": "calculation_0"}, + {"id": 17, "type": "input", "value": 0.02, "name": "smearing"}, + {"id": 18, "type": "input", "value": [0.9, 0.95, 1.0, 1.05, 1.1], "name": "strain_lst"}, + {"id": 19, "type": "input", "value": "strain_0", "name": "working_directory_1"}, + {"id": 20, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 21, "type": "input", "value": "scf", "name": "calculation_1"}, + {"id": 22, "type": "input", "value": "strain_1", "name": "working_directory_2"}, + {"id": 23, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 24, "type": "input", "value": "strain_2", "name": "working_directory_3"}, + {"id": 25, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 26, "type": "input", "value": "strain_3", "name": "working_directory_4"}, + {"id": 27, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 28, "type": "input", "value": "strain_4", "name": "working_directory_5"}, + {"id": 29, "type": "function", "value": "python_workflow_definition.shared.get_dict"}, + {"id": 30, "type": "function", "value": "python_workflow_definition.shared.get_list"}, + {"id": 31, "type": "function", "value": "python_workflow_definition.shared.get_list"}, + {"id": 32, "type": "output", "name": "result"} ], "edges": [ - { - "target": 3, - "targetPort": "structure", - "source": 2, - "sourcePort": "structure" - }, - { - "target": 12, - "targetPort": "structure", - "source": 3, - "sourcePort": "s_4" - }, - { - "target": 10, - "targetPort": "structure", - "source": 3, - "sourcePort": "s_3" - }, - { - "target": 8, - "targetPort": "structure", - "source": 3, - "sourcePort": "s_2" - }, - { - "target": 6, - "targetPort": "structure", - "source": 3, - "sourcePort": "s_1" - }, - { - "target": 4, - "targetPort": "structure", - "source": 3, - "sourcePort": "s_0" - }, - { - "target": 15, - "targetPort": "0", - "source": 5, - "sourcePort": "energy" - }, - { - "target": 14, - "targetPort": "0", - "source": 5, - "sourcePort": "volume" - }, - { - "target": 15, - "targetPort": "1", - "source": 7, - "sourcePort": "energy" - }, - { - "target": 14, - "targetPort": "1", - "source": 7, - "sourcePort": "volume" - }, - { - "target": 15, - "targetPort": "2", - "source": 9, - "sourcePort": "energy" - }, - { - "target": 14, - "targetPort": "2", - "source": 9, - "sourcePort": "volume" - }, - { - "target": 15, - "targetPort": "3", - "source": 11, - "sourcePort": "energy" - }, - { - "target": 14, - "targetPort": "3", - "source": 11, - "sourcePort": "volume" - }, - { - "target": 15, - "targetPort": "4", - "source": 13, - "sourcePort": "energy" - }, - { - "target": 14, - "targetPort": "4", - "source": 13, - "sourcePort": "volume" - }, - { - "target": 1, - "targetPort": "structure", - "source": 0, - "sourcePort": null - }, - { - "target": 2, - "targetPort": "input_dict", - "source": 1, - "sourcePort": null - }, - { - "target": 5, - "targetPort": "input_dict", - "source": 4, - "sourcePort": null - }, - { - "target": 7, - "targetPort": "input_dict", - "source": 6, - "sourcePort": null - }, - { - "target": 9, - "targetPort": "input_dict", - "source": 8, - "sourcePort": null - }, - { - "target": 11, - "targetPort": "input_dict", - "source": 10, - "sourcePort": null - }, - { - "target": 13, - "targetPort": "input_dict", - "source": 12, - "sourcePort": null - }, - { - "target": 16, - "targetPort": "volume_lst", - "source": 14, - "sourcePort": null - }, - { - "target": 16, - "targetPort": "energy_lst", - "source": 15, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "element", - "source": 17, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "a", - "source": 18, - "sourcePort": null - }, - { - "target": 0, - "targetPort": "cubic", - "source": 19, - "sourcePort": null - }, - { - "target": 1, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 1, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 1, - "targetPort": "calculation", - "source": 22, - "sourcePort": null - }, - { - "target": 1, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 2, - "targetPort": "working_directory", - "source": 24, - "sourcePort": null - }, - { - "target": 3, - "targetPort": "strain_lst", - "source": 25, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "calculation", - "source": 26, - "sourcePort": null - }, - { - "target": 4, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 5, - "targetPort": "working_directory", - "source": 27, - "sourcePort": null - }, - { - "target": 6, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 6, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 6, - "targetPort": "calculation", - "source": 26, - "sourcePort": null - }, - { - "target": 6, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 7, - "targetPort": "working_directory", - "source": 28, - "sourcePort": null - }, - { - "target": 8, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 8, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 8, - "targetPort": "calculation", - "source": 26, - "sourcePort": null - }, - { - "target": 8, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 9, - "targetPort": "working_directory", - "source": 29, - "sourcePort": null - }, - { - "target": 10, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 10, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 10, - "targetPort": "calculation", - "source": 26, - "sourcePort": null - }, - { - "target": 10, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 11, - "targetPort": "working_directory", - "source": 30, - "sourcePort": null - }, - { - "target": 12, - "targetPort": "pseudopotentials", - "source": 20, - "sourcePort": null - }, - { - "target": 12, - "targetPort": "kpts", - "source": 21, - "sourcePort": null - }, - { - "target": 12, - "targetPort": "calculation", - "source": 26, - "sourcePort": null - }, - { - "target": 12, - "targetPort": "smearing", - "source": 23, - "sourcePort": null - }, - { - "target": 13, - "targetPort": "working_directory", - "source": 31, - "sourcePort": null - }, - { - "target": 32, - "targetPort": null, - "source": 16, - "sourcePort": null - } + {"target": 0, "targetPort": "element", "source": 9, "sourcePort": null}, + {"target": 0, "targetPort": "a", "source": 10, "sourcePort": null}, + {"target": 0, "targetPort": "cubic", "source": 11, "sourcePort": null}, + {"target": 1, "targetPort": "working_directory", "source": 12, "sourcePort": null}, + {"target": 13, "targetPort": "structure", "source": 0, "sourcePort": null}, + {"target": 13, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 13, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 13, "targetPort": "calculation", "source": 16, "sourcePort": null}, + {"target": 13, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 1, "targetPort": "input_dict", "source": 13, "sourcePort": null}, + {"target": 2, "targetPort": "structure", "source": 1, "sourcePort": "structure"}, + {"target": 2, "targetPort": "strain_lst", "source": 18, "sourcePort": null}, + {"target": 3, "targetPort": "working_directory", "source": 19, "sourcePort": null}, + {"target": 20, "targetPort": "structure", "source": 2, "sourcePort": "s_0"}, + {"target": 20, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 20, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 20, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 20, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 3, "targetPort": "input_dict", "source": 20, "sourcePort": null}, + {"target": 4, "targetPort": "working_directory", "source": 22, "sourcePort": null}, + {"target": 23, "targetPort": "structure", "source": 2, "sourcePort": "s_1"}, + {"target": 23, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 23, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 23, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 23, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 4, "targetPort": "input_dict", "source": 23, "sourcePort": null}, + {"target": 5, "targetPort": "working_directory", "source": 24, "sourcePort": null}, + {"target": 25, "targetPort": "structure", "source": 2, "sourcePort": "s_2"}, + {"target": 25, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 25, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 25, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 25, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 5, "targetPort": "input_dict", "source": 25, "sourcePort": null}, + {"target": 6, "targetPort": "working_directory", "source": 26, "sourcePort": null}, + {"target": 27, "targetPort": "structure", "source": 2, "sourcePort": "s_3"}, + {"target": 27, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 27, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 27, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 27, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 6, "targetPort": "input_dict", "source": 27, "sourcePort": null}, + {"target": 7, "targetPort": "working_directory", "source": 28, "sourcePort": null}, + {"target": 29, "targetPort": "structure", "source": 2, "sourcePort": "s_4"}, + {"target": 29, "targetPort": "pseudopotentials", "source": 14, "sourcePort": null}, + {"target": 29, "targetPort": "kpts", "source": 15, "sourcePort": null}, + {"target": 29, "targetPort": "calculation", "source": 21, "sourcePort": null}, + {"target": 29, "targetPort": "smearing", "source": 17, "sourcePort": null}, + {"target": 7, "targetPort": "input_dict", "source": 29, "sourcePort": null}, + {"target": 30, "targetPort": "0", "source": 3, "sourcePort": "volume"}, + {"target": 30, "targetPort": "1", "source": 4, "sourcePort": "volume"}, + {"target": 30, "targetPort": "2", "source": 5, "sourcePort": "volume"}, + {"target": 30, "targetPort": "3", "source": 6, "sourcePort": "volume"}, + {"target": 30, "targetPort": "4", "source": 7, "sourcePort": "volume"}, + {"target": 8, "targetPort": "volume_lst", "source": 30, "sourcePort": null}, + {"target": 31, "targetPort": "0", "source": 3, "sourcePort": "energy"}, + {"target": 31, "targetPort": "1", "source": 4, "sourcePort": "energy"}, + {"target": 31, "targetPort": "2", "source": 5, "sourcePort": "energy"}, + {"target": 31, "targetPort": "3", "source": 6, "sourcePort": "energy"}, + {"target": 31, "targetPort": "4", "source": 7, "sourcePort": "energy"}, + {"target": 8, "targetPort": "energy_lst", "source": 31, "sourcePort": null}, + {"target": 32, "targetPort": null, "source": 8, "sourcePort": null} ] } \ No newline at end of file From ae1fd27cbabf746e5c1cf9197be1f91605bf8d83 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:43:57 +0200 Subject: [PATCH 4/6] Add hatchling to central environment --- environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yml b/environment.yml index f7b95fb..47967b5 100644 --- a/environment.yml +++ b/environment.yml @@ -2,6 +2,7 @@ channels: - conda-forge dependencies: - python =3.12 +- hatchling =1.32.4 - pyiron_workflow =0.17.0 - pyironflow =0.0.24 - python-workflow-definition =0.1.5 From 27043fe164ef5c70ed620c78917cba2838ba6c72 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:44:15 +0200 Subject: [PATCH 5/6] Install NFDI4Ing libGL dependency via apt --- .github/workflows/pipeline.yml | 3 ++- apt.txt | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 apt.txt diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 5699ae9..af911fd 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -22,6 +22,7 @@ jobs: shell: bash -l {0} run: | conda install -c conda-forge jupyter papermill + sudo apt-get install -y $(cat apt.txt) - name: Create Additional Conda Environments shell: bash -l {0} run: | @@ -50,8 +51,8 @@ jobs: - name: Installation and setup shell: bash -l {0} run: | - conda install -c conda-forge jupyter papermill hatchling pip install --no-deps --no-build-isolation -e quantum_espresso/qe_xml_parser + conda install -c conda-forge jupyter papermill - name: Tests shell: bash -l {0} run: | diff --git a/apt.txt b/apt.txt new file mode 100644 index 0000000..c91b950 --- /dev/null +++ b/apt.txt @@ -0,0 +1,2 @@ +libgl1-mesa-glx +libegl1-mesa \ No newline at end of file From 4794d449fdb82b27237d8047be48d3b25ce5ae8a Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 12 Oct 2026 09:44:26 +0200 Subject: [PATCH 6/6] add postbuild script for mybinder --- postBuild | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 postBuild diff --git a/postBuild b/postBuild new file mode 100644 index 0000000..6680e1f --- /dev/null +++ b/postBuild @@ -0,0 +1,5 @@ +conda env create -n preprocessing -f nfdi/source/envs/preprocessing.yaml -y +conda env create -n processing -f nfdi/source/envs/processing.yaml -y +conda env create -n postprocessing -f nfdi/source/envs/postprocessing.yaml -y +pip install -e quantum_espresso/qe_xml_parser +mv quantum_espresso/espresso ~ \ No newline at end of file