Skip to content

Commit 748ddb6

Browse files
authored
Merge pull request #1 from jan-janssen/ci
fix continuous integration
2 parents 6ec21e2 + 61becc7 commit 748ddb6

File tree

4 files changed

+37
-139
lines changed

4 files changed

+37
-139
lines changed

environment.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ dependencies:
88
- ase=3.24.0
99
- matplotlib=3.10.1
1010
- xmlschema=3.4.3
11-
- jobflow=0.1.19
11+
- jobflow=0.1.19
12+
- pygraphviz=1.14

python_workflow_definition/src/python_workflow_definition/pyiron_base.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import json
2+
from importlib import import_module
3+
14
from pyiron_base import job
25
from pyiron_base.project.delayed import DelayedObject
36

@@ -107,7 +110,7 @@ def get_unique_objects(nodes_dict, edges_lst): # I need a pre-filter before thi
107110
delayed_object_dict[k] = v
108111
elif isinstance(v, list) and any([isinstance(el, DelayedObject) for el in v]): # currently this replaces any list - what I need instead is some kind of virtual node - mixed nodes
109112
delayed_object_dict[k] = DelayedObject(function=get_list)
110-
delayed_object_dict[k]._input = {i: el for el in enumerate(v)}
113+
delayed_object_dict[k]._input = {i: el for i, el in enumerate(v)}
111114
delayed_object_dict[k]._python_function = get_list
112115
elif isinstance(v, dict) and any([isinstance(el, DelayedObject) for el in v.values()]):
113116
delayed_object_dict[k] = DelayedObject(function=get_dict, **v,)
@@ -187,3 +190,27 @@ def get_edges_dict(edges_lst, nodes_dict, connection_dict, lookup_dict):
187190
return edges_dict_lst
188191

189192

193+
def load_workflow_json(project, file_name):
194+
with open(file_name, "r") as f:
195+
content = json.load(f)
196+
197+
edges_new_lst = content["edges"]
198+
nodes_new_dict = {}
199+
for k, v in content["nodes"].items():
200+
if isinstance(v, str) and "." in v:
201+
p, m = v.rsplit('.', 1)
202+
mod = import_module(p)
203+
nodes_new_dict[int(k)] = getattr(mod, m)
204+
else:
205+
nodes_new_dict[int(k)] = v
206+
207+
total_lst = group_edges(edges_new_lst)
208+
total_new_lst = resort_total_lst(total_lst=total_lst, nodes_dict=nodes_new_dict)
209+
source_handle_dict = get_source_handles(edges_new_lst)
210+
delayed_object_dict = get_delayed_object_dict(
211+
total_lst=total_new_lst,
212+
nodes_dict=nodes_new_dict,
213+
source_handle_dict=source_handle_dict,
214+
pyiron_project=project,
215+
)
216+
return delayed_object_dict[list(delayed_object_dict.keys())[-1]]

universal_qe_to_pyiron_base.ipynb

Lines changed: 6 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -17,130 +17,7 @@
1717
"metadata": {},
1818
"outputs": [],
1919
"source": [
20-
"from python_workflow_definition.pyiron_base import (get_dict, get_list, group_edges, resort_total_lst, get_source_handles, get_delayed_object_dict)"
21-
]
22-
},
23-
{
24-
"cell_type": "code",
25-
"execution_count": null,
26-
"id": "d694b477-d4f7-45a9-97a1-3a4b5a8ca4fb",
27-
"metadata": {},
28-
"outputs": [],
29-
"source": [
30-
"from quantum_espresso_workflow import calculate_qe, generate_structures, get_bulk_structure, plot_energy_volume_curve"
31-
]
32-
},
33-
{
34-
"cell_type": "code",
35-
"execution_count": null,
36-
"id": "c9d48f4f-5593-43ad-9b98-e69bc74d36cc",
37-
"metadata": {},
38-
"outputs": [],
39-
"source": [
40-
"nodes_new_dict = { # from jobflow\n",
41-
" 0: get_bulk_structure,\n",
42-
" 1: calculate_qe,\n",
43-
" 2: generate_structures,\n",
44-
" 3: calculate_qe,\n",
45-
" 4: calculate_qe,\n",
46-
" 5: calculate_qe,\n",
47-
" 6: calculate_qe,\n",
48-
" 7: calculate_qe,\n",
49-
" 8: plot_energy_volume_curve,\n",
50-
" 9: 'Al',\n",
51-
" 10: 4.05,\n",
52-
" 11: True,\n",
53-
" 12: 'mini',\n",
54-
" 13: get_dict,\n",
55-
" 14: {'Al': 'Al.pbe-n-kjpaw_psl.1.0.0.UPF'},\n",
56-
" 15: [3, 3, 3],\n",
57-
" 16: 'vc-relax',\n",
58-
" 17: 0.02,\n",
59-
" 18: [0.9, 0.95, 1.0, 1.05, 1.1],\n",
60-
" 19: 'strain_0',\n",
61-
" 20: get_dict,\n",
62-
" 21: 'scf',\n",
63-
" 22: 'strain_1',\n",
64-
" 23: get_dict,\n",
65-
" 24: 'strain_2',\n",
66-
" 25: get_dict,\n",
67-
" 26: 'strain_3',\n",
68-
" 27: get_dict,\n",
69-
" 28: 'strain_4',\n",
70-
" 29: get_dict,\n",
71-
" 30: get_list,\n",
72-
" 31: get_list,\n",
73-
"}"
74-
]
75-
},
76-
{
77-
"cell_type": "code",
78-
"execution_count": null,
79-
"id": "31a2fec8-4d83-41c3-8dc3-5964e0a07732",
80-
"metadata": {},
81-
"outputs": [],
82-
"source": [
83-
"edges_new_lst = [\n",
84-
" {'target': 0, 'targetHandle': 'name', 'source': 9, 'sourceHandle': None},\n",
85-
" {'target': 0, 'targetHandle': 'a', 'source': 10, 'sourceHandle': None},\n",
86-
" {'target': 0, 'targetHandle': 'cubic', 'source': 11, 'sourceHandle': None},\n",
87-
" {'target': 1, 'targetHandle': 'working_directory', 'source': 12, 'sourceHandle': None},\n",
88-
" {'target': 13, 'targetHandle': 'structure', 'source': 0, 'sourceHandle': None},\n",
89-
" {'target': 13, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
90-
" {'target': 13, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
91-
" {'target': 13, 'targetHandle': 'calculation', 'source': 16, 'sourceHandle': None},\n",
92-
" {'target': 13, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
93-
" {'target': 1, 'targetHandle': 'input_dict', 'source': 13, 'sourceHandle': None},\n",
94-
" {'target': 2, 'targetHandle': 'structure', 'source': 1, 'sourceHandle': 'structure'},\n",
95-
" {'target': 2, 'targetHandle': 'strain_lst', 'source': 18, 'sourceHandle': None},\n",
96-
" {'target': 3, 'targetHandle': 'working_directory', 'source': 19, 'sourceHandle': None},\n",
97-
" {'target': 20, 'targetHandle': 'structure', 'source': 2, 'sourceHandle': '0'},\n",
98-
" {'target': 20, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
99-
" {'target': 20, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
100-
" {'target': 20, 'targetHandle': 'calculation', 'source': 21, 'sourceHandle': None},\n",
101-
" {'target': 20, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
102-
" {'target': 3, 'targetHandle': 'input_dict', 'source': 20, 'sourceHandle': None},\n",
103-
" {'target': 4, 'targetHandle': 'working_directory', 'source': 22, 'sourceHandle': None},\n",
104-
" {'target': 23, 'targetHandle': 'structure', 'source': 2, 'sourceHandle': '1'},\n",
105-
" {'target': 23, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
106-
" {'target': 23, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
107-
" {'target': 23, 'targetHandle': 'calculation', 'source': 21, 'sourceHandle': None},\n",
108-
" {'target': 23, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
109-
" {'target': 4, 'targetHandle': 'input_dict', 'source': 23, 'sourceHandle': None},\n",
110-
" {'target': 5, 'targetHandle': 'working_directory', 'source': 24, 'sourceHandle': None},\n",
111-
" {'target': 25, 'targetHandle': 'structure', 'source': 2, 'sourceHandle': '2'},\n",
112-
" {'target': 25, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
113-
" {'target': 25, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
114-
" {'target': 25, 'targetHandle': 'calculation', 'source': 21, 'sourceHandle': None},\n",
115-
" {'target': 25, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
116-
" {'target': 5, 'targetHandle': 'input_dict', 'source': 25, 'sourceHandle': None},\n",
117-
" {'target': 6, 'targetHandle': 'working_directory', 'source': 26, 'sourceHandle': None},\n",
118-
" {'target': 27, 'targetHandle': 'structure', 'source': 2, 'sourceHandle': '3'},\n",
119-
" {'target': 27, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
120-
" {'target': 27, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
121-
" {'target': 27, 'targetHandle': 'calculation', 'source': 21, 'sourceHandle': None},\n",
122-
" {'target': 27, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
123-
" {'target': 6, 'targetHandle': 'input_dict', 'source': 27, 'sourceHandle': None},\n",
124-
" {'target': 7, 'targetHandle': 'working_directory', 'source': 28, 'sourceHandle': None},\n",
125-
" {'target': 29, 'targetHandle': 'structure', 'source': 2, 'sourceHandle': '4'},\n",
126-
" {'target': 29, 'targetHandle': 'pseudopotentials', 'source': 14, 'sourceHandle': None},\n",
127-
" {'target': 29, 'targetHandle': 'kpts', 'source': 15, 'sourceHandle': None},\n",
128-
" {'target': 29, 'targetHandle': 'calculation', 'source': 21, 'sourceHandle': None},\n",
129-
" {'target': 29, 'targetHandle': 'smearing', 'source': 17, 'sourceHandle': None},\n",
130-
" {'target': 7, 'targetHandle': 'input_dict', 'source': 29, 'sourceHandle': None},\n",
131-
" {'target': 30, 'targetHandle': \"0\", 'source': 3, 'sourceHandle': 'volume'},\n",
132-
" {'target': 30, 'targetHandle': \"1\", 'source': 4, 'sourceHandle': 'volume'},\n",
133-
" {'target': 30, 'targetHandle': \"2\", 'source': 5, 'sourceHandle': 'volume'},\n",
134-
" {'target': 30, 'targetHandle': \"3\", 'source': 6, 'sourceHandle': 'volume'},\n",
135-
" {'target': 30, 'targetHandle': \"4\", 'source': 7, 'sourceHandle': 'volume'},\n",
136-
" {'target': 8, 'targetHandle': 'volume_lst', 'source': 30, 'sourceHandle': None},\n",
137-
" {'target': 31, 'targetHandle': \"0\", 'source': 3, 'sourceHandle': 'energy'},\n",
138-
" {'target': 31, 'targetHandle': \"1\", 'source': 4, 'sourceHandle': 'energy'},\n",
139-
" {'target': 31, 'targetHandle': \"2\", 'source': 5, 'sourceHandle': 'energy'},\n",
140-
" {'target': 31, 'targetHandle': \"3\", 'source': 6, 'sourceHandle': 'energy'},\n",
141-
" {'target': 31, 'targetHandle': \"4\", 'source': 7, 'sourceHandle': 'energy'},\n",
142-
" {'target': 8, 'targetHandle': 'energy_lst', 'source': 31, 'sourceHandle': None},\n",
143-
"]"
20+
"from python_workflow_definition.pyiron_base import load_workflow_json"
14421
]
14522
},
14623
{
@@ -157,30 +34,22 @@
15734
{
15835
"cell_type": "code",
15936
"execution_count": null,
160-
"id": "063b5e00-5afd-4388-889b-bf6c2f0a7957",
37+
"id": "0c393ada-0eb9-4627-9f3a-25afdd30545e",
16138
"metadata": {},
16239
"outputs": [],
16340
"source": [
164-
"total_lst = group_edges(edges_new_lst)\n",
165-
"total_new_lst = resort_total_lst(total_lst=total_lst, nodes_dict=nodes_new_dict)\n",
166-
"source_handle_dict = get_source_handles(edges_new_lst)\n",
167-
"delayed_object_dict = get_delayed_object_dict(\n",
168-
" total_lst=total_new_lst, \n",
169-
" nodes_dict=nodes_new_dict, \n",
170-
" source_handle_dict=source_handle_dict, \n",
171-
" pyiron_project=pr\n",
172-
")\n",
173-
"delayed_object_dict[list(delayed_object_dict.keys())[-1]].draw()"
41+
"delayed_object = load_workflow_json(project=pr, file_name=\"workflow.json\")\n",
42+
"delayed_object.draw()"
17443
]
17544
},
17645
{
17746
"cell_type": "code",
17847
"execution_count": null,
179-
"id": "e2e2c44d-cb2e-4111-907e-c88ad671273b",
48+
"id": "006f309a-d82c-457d-a77a-8771a72dc6d3",
18049
"metadata": {},
18150
"outputs": [],
18251
"source": [
183-
"delayed_object_dict[list(delayed_object_dict.keys())[-1]].pull()"
52+
"delayed_object.pull()"
18453
]
18554
},
18655
{

workflow.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"nodes": {"0": "quantum_espresso_workflow.get_bulk_structure", "1": "quantum_espresso_workflow.calculate_qe", "2": "quantum_espresso_workflow.generate_structures", "3": "quantum_espresso_workflow.calculate_qe", "4": "quantum_espresso_workflow.calculate_qe", "5": "quantum_espresso_workflow.calculate_qe", "6": "quantum_espresso_workflow.calculate_qe", "7": "quantum_espresso_workflow.calculate_qe", "8": "quantum_espresso_workflow.plot_energy_volume_curve", "9": "Al", "10": 4.05, "11": true, "12": "mini", "13": "python_workflow_definition.pyiron_base.get_dict", "14": {"Al": "Al.pbe-n-kjpaw_psl.1.0.0.UPF"}, "15": [3, 3, 3], "16": "vc-relax", "17": 0.02, "18": [0.9, 0.95, 1.0, 1.05, 1.1], "19": "strain_0", "20": "python_workflow_definition.pyiron_base.get_dict", "21": "scf", "22": "strain_1", "23": "python_workflow_definition.pyiron_base.get_dict", "24": "strain_2", "25": "python_workflow_definition.pyiron_base.get_dict", "26": "strain_3", "27": "python_workflow_definition.pyiron_base.get_dict", "28": "strain_4", "29": "python_workflow_definition.pyiron_base.get_dict", "30": "python_workflow_definition.pyiron_base.get_list", "31": "python_workflow_definition.pyiron_base.get_list"}, "edges": [{"target": 0, "targetHandle": "name", "source": 9, "sourceHandle": null}, {"target": 0, "targetHandle": "a", "source": 10, "sourceHandle": null}, {"target": 0, "targetHandle": "cubic", "source": 11, "sourceHandle": null}, {"target": 1, "targetHandle": "working_directory", "source": 12, "sourceHandle": null}, {"target": 13, "targetHandle": "structure", "source": 0, "sourceHandle": null}, {"target": 13, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 13, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 13, "targetHandle": "calculation", "source": 16, "sourceHandle": null}, {"target": 13, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 1, "targetHandle": "input_dict", "source": 13, "sourceHandle": null}, {"target": 2, "targetHandle": "structure", "source": 1, "sourceHandle": "structure"}, {"target": 2, "targetHandle": "strain_lst", "source": 18, "sourceHandle": null}, {"target": 3, "targetHandle": "working_directory", "source": 19, "sourceHandle": null}, {"target": 20, "targetHandle": "structure", "source": 2, "sourceHandle": "0"}, {"target": 20, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 20, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 20, "targetHandle": "calculation", "source": 21, "sourceHandle": null}, {"target": 20, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 3, "targetHandle": "input_dict", "source": 20, "sourceHandle": null}, {"target": 4, "targetHandle": "working_directory", "source": 22, "sourceHandle": null}, {"target": 23, "targetHandle": "structure", "source": 2, "sourceHandle": "1"}, {"target": 23, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 23, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 23, "targetHandle": "calculation", "source": 21, "sourceHandle": null}, {"target": 23, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 4, "targetHandle": "input_dict", "source": 23, "sourceHandle": null}, {"target": 5, "targetHandle": "working_directory", "source": 24, "sourceHandle": null}, {"target": 25, "targetHandle": "structure", "source": 2, "sourceHandle": "2"}, {"target": 25, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 25, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 25, "targetHandle": "calculation", "source": 21, "sourceHandle": null}, {"target": 25, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 5, "targetHandle": "input_dict", "source": 25, "sourceHandle": null}, {"target": 6, "targetHandle": "working_directory", "source": 26, "sourceHandle": null}, {"target": 27, "targetHandle": "structure", "source": 2, "sourceHandle": "3"}, {"target": 27, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 27, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 27, "targetHandle": "calculation", "source": 21, "sourceHandle": null}, {"target": 27, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 6, "targetHandle": "input_dict", "source": 27, "sourceHandle": null}, {"target": 7, "targetHandle": "working_directory", "source": 28, "sourceHandle": null}, {"target": 29, "targetHandle": "structure", "source": 2, "sourceHandle": "4"}, {"target": 29, "targetHandle": "pseudopotentials", "source": 14, "sourceHandle": null}, {"target": 29, "targetHandle": "kpts", "source": 15, "sourceHandle": null}, {"target": 29, "targetHandle": "calculation", "source": 21, "sourceHandle": null}, {"target": 29, "targetHandle": "smearing", "source": 17, "sourceHandle": null}, {"target": 7, "targetHandle": "input_dict", "source": 29, "sourceHandle": null}, {"target": 30, "targetHandle": "0", "source": 3, "sourceHandle": "volume"}, {"target": 30, "targetHandle": "1", "source": 4, "sourceHandle": "volume"}, {"target": 30, "targetHandle": "2", "source": 5, "sourceHandle": "volume"}, {"target": 30, "targetHandle": "3", "source": 6, "sourceHandle": "volume"}, {"target": 30, "targetHandle": "4", "source": 7, "sourceHandle": "volume"}, {"target": 8, "targetHandle": "volume_lst", "source": 30, "sourceHandle": null}, {"target": 31, "targetHandle": "0", "source": 3, "sourceHandle": "energy"}, {"target": 31, "targetHandle": "1", "source": 4, "sourceHandle": "energy"}, {"target": 31, "targetHandle": "2", "source": 5, "sourceHandle": "energy"}, {"target": 31, "targetHandle": "3", "source": 6, "sourceHandle": "energy"}, {"target": 31, "targetHandle": "4", "source": 7, "sourceHandle": "energy"}, {"target": 8, "targetHandle": "energy_lst", "source": 31, "sourceHandle": null}]}

0 commit comments

Comments
 (0)