3737if str (_GRAPHNET_ROOT ) not in sys .path :
3838 sys .path .insert (0 , str (_GRAPHNET_ROOT ))
3939
40- from graph_net .agent import GraphNetAgent # noqa: E402
40+ from graph_net .agent import ExtractionStatus , GraphNetAgent # noqa: E402
4141
4242import torch # noqa: E402
4343
@@ -212,15 +212,18 @@ def worker_fn(
212212 "model_id" : model_id ,
213213 }
214214 try :
215- success = agent .extract_sample (model_id )
215+ status = agent .extract_sample (model_id )
216216 elapsed = time .time () - t0
217- status = "OK" if success else "FAIL"
218- print (f"{ prefix } { status } { model_id } ({ elapsed :.1f} s)" , flush = True )
219- result_dict ["success" ] = success
217+ ok = status == ExtractionStatus .OK
218+ label = "OK" if ok else status .name .replace ("_" , " " )
219+ print (f"{ prefix } { label } { model_id } ({ elapsed :.1f} s)" , flush = True )
220+ result_dict ["success" ] = ok
221+ result_dict ["status" ] = status .value
220222 except Exception as e :
221223 elapsed = time .time () - t0
222224 print (f"{ prefix } ERROR { model_id } : { e } ({ elapsed :.1f} s)" , flush = True )
223225 result_dict ["success" ] = False
226+ result_dict ["status" ] = ExtractionStatus .ERROR .value
224227 result_dict ["error" ] = str (e )
225228
226229 result_dict ["elapsed" ] = round (elapsed , 2 )
@@ -246,31 +249,49 @@ def _print_summary(results: Dict) -> None:
246249 details = results .get ("details" , [])
247250 total = len (details )
248251 success = sum (1 for d in details if d .get ("success" ))
252+ extract_success = sum (
253+ 1
254+ for d in details
255+ if d .get ("status" )
256+ in (ExtractionStatus .OK .value , ExtractionStatus .VERIFY_FAILED .value )
257+ )
249258 failed = total - success
250259 rate = (success / total * 100 ) if total else 0.0
260+ extract_rate = (extract_success / total * 100 ) if total else 0.0
251261 print ("\n " + "=" * 60 )
252262 print ("[SUMMARY] Parallel Extraction Summary" )
253263 print ("=" * 60 )
254- print (f" Total : { total } " )
255- print (f" Success: { success } " )
256- print (f" Failed : { failed } " )
257- print (f" Rate : { rate :.2f} %" )
264+ print (f" Total : { total } " )
265+ print (f" Success : { success } (verify ok)" )
266+ print (f" Extract : { extract_success } (graph extracted)" )
267+ print (f" Failed : { failed } " )
268+ print (f" Rate : { rate :.2f} % (overall)" )
269+ print (f" Extract : { extract_rate :.2f} % (extraction only)" )
258270 # Per-GPU breakdown
259271 gpu_stats : Dict [int , Dict ] = {}
260272 for d in details :
261273 g = d .get ("gpu" , - 1 )
262274 if g not in gpu_stats :
263- gpu_stats [g ] = {"total" : 0 , "success" : 0 }
275+ gpu_stats [g ] = {"total" : 0 , "success" : 0 , "extract" : 0 }
264276 gpu_stats [g ]["total" ] += 1
265277 if d .get ("success" ):
266278 gpu_stats [g ]["success" ] += 1
279+ if d .get ("status" ) in (
280+ ExtractionStatus .OK .value ,
281+ ExtractionStatus .VERIFY_FAILED .value ,
282+ ):
283+ gpu_stats [g ]["extract" ] += 1
267284
268285 label = "GPU" if results .get ("gpus" ) else "Worker"
269286 print (f"\n Per-{ label } :" )
270287 for g in sorted (gpu_stats ):
271288 gs = gpu_stats [g ]
272289 gr = (gs ["success" ] / gs ["total" ] * 100 ) if gs ["total" ] else 0.0
273- print (f" { label } { g } : { gs ['success' ]} /{ gs ['total' ]} ({ gr :.1f} %)" )
290+ er = (gs ["extract" ] / gs ["total" ] * 100 ) if gs ["total" ] else 0.0
291+ print (
292+ f" { label } { g } : success={ gs ['success' ]} /{ gs ['total' ]} ({ gr :.1f} %), "
293+ f"extract={ gs ['extract' ]} /{ gs ['total' ]} ({ er :.1f} %)"
294+ )
274295 print ("=" * 60 )
275296
276297
@@ -448,10 +469,17 @@ def main() -> int:
448469 entry = result_queue .get (timeout = 5 )
449470 details .append (entry )
450471 done = len (details )
451- success_so_far = sum (1 for d in details if d .get ("success" ))
472+ ok_so_far = sum (1 for d in details if d .get ("success" ))
473+ extract_ok_so_far = sum (
474+ 1
475+ for d in details
476+ if d .get ("status" )
477+ in (ExtractionStatus .OK .value , ExtractionStatus .VERIFY_FAILED .value )
478+ )
452479 print (
453480 f"[PROGRESS] { done } /{ len (model_ids )} done, "
454- f"success rate so far: { success_so_far / done * 100 :.1f} %" ,
481+ f"success={ ok_so_far / done * 100 :.1f} %, "
482+ f"extract={ extract_ok_so_far / done * 100 :.1f} %" ,
455483 flush = True ,
456484 )
457485 except Exception :
@@ -466,6 +494,12 @@ def main() -> int:
466494
467495 end_time = datetime .now ()
468496 success_count = sum (1 for d in details if d .get ("success" ))
497+ extract_success_count = sum (
498+ 1
499+ for d in details
500+ if d .get ("status" )
501+ in (ExtractionStatus .OK .value , ExtractionStatus .VERIFY_FAILED .value )
502+ )
469503 results = {
470504 "start_time" : start_time .isoformat (),
471505 "end_time" : end_time .isoformat (),
@@ -474,12 +508,17 @@ def main() -> int:
474508 "workspace" : workspace ,
475509 "total" : len (details ),
476510 "success" : success_count ,
511+ "extract_success" : extract_success_count ,
477512 "failed" : len (details ) - success_count ,
478513 "success_rate" : 0.0 ,
514+ "extract_success_rate" : 0.0 ,
479515 "details" : details ,
480516 }
481517 if results ["total" ] > 0 :
482518 results ["success_rate" ] = round (results ["success" ] / results ["total" ] * 100 , 2 )
519+ results ["extract_success_rate" ] = round (
520+ results ["extract_success" ] / results ["total" ] * 100 , 2
521+ )
483522
484523 # --- Save results ---
485524 output_file = (
0 commit comments