@@ -132,16 +132,18 @@ def collate_results(
132
132
endpoint_idxs = sorted (set (endpoint_idxs ))
133
133
134
134
for combo_name , entry in image_calc_output .items ():
135
- metadata = {}
135
+ failure_reasons = []
136
136
task_state = TaskState .SUCCESS
137
137
images = entry
138
138
if all (isinstance (v , str ) for v in entry ):
139
139
# hop calculation failed
140
- metadata = { "failure_reasons" : entry }
140
+ failure_reasons . extend ([ HopFailureReason ( v ) for v in entry ])
141
141
task_state = TaskState .FAILED
142
- if HopFailureReason .ENDPOINT . value in entry :
142
+ if HopFailureReason .ENDPOINT in failure_reasons :
143
143
# Cannot populate any NEB fields, skip entirely
144
- hop_dict [combo_name ] = NebResult (state = task_state , metadata = metadata )
144
+ hop_dict [combo_name ] = NebResult (
145
+ state = task_state , failure_reasons = failure_reasons
146
+ )
145
147
continue
146
148
images = []
147
149
@@ -154,9 +156,7 @@ def collate_results(
154
156
)
155
157
if num_success_calcs < min_images_per_hop :
156
158
task_state = TaskState .FAILED
157
- if "failure_reasons" not in metadata :
158
- metadata ["failure_reasons" ] = []
159
- metadata ["failure_reasons" ].append (HopFailureReason .MIN_IMAGE .value )
159
+ failure_reasons .append (HopFailureReason .MIN_IMAGE )
160
160
161
161
hop_dict [combo_name ] = NebResult (
162
162
images = [calc ["structure" ] for calc in hop if calc ["structure" ] is not None ],
@@ -168,7 +168,7 @@ def collate_results(
168
168
energies = [calc ["energy" ] for calc in hop if calc ["energy" ] is not None ],
169
169
method = NebMethod .APPROX ,
170
170
state = task_state ,
171
- metadata = metadata if len (metadata ) > 0 else None ,
171
+ failure_reasons = failure_reasons if len (failure_reasons ) > 0 else None ,
172
172
endpoint_indices = combo_name .split ("+" ),
173
173
)
174
174
@@ -519,13 +519,13 @@ def collate_images_single_hop(
519
519
-------
520
520
NebResult
521
521
"""
522
- metadata : dict [ str , Any ] = {}
522
+ failure_reasons : list [ HopFailureReason ] = []
523
523
task_state = TaskState .SUCCESS
524
524
525
525
calcs : list [dict [str , Any ]] = []
526
526
if image_calc_output is None :
527
527
task_state = TaskState .FAILED
528
- metadata [ " failure_reasons" ] = [ "No image calculation output." ]
528
+ failure_reasons . append ( HopFailureReason . IMAGE_FAILURE )
529
529
else :
530
530
calcs += image_calc_output
531
531
@@ -538,9 +538,7 @@ def collate_images_single_hop(
538
538
)
539
539
if num_success_calcs < min_images_per_hop :
540
540
task_state = TaskState .FAILED
541
- if "failure_reasons" not in metadata :
542
- metadata ["failure_reasons" ] = []
543
- metadata ["failure_reasons" ].append (HopFailureReason .MIN_IMAGE .value )
541
+ failure_reasons .append (HopFailureReason .MIN_IMAGE )
544
542
545
543
hop_dist = None
546
544
if endpoint_calc_output is not None and working_ion is not None :
@@ -558,6 +556,6 @@ def collate_images_single_hop(
558
556
energies = [calc ["energy" ] for calc in calcs if calc ["energy" ] is not None ],
559
557
method = NebMethod .APPROX ,
560
558
state = task_state ,
561
- metadata = metadata if len (metadata ) > 0 else None ,
559
+ failure_reasons = failure_reasons if len (failure_reasons ) > 0 else None ,
562
560
hop_distance = hop_dist ,
563
561
)
0 commit comments