Ë
    3bºj«p  ã                  óâ  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlZ ej                  d«       ddlmZ ddlZ e
e«      j'                  «       j(                  d   Zedz  Zedz  Zed	z  Zed
z  Zedz  ZddedfddedfddedffZd%d„Zd&d„Zd&d„Zd'd„Zd(d„Z d)d*d„Z!d+d„Z"	 	 	 	 	 	 	 	 d,d„Z#d-d„Z$	 	 	 	 	 	 d.d„Z%d/d„Z&d0d„Z'd1d „Z(d1d!„Z)d0d"„Z*d0d#„Z+e,d$k(  r e+«        yy)2zNMake a browsable, self-contained results tree without moving original outputs.é    )ÚannotationsN)ÚPathÚAggé   ÚresultsÚME1a_DT_comparisonÚindependentÚtogetherzexperiments/ME1a_DTÚAC28_16hÚAC28Ú16hÚ
AC28_18h01Ú18h01Ú
ME1a_14h06ÚME1a_DTÚ14h06c                óL   — t        j                  | j                  d¬«      «      S ©Núutf-8©Úencoding)ÚjsonÚloadsÚ	read_text)Úpaths    õ   ì „ì²˜ë¦¬/organize_results.pyÚ	read_jsonr      s   € Ü�:‰:�d—n‘n¨g�nÓ6Ó7Ð7ó    c           	     ó”   — | j                  «       st        | «      ‚t        j                  | |dt        j                  dd«      ¬«       y )NTÚ__pycache__z	.DS_Store)Údirs_exist_okÚignore)Úis_dirÚFileNotFoundErrorÚshutilÚcopytreeÚignore_patterns©ÚsrcÚdsts     r   Úcopy_dirr+   !   s9   € Ø�:‰:Œ<Ü Ó$Ð$Ü
‡O�O�C˜¨DÜ!×1Ñ1°-ÀÓMöOr   c                ój   — |j                   j                  dd¬«       t        j                  | |«       y )NT©ÚparentsÚexist_ok)ÚparentÚmkdirr%   Úcopy2r(   s     r   Ú	copy_filer3   (   s'   € Ø‡J�J×Ñ˜T¨DÐÔ1Ü
‡L�L��cÕr   c                ó’   — t         j                  j                  || j                  «      j	                  t         j
                  d«      S )NÚ/)Úosr   Úrelpathr0   ÚreplaceÚsep)ÚpageÚtargets     r   Úhrefr<   -   s,   € Ü�7‰7�?‰?˜6 4§;¡;Ó/×7Ñ7¼¿¹ÀÓDÐDr   c                óx   — dt        j                  t        | |«      d¬«      › dt        j                  |«      › d�S )Nz	<a href="T©Úquotez">z</a>)ÚhtmlÚescaper<   )r:   r;   Úlabels      r   ÚarC   1   s6   € Ø”t—{‘{¤4¨¨fÓ#5¸TÔBÐCÀ2ÄdÇkÁkÐRWÓFXÐEYÐY]Ð^Ð^r   c                ó¤  — | j                   j                  dd¬«       t        | t        dz  d«      }|r;dt	        j
                  t        | |«      d¬«      › dt	        j
                  |«      › d�nd	}d
t	        j
                  |«      › d|› dt	        j
                  |«      › dt	        j
                  |«      › d|› |› d�}| j                  |d¬«       y )NTr-   ú
index.htmlzAll resultsz<img class="overview" src="r>   z" alt="z overview">Ú z<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>aå  </title>
<style>body{font:16px/1.5 system-ui,sans-serif;background:#f4f7fb;color:#1c2a39;max-width:1420px;margin:auto;padding:26px}a{color:#145e93}h1,h2{line-height:1.2}.lead{font-size:18px}.warning{background:#fff0cc;border-left:5px solid #bf8a1d;padding:14px}section{background:white;border:1px solid #dbe4eb;border-radius:12px;margin:18px 0;padding:20px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.card{background:#edf3f8;border-radius:9px;padding:15px}.card strong{font-size:19px}.score{font-size:30px;font-weight:750;color:#164e73}.scroll{overflow:auto}table{border-collapse:collapse;width:100%;min-width:700px}th,td{border-bottom:1px solid #dce4eb;padding:9px;text-align:right;white-space:nowrap}th:first-child,td:first-child{text-align:left}img.overview{width:100%;height:auto;border:1px solid #dae3ec;border-radius:8px}.links a{display:inline-block;margin:4px 13px 4px 0}small{color:#536576}@media(max-width:700px){body{padding:12px}}</style>
<p>z</p><h1>z</h1><p class="lead">ú</p>z</html>r   r   )r0   r1   rC   ÚRESULTSr@   rA   r<   Ú
write_text)r   ÚtitleÚintroÚbodyÚvisualÚnavÚimageÚdocuments           r   r:   r:   5   sù   € Ø‡K�K×Ñ˜d¨TÐÔ2Ü
ˆD”'˜LÑ(¨-Ó
8€Cñ BHÐ)¬$¯+©+´d¸4ÀÓ6HÐPTÔ*UÐ)VÐV]Ô^b×^iÑ^iÐjoÓ^pÐ]qÐq|Ñ}ð  NP€Eð Sô  TX÷  T_ñ  T_ð  `eó  Tfð  Sgð gà€5ˆ”—‘˜UÓ#Ð$Ð$9¼$¿+¹+ÀeÓ:LÐ9MÈTÐRVÐQWÐX]ÐW^Ð^eði€Hð 	‡O�O�H w€OÕ/r   c                ó6   ‡‡— t        ˆˆfd„| d   D «       «      S )Nc              3  ód   •K  — | ]'  }|d    dk(  sŒ|d   dk(  r|d   ‰k(  r|d   ‰k(  r|–— Œ) y­w)Úbudgetéà.  ÚkindÚresidual_geoÚeval_runÚsetupN© )Ú.0ÚrowÚrunrX   s     €€r   Ú	<genexpr>zscore_rows.<locals>.<genexpr>@   sE   øè ø€ ð +™~˜°°X±À%Ó1GØ˜‘K >Ò1°c¸*±oÈÒ6LØ˜‘L EÒ)ô ™~ùs   ƒ0‘0Úrows)Únext)Úreportr\   rX   s    ``r   Ú
score_rowsra   ?   s    ù€ Üô +˜v fš~ó +ó +ð +r   c           
     ó  — t        j                  dddd¬«      \  }}|D ]G  }	|	j                  d«       |	j                  d«       |	j	                  d«       |	j                  d	¬
«       ŒI |d   j                  |d d …df   |d d …df   ddd¬«       |d   j                  ||df   ||df   ddd¬«       |d   j                  dt        |j                  «       «      › d�«       |d   j                  |d d …df   |d d …df   |ddddd¬«       |d   j                  ||df   ||df   ddddd¬«       |d   j                  d|d›d|d›�«       |j                  |dz   d¬«       |j                  | d ¬!«       t        j                  |«       y )"Nr   é   )g      )@gÍÌÌÌÌÌ@T©ÚfigsizeÚconstrained_layoutÚequalz
CAD X (mm)z
CAD Z (mm)g¤p=
×£À?)Úalphar   z#d4dae1)ÚcÚsÚ
rasterizedz#d21d3bé   zProvisional weak target: z nodesÚmagmaé   )ri   ÚcmapÚvminÚvmaxrj   rk   Únonez#2bcae0gš™™™™™á?é   )Ú
facecolorsÚ
edgecolorsÚ
linewidthsrj   rk   zGNN risk probability: AP ú.3fz, IoU u    Â· training-mask diagnosticé   ©Úfontsizeéª   ©Údpi)ÚpltÚsubplotsÚ
set_aspectÚ
set_xlabelÚ
set_ylabelÚgridÚscatterÚ	set_titleÚintÚsumÚsuptitleÚsavefigÚclose)
r   ÚposÚtruthÚfieldrJ   ÚapÚiouÚfigÚaxesÚaxs
             r   Ú
plot_fieldr“   E   s’  € ä—‘˜Q ¨;È4ÔP�I€CˆÛˆØ
�‰�gÔ §¡¨lÔ ;¸R¿]¹]È<Ô=XØ
�‰�cˆÕð ð 	ˆ�G‡O�O�Cš˜1˜‘I˜s¢1 a 4™y¨I¸Àt€OÔLØˆ�G‡O�O�C˜˜q˜‘M 3 u¨a x¡=°IÀÐPT€OÔUØˆ�G×ÑÐ1´#°e·i±i³kÓ2BÐ1CÀ6ÐJÔKØˆ�G‡O�O�Cš˜1˜‘I˜s¢1 a 4™y¨E¸ÀaÈaØ Dð ô *àˆ�G‡O�O�C˜˜q˜‘M 3 u¨a x¡=¸VÐPYØ" b°Tð ô ;àˆ�G×ÑÐ1°"°S°¸ÀÀC¸yÐIÔJØ‡L�L�Ð7Ñ7À"€LÔEØ‡K�K�˜#€KÔ¤§	¡	¨#¥r   c           	     óN  ‡— |d   j                  «       D ��cg c]  \  }}||d   |d   f‘Œ }}}|j                  d|d   |d   f«       |j                  d„ ¬«       t        j                  d	d
dd¬«      \  }}t        |dd«      D ]Ê  \  }	Š}
t        |ˆfd„¬«      }|D �cg c]  }d|d   v rdn|d   dk(  rdnd‘Œ }}|	j                  t        t        |«      «      |D �cg c]  }|‰   ‘Œ	 c}|¬«       |	j                  t        t        |«      «      |D �cg c]  }|d   ‘Œ	 c}d¬«       |	j                  |
«       |	j                  dd¬«       ŒÌ |j                  |› d�d¬«       |j                  | d¬ «       t        j                  |«       y c c}}w c c}w c c}w c c}w )!NÚmodelsÚaverage_precisionÚthreshold_iouzResidual Geo GNN (individual)Ú	mapped_apÚ
mapped_iouc                ó   — | d   S )Nr   rY   )r[   s    r   Ú<lambda>z%part_model_overview.<locals>.<lambda>Z   s   € ˜c !šfr   )Úkeyr   rc   )é   g      @Trd   )r   rc   )zAverage precisionz
IoU at 0.5c                ó   •— | ‰   S ©NrY   )r[   Úindexs    €r   r›   z%part_model_overview.<locals>.<lambda>]   s	   ø€ ¨s°5ªzr   ÚResidualr   z#196f9bzRisk GNNz#cb6b2dz#96a6b5)Úcoloré   ry   Úxgš™™™™™É?)Úaxisrh   z8: same-run weak-label risk scores; not held-out accuracyé   é¥   r|   )ÚitemsÚappendÚsortr~   r   ÚzipÚsortedÚbarhÚrangeÚlenÚ
set_yticksr…   rƒ   rˆ   r‰   rŠ   )r   ÚbaselineÚresidualÚpartÚnameÚvr^   r�   r‘   r’   rJ   ÚorderedÚrÚcolorsr    s                 @r   Úpart_model_overviewr¹   W   s   ø€ ØNVÐW_ÑN`×NfÑNfÔNhÔiÑNhÁ7À4ÈˆT�1Ð(Ñ)¨1¨_Ñ+=Ò>ÐNh€DÑiØ‡K�KÐ0°(¸;Ñ2GÈÐR^ÑI_Ð`ÔaØ‡I�IÑ$€IÔ%Ü—‘˜Q ¨9ÈÔN�I€CˆÜ  fÐ.QÖRÑˆˆE�5Ü˜Ó#9Ô:ˆÙovÓwÑovÐjk˜z¨Q¨q©TÑ1‘)ÀAÀaÁDÈJÒDV±yÐ\eÑeÐovˆÐwØ
�‰””c˜'“lÓ#¹Ó%@¹°1 a¨£h¸Ñ%@ÈˆÔOØ
�‰”eœC ›LÓ)¹'Ó+B¹'°Q¨A¨a«D¸'Ñ+BÈQˆÔOØ
�‰�UÔ˜RŸW™W¨#°R˜WÕ8ð Sð ‡L�L�D�6ÐQÐRÐ]_€LÔ`Ø‡K�K�˜#€KÔ¤§	¡	¨#¥ùó jùò xùÚ%@ùÚ+Bs   ˜FÂ!FÃ!FÄF"c                óv  — | j                  dd¬«       t        j                  |d|› d�z  d¬«      5 }t        j                  |d   t        j                  «      }t        j                  |d   d d …d	f   t
        «      }	d d d «       t        |«      t        «      k7  rt        |› d
�«      ‚t        j                  | dz  |	|j                  t        j                  «      ¬«       t        t        |d   z  | dz  «       ||dd|d   d|d   j                  d«      dd|d   |d   |d   t        |	j                  «       «      |d   dœ}
| dz  j                  t!        j"                  |
d¬«      d¬«       t%        | dz  ||	||› d|› �|d   |d   «       | d z  }d!}d"|d   d#›d$|d   d#›d%|d   d#›d&�|z   d't'        || dz  d(«      › d)�z   t'        || dz  d*«      › d)�z   t'        || dz  d+«      › d)�z   t'        || dz  d,«      › d-�z   }t)        ||d.k(  r|› d/�n|› d0�d1|d   d2›d3|› d4�|| dz  «       y # 1 sw Y   �Œ²xY w)5NTr-   zdata_processed/paired/z_cad_ply_targets.npzF©Úallow_pickleÚ
cad_pos_mmÚweak_defect_maskr   z: prediction length mismatchzprobability.npz)r½   Úweak_targetÚrisk_probabilityÚ
checkpointúcheckpoint.ptzResidual Geo GNNrT   Úactual_nodesé´   Ú
train_runsÚ+r˜   r™   Úmapped_dice)r\   ÚscopeÚmodelÚrequested_graph_nodesÚactual_graph_nodesÚepochsÚtraining_runsÚweak_label_onlyÚproduction_validr–   Ú
iou_at_0_5Údice_at_0_5Úweak_positive_nodesÚsource_checkpointúreport.jsonrc   ©Úindentr   r   úprediction.pngõ    Â· rE   zÁ<p class="warning">This is fit to a provisional CSV-seeded mask on the same physical run. Registration and defect extent are unvalidated. These numbers are not held-out production accuracy.</p>zc<section><div class="cards"><div class="card"><strong>Average precision</strong><div class="score">rw   zL</div></div><div class="card"><strong>IoU at 0.5</strong><div class="score">zM</div></div><div class="card"><strong>Dice at 0.5</strong><div class="score">z</div></div></div></section>z.<section><h2>Saved files</h2><p class="links">úPrediction PNGÚ zPer-node probabilities NPZzTrained checkpoint PTúMetrics JSONú</p></section>Ú
individualz: individual residual GNNz: jointly trained residual GNNz12,000 requested graph nodes; Ú,z actual nodes; z weak-label fit.)r1   ÚnpÚloadÚasarrayÚfloat32Úboolr¯   Ú
ValueErrorÚsavez_compressedÚastyper3   ÚPROJECTÚsplitr†   r‡   rI   r   Údumpsr“   rC   r:   )r*   Úrun_nameÚrootr\   r[   r�   rÈ   Úrawr‹   rŒ   Úmetricsr    ÚwarningrL   s                 r   Úwrite_result_folderrï   f   sñ  € à‡I�I�d T€IÔ*Ü	�‰�Ð0°°Ð5IÐJÑJÐY^Õ	_ÐcfÜ�j‰j˜˜\Ñ*¬B¯J©JÓ7ˆÜ—
‘
˜3Ð1Ñ2²1°a°4Ñ8¼$Ó?ˆ÷ 
`ô ˆ5ƒz”S˜“XÒ¤Z°8°*Ð<XÐ0YÓ%ZÐZÜ×Ñ˜Ð/Ñ/¸CØ$)¸E¿L¹LÌÏÉÓ<TõVäŒg˜˜LÑ)Ñ)¨3°Ñ+@ÔAØ¨Ð9KØ(-ÀSÈÑEXØ¨s°<Ñ/@×/FÑ/FÀsÓ/KØ"&¸EØ$'¨Ñ$4ÀCÈÑDUØ! -Ñ0Ü&)¨%¯)©)«+Ó&6Ø$'¨Ñ$5ñ7€Gð 	ˆ=Ñ×$Ñ$¤T§Z¡Z°ÀÔ%BÈWÐ$ÔUÜˆsÐ%Ñ% s¨E°5¸X¸JÀdÈ5È'Ð:RØ�;Ñ  \Ñ!2ô4à�,Ñ€Eð R€GØqÐruð  wBñ  sCð  DGð  rHð HOØORÐS_ÑO`ÐadÐNeð fPØPSÐTaÑPbÐcfÐOgð  hDðEð ñð IÌÈ5ÐQTÐUeÑQeÐfvÓIwÐHxÐxyÐzñ{ô �5˜Ð.Ñ.Ð/KÓLÐMÈQÐOñ	Pô
 �5˜˜_Ñ,Ð-DÓEÐFÀaÐHñIô �5˜˜]Ñ*¨>Ó:Ð;¸>ÐJñK€Dô 	ˆ¸%À<Ò:O�8�*Ð5Ñ6Øˆ:Ð3Ð	4Ø)¨#¨nÑ*=¸aÐ)@ÀÐPUÈwÐVfÐ	gØ	ˆsÐ%Ñ%õ'÷7 
`Ñ	_ús   ²AH.È.H8c                óÄ   — | j                  «       sy | j                  d¬«      }|j                  «       D ]  \  }}|j                  ||«      }Œ | j	                  |d¬«       y r   )Úexistsr   r¨   r8   rI   )r   ÚreplacementsÚcontentÚbeforeÚafters        r   Úpatch_copied_htmlrö   Š   sR   € Ø�;‰;Œ=˜&Ø�n‰n gˆnÓ.€GØ%×+Ñ+Ö-‰ˆ�¸¿¹ÈÐQVÓ9W©wÐ-Ø‡O�O�G g€OÕ.r   c                 ód  — dt         fdt        ffD �]œ  \  } }t        | z  }t        |dz  |dz  «       t        |dz  |dz  «       | dk(  rdndD ]-  }|d	z  |z  }|j	                  «       sŒt        ||d
z  |z  «       Œ/ dD ]-  }|dz  |z  }|j	                  «       sŒt        ||dz  |z  «       Œ/ | dk(  rd|dz  j                  d«      D ]  }t        |ddi«       Œ |dz  }t        |t        ||dz  «      t        ||dz  «      t        ||dz  «      dœ«       nt        |dz  ddi«       |dz  }|j                  «       s�Œ0t        j                  j                  t         dz  |j                  «      }|j                  d¬«      }	t        j                  d||	«      }	|j!                  |	d¬«       �ŒŸ y )Nr   r   zresults/modelszmodels/originalÚdata_processedzpreprocessing/data_processed)ÚgraphsÚbrepÚpairedÚ	ply_auditÚrepresentations)rù   rú   Ú
inspectionrý   r   zpreprocessing/results)ÚoutputsÚprocessed_inputsÚfeature_attributionsÚ
gen_modelszdiffusion/originalz*.htmlz../../../data_processedz%../../../preprocessing/data_processedz$models/original/dashboard/index.htmlz%preprocessing/results/representationszpreprocessing/results/graphszmodels/original/weak_gnn)z ../../../results/representationsz../../../results/graphsz ../../../results/models/weak_gnnú*models/original/cad_predictions/index.htmlz4../../../../../results/ME1a_DT_comparison/index.htmlz../../../index.htmlú(preprocessing/results/graphs/viewer.htmlzdatas_2/viewer/vendorr   r   z(?:\.\./)+datas_2/viewer/vendor)rç   ÚME_ROOTÚINDr+   r#   Úrglobrö   r<   rñ   r6   r   r7   r0   r   ÚreÚsubrI   )
r³   rë   Úbaser´   ÚsourceÚpÚ	dashboardÚviewerÚrelativeró   s
             r   Úpackage_originalsr  ‘   sà  € Ø¤Ð(¨9´gÐ*>Ô?‰
ˆˆdÜ�T‰zˆÜ�Ð(Ñ(¨$Ð1BÑ*BÔCÜ�Ð(Ñ(¨$Ð1OÑ*OÔPØUYÐ]cÒUcÑQØMòNˆDà˜IÑ%¨Ñ,ˆFØ�}‰}�¤¨°Ð8OÑ1OÐRVÑ1VÕ WðNó LˆDØ˜LÑ(¨4Ñ/ˆFØ�}‰}�¤¨°Ð8LÑ1LÈtÑ1SÕ Tð Lð �6Š>ØÐ.Ñ.×5Ñ5°hÖ?�Ü! !Ð&?ÐAhÐ%iÕjð @àÐEÑEˆIÜ˜iÜ48¸ÀDÐKrÑDrÓ4sÜ+/°	¸4ÐB`Ñ;`Ó+aÜ48¸ÀDÐKeÑDeÓ4fñ*õ ô ˜dÐ%QÑQØUÐWlÐmôoàÐBÑBˆØ�=‰=Ž?Ü—w‘w—‘¤wÐ1HÑ'HÈ&Ï-É-ÓXˆHØ×&Ñ&°Ð&Ó8ˆGÜ—f‘fÐ?ÀÈ7ÓSˆGØ×Ñ˜g°ÐÖ8ñ9 @r   c                ó  ‡‡‡ — dt         t         dz  fdt        t        dz  ffD �]¤  \  Š}}t        ‰z  }t        |«      }|dz  }|dz  }g }t        D ]t  \  }	}
}}|
‰k7  rŒt        | |	d|	› �«      }||z  }t        ||	|||t        j                  ||	› d|	› �   t        j                  «      d«       |j                  |||d	z  f«       Œv |d	z  Š d
j                  ˆˆ fd„|D «       «      }t        ‰ ‰› d�dd|› d�|d   d   j                  dz  «       t        d„ |D «       |d   «      }t        |dz  ||d   ‰«       g }|d   j!                  «       D ]T  \  }	}|dz  |d   z  }|j                  dt#        j$                  |	«      › d|d   d›d|d   d›dt'        ||d«      › d �	«       ŒV |j                  d!|d"   › d#|d   d$   d›d|d   d%   d›dt'        ||d   d&«      › d �	«       d't'        ||d(z  d)«      › d*t'        ||d+z  d,«      › d*t'        |‰ d-«      › d*t'        ||d.z  d/«      › d0‰› d1d
j                  |«      › d�}t        |‰› d2�d3||dz  «       |d4z  }|d5z  }|‰dk(  rd6nd7z  }t        |‰› d8�d9d't'        ||d	z  d:«      › d*t'        ||d;z  d<«      › d*t'        ||d=z  d>«      › d?�|«       |d@z  }|dAz  }‰dk(  r|dBz  n|dCz  }|dDz  }d't'        ||dEz  dF«      › d*t'        ||dG«      › d*t'        ||dCz  dH«      › d?�}‰dk(  r9|dIt'        ||dBz  dJ«      › d*t'        ||dKz  dL«      › d*t'        ||dMz  dN«      › d?�z  }t        |‰› dO�dP||«       |d	z  }dQt'        ||dR«      › dSt'        ||dT«      › dUt'        ||dV«      › dW�}‰dk(  r-|}|dX|d   d$   d›dY|d   d%   d›dZt'        ||d   d[«      › d?�z  }t        |‰› d\�d]||dz  «       �Œ§ t        d	z  Šd^d
j                  ˆfd_„d`D «       «      z   daz   }t        ‰dbdc|«       y )dNr   z*results/models/cad_predictions/report.jsonr   zmodels/index.htmlzmodels/residual_gnn_12000Úsingle_Ú_single_rÝ   rE   rF   c           
   3  ó|   •K  — | ]3  \  }}}d t        ‰|‰› d|› �«      › d|d   d›d|d   d›d|d   d›d	�	–— Œ5 y
­w)ú<tr><th>rÚ   ú	</th><td>r˜   rw   ú	</td><td>r™   rÃ   rÞ   ú
</td></tr>N©rC   )rZ   r\   r[   r  r³   Úresidual_indexs       €€r   r]   z#build_individual.<locals>.<genexpr>Á   ss   øè ø€ ð 4á*2™Y˜S  Qð $¤A n°Q¸$¸¸qÀÀ°Ó$GÐ#HÈ	ÐRUÐVaÑRbÐcfÐQgð h Ø # LÑ 1°#Ð6°iÀÀNÑ@SÐTUÐ?VÐV`ôbá*2ùs   ƒ9<z: individual residual GNN runszaEach run has its own prediction PNG, per-node probabilities, JSON metrics and trained checkpoint.z{<section><div class="scroll"><table><thead><tr><th>Run</th><th>AP</th><th>IoU</th><th>Actual nodes</th></tr></thead><tbody>z </tbody></table></div></section>éÿÿÿÿrc   r×   c              3  ó2   K  — | ]  }|d    dk(  sŒ|–— Œ y­w)r   r   NrY   )rZ   r¤   s     r   r]   z#build_individual.<locals>.<genexpr>È   s   è ø€ Ð?¡8˜a¨q°©t°w«œ¡8ùs   ‚�zmodels/overview.pngr   r•   zmodels/original/cad_predictionsrO   r  r  r–   rw   r  r—   rÙ   r  z&<tr><th>Residual Geo GNN (individual, r   z
)</th><td>r˜   r™   zFull resultú<section><p class="links">r  zOriginal ten-model galleryrÚ   z#models/original/weak_gnn/index.htmlzRisk GNN galleryzIndividual residual GNN runszmodels/original/report.jsonzArchitecture checks JSONz2</p></section><section><h2>Saved model scores for zö</h2><p>All numbers fit provisional labels on their training runs. The residual GNN result has its own checkpoint and prediction file.</p><div class="scroll"><table><thead><tr><th>Model</th><th>AP</th><th>IoU</th><th>Open</th></tr></thead><tbody>z: independent model resultsz]Original model galleries and every separately trained residual GNN result are collected here.zdiffusion/index.htmlzdiffusion/original/outputsz!18h01_four_variant_comparison.pngz!14h06_four_variant_comparison.pngz: conditional diffusion resultsz`Four representation-specific diffusion variants and the TAG Graph U-Net; weak-label diagnostics.zFull diffusion galleryrÔ   zFive-variant JSON reportz#diffusion/original/processed_inputszProcessed inputsrÜ   zpreprocessing/index.htmlz preprocessing/results/inspectionzcsv_defects_on_merged_image.pngz+preprocessing/results/graphs/comparison.pngr  z'preprocessing/data_processed/index.htmlzAll prepared representationszInteractive graph viewerzGraph resolution PNGzA<section><h2>Scan and annotation inspection</h2><p class="links">zCSV marks PNGzply_components.pngzPLY components PNGzalignment_targets.pngzRegistration PNGz: preprocessing and inspectionzPPrepared CAD representations, graph nodes and source inspection images are here.z�<section class="cards"><div class="card"><strong>Models</strong><p>Original ten families, Risk GNN and individual residual GNN checkpoints.</p>zOpen modelszz</div><div class="card"><strong>Preprocessing</strong><p>CAD graph, image, point, voxel and visual inspection results.</p>zOpen preprocessingzo</div><div class="card"><strong>Diffusion</strong><p>Variant metrics, generated fields and PNG comparisons.</p>zOpen diffusionz</div></section>zV<section><h2>Requested result: ME1a individual residual GNN</h2><div class="score">AP õ    Â· IoU z	</div><p>z&Prediction PNG, checkpoint and metricsz: independent resultsz<One part's saved preprocessing, model and diffusion outputs.ú<section class="cards">c           	   3  óZ   •K  — | ]"  }d |› dt        ‰t        |z  dz  d«      › d�–— Œ$ y­w)ú<div class="card"><strong>zP</strong><p>Independent preprocessing, model training and diffusion results.</p>rE   zOpen part resultsú</div>N)rC   r  )rZ   r³   Úindependent_indexs     €r   r]   z#build_individual.<locals>.<genexpr>  sD   øè ø€ ð /)ñ (ˆDð % T FÐ*zÜÐœs 4™x¨Ñ4Ð5HÓIÐ
JÈ&ô	Rá'ùs   ƒ(+)r   r   ú
</section>zIndependent part resultszFAC28 and ME1a outputs are separated by physical part and training run.)rç   r  r  r   ÚRUNSra   rï   rß   rá   râ   r©   Újoinr:   r0   r_   r¹   r¨   r@   rA   rC   )!ÚhardÚfieldsrë   Úbaseline_pathr
  r±   Úmodel_indexÚresidual_folderÚrun_rowsr´   r  Ú	item_rootr\   r[   r*   ÚrtableÚtop_runr^   rí   rO   rL   Údiffusion_indexÚdiffusion_outputsÚpreviewÚ
prep_indexÚscan_dirÚgraph_viewerÚ	prep_bodyÚ
part_indexÚitemr#  r³   r  s!                                 @@@r   Úbuild_individualr9  ±   s¤  ú€ Ø'-¬w¼ÐBnÑ8nÐ&oØ'0´'¼7ÐEqÑ;qÐ&rô&tÑ!ˆˆd�Mä�T‰zˆÜ˜]Ó+ˆØÐ0Ñ0ˆØÐ!<Ñ<ˆØˆß'+Ñ#ˆD�!�Y Ø�DŠy˜(Ü˜T 4¨7°4°&Ð)9Ó:ˆCØ! CÑ'ˆCÜ  T¨9°c¸3Ü "§
¡
¨6°T°F¸(À4À&Ð2IÑ+JÌBÏJÉJÓ WÐYeôgà�O‰O˜S # s¨\Ñ'9Ð:Õ;ð (,ð )¨<Ñ7ˆØ—‘ô 4á*2ó4ó 4ˆô 	ˆ^ ˜vÐ%CÐDØpð Kð  LRð  KSð  Ssð  tØ�b‰\˜!‰_×#Ñ#Ð&6Ñ6ô	8ô Ñ?¡8Ó?ÀÈ"ÁÓNˆÜ˜DÐ#8Ñ8¸(ÀGÈAÁJÐPTÔUØˆØ% hÑ/×5Ñ5Ö7‰MˆD�'ØÐ<Ñ<¸wÀwÑ?OÑOˆEØ�K‰K˜(¤4§;¡;¨tÓ#4Ð"5°Y¸wÐGZÑ?[Ð\_Ð>`ð aØ& Ñ7¸Ð<¸IÄaÈÐTYÐZjÓFkÐElÐlvðxõ yð 8ð 	�‰Ð<¸WÀQ¹Z¸LÈ
ÐSZÐ[\ÑS]Ð^iÑSjÐknÐRoð pØ" 1™: lÑ3°CÐ8¸	Ä!ÀKÐPWÐXYÑPZÐ[hÓBiÐAjÐjtðvô 	wà,¬Q¨{¸4Ð@lÑ;lð  nJó  .Kð  -Lð  LMÜ�[ Ð&KÑ!KÐL^Ó_Ð`Ð`aÜ�[ Ð0NÓOÐPÐPQÜ�[ Ð&CÑ!CÐD^Ó_Ð`ð a7Ø7;°fð =dàdf×dkÑdkÐlpÓdqÐcrð  sSðTˆô 	ˆ[˜T˜FÐ"=Ð>ØlØ�4Ð/Ñ/ô	1ð Ð!7Ñ7ˆØ Ð#?Ñ?ÐØ#ÈdÐV\ÊnÑ'JØ,OñQˆäˆ_  Ð&EÐFØoØ)¬!¨OÐ<MÈlÑ<ZÐ[sÓ*tÐ)uÐuvÜ�/Ð"3°MÑ"AÐB\Ó]Ð^Ð^_Ü�/ $Ð'LÑ"LÐM_Ó`ÐaÐaoðqð ô	ð Ð6Ñ6ˆ
ØÐ<Ñ<ˆØCGÈ9ÒCT�8Ð?Ò?ØÐLÑLð 	àÐHÑHˆØ1´!°J¸tÐDmÑ?mð  oMó  3Nð  2Oð  OPÜ˜* \Ð2LÓMÐNÈaÜ˜* TÐ*WÑ%WÐXnÓoÐpÐp~ð@ˆ	ð �9ÒØÐ]Ü˜z¨(Ð3TÑ*TÐUdÓeÐfÐfgÜ˜z¨(Ð3GÑ*GÐH\Ó]Ð^Ð^_Ü˜z¨(Ð3JÑ*JÐK]Ó^Ð_Ð_mðoñ pˆIô 	ˆZ˜D˜6Ð!?Ð@Ø_Ø˜ô	!ð ˜LÑ(ˆ
ð bô  cdð  eoð  p{ð  |Ió  cJð  bKð KGô HIð  JTð  U_ð  `tó  Huð  Gvð v|Ü|}ð  Ið  JYð  Zjó  }kð  |lð  l|ð}ˆð �9ÒØˆDØð .Ø.2°1©g°kÑ.BÀ3Ð-GÀxÐPTÐUVÑPWÐXdÑPeÐfiÐOjð kÜ˜Z¨¨Q©Ð0XÓYÐZÐZhðjñ kˆDô 	ˆZ˜D˜6Ð!6Ð7Ð9wØ�4Ð/Ñ/ö	1ðY&tô\ ˜lÑ*ÐØ$ r§w¡wó /)ñ (ó/)ó ()ñ )ð ,8ñ8€Dô 	Ð	Ð6Ø	QÐSWõYr   c                ó  ‡‡‡‡‡— t         dz  }t        t        dz  |dz  «       t        t        dz  |dz  «       t        t        dz  |dz  «       |dz  }t        |d	t	        |t
        d
z  «      t	        |t
        dz  «      dœ«       |dz  }|j                  dd¬«       t        | dd«      d   }t        t        |z  |dz  «       t        t        dz  |dz  «       t        j                  |dz  fi t        D ��ci c]5  \  }}}}|› d�t        j                  ||› d�   t        j                  «      “Œ7 c}}¤Ž g }t        D ]i  \  }}	}
}t        | |d«      }||z  }t        |||
||t        j                  ||› d�   t        j                  «      d«       |j!                  |||dz  f«       Œk |dz  j#                  ddd¬«      5 }t%        j&                  |«      }|j)                  d«       |j+                  d„ |D «       «       d d d «       |d z  j-                  t/        j0                  d!t        D �cg c]  }|d"   ‘Œ	 c}d#d$d%|D ��cg c]  \  }}}t3        |«      ‘Œ c}}d&œd'¬(«      d¬)«       |dz  Šdj5                  ˆfd*„|D «       «      }t7        ‰d+d,d-|› d.t9        ‰|dz  d/«      › d0t9        ‰|dz  d1«      › d0t9        ‰|dz  d2«      › d0t9        ‰|dz  d3«      › d4�|dz  «       |d5z  Š‰j                  dd¬«       t        t        dz  ‰dz  «       g }t        D ]F  \  }}	}
}t        | |d6|› �«      }t        t        |d   z  ‰|› d7�z  «       |j!                  ||f«       ŒH ‰d z  j-                  t/        j0                  d$|D ��cg c]  \  }}|‘Œ	 c}}d8œd'¬(«      d¬)«       ‰dz  Šdj5                  ˆˆfd9„|D «       «      }t7        ‰d:d;d<|› d=t9        ‰‰d z  d>«      › d4�‰dz  «       |dz  Šd?‰d@fdA‰dBfdC|dDz  dEfdF|dGz  dHfdI|dJff}dKdj5                  ˆfdL„|D «       «      z   dMz   }|dNt        | dd«      dO   dP›dQt        | dd«      dR   dP›dSt9        ‰t
        dTz  dU«      › dV�z  }t7        ‰dWdX||dz  «       t         dYz  }t        t        dZz  |dZz  «       d[D ]  }t        t        |z  ||z  «       Œ |dz  }t7        |d\d]d^t9        ||d_z  d`«      › d0t9        ||daz  db«      › d0t9        ||dcz  dd«      › d0t9        ||dez  df«      › d4�	|dez  «       t         dz  ŠdKdj5                  ˆfdg„dh‰difdj|dkfdlt        dz  dmffD «       «      z   dMz   }t7        ‰dndo||dez  «       y c c}}w # 1 sw Y   �ŒmxY wc c}w c c}}w c c}}w )pNr•   Ú	gnn_jointÚgraph_searchÚgnn_joint_hardÚoptimized_experimentÚmodel_rankingÚ
comparisonzcomparison/index.htmlz"../optimized_experiment/index.htmlz/AC28/models/original/cad_predictions/index.htmlz2ME1a_DT/models/original/cad_predictions/index.html)z../gnn_joint_hard/index.htmlz'../../models/cad_predictions/index.htmlzF../../../experiments/ME1a_DT/results/models/cad_predictions/index.htmlÚresidual_gnn_12000Tr-   r   ÚjointrÁ   rÂ   z"gnn_joint_hard/prediction_maps.pngr×   zprobabilities.npzÚ_jointrE   z
report.csvÚwrF   r   )Únewliner   )r\   rÅ   ÚAPÚIoUÚDicerÃ   c              3  óR   K  — | ]  \  }}}||d    |d   |d   |d   |d   f–— Œ! y­w)rÅ   r˜   r™   rÇ   rÃ   NrY   )rZ   r´   r[   Ú_s       r   r]   z!build_together.<locals>.<genexpr>'  sI   è ø€ ð `ÙT^ÁjÀdÈ3Èqð ˜s <Ñ0°°[Ñ1AÀ#ÀlÑBSØ˜mÑ,¨S°Ñ-@ôBÙT^ùs   ‚%'rÔ   Újoint_weak_label_fitr   rÄ   Fz5results/ME1a_DT_comparison/gnn_joint_hard/report.json)ÚstatusrÍ   rÌ   rÏ   Úsource_reportr^   rc   rÕ   r   c           
   3  ór   •K  — | ].  \  }}}d t        ‰||«      › d|d   d›d|d   d›d|d   d›d�	–— Œ0 y	­w)
r  r  r˜   rw   r  r™   rÃ   rÞ   r  Nr  )rZ   r´   r[   r;   r  s       €r   r]   z!build_together.<locals>.<genexpr>.  se   øè ø€ ð 5á)3‘o�d˜3˜vð œQ˜~¨f°TÓ:Ð;¸9ÀSÈÑEUÐVYÐDZð [Ø˜\Ñ*¨3Ð/¨y¸¸^Ñ9LÈQÐ8OÈzô[á)3ùs   ƒ47z)AC28 + ME1a: jointly trained residual GNNzgOne GNN checkpoint trained on two AC28 runs and one ME1a run. Scores are on those same weak-label runs.zt<section><div class="scroll"><table><thead><tr><th>Run</th><th>AP</th><th>IoU</th><th>Nodes</th></tr></thead><tbody>z'</tbody></table></div><p class="links">zShared checkpoint PTrÚ   zThree prediction arrays NPZzMetrics CSVzAll prediction maps PNGrÜ   ÚheldoutÚholdout_ú_checkpoint.pt)rÏ   r^   c              3  ót   •K  — | ]/  \  }}d |› d|d   d›d|d   d›dt        ‰‰|› d�z  d«      › d	�	–— Œ1 y
­w)r  r  r˜   z.4fr  r™   rw   rQ  Ú
Checkpointr  Nr  )rZ   r´   r·   ÚheldÚ
held_indexs      €€r   r]   z!build_together.<locals>.<genexpr>C  sj   øè ø€ ð vÙktÑagÐaeÐfgð ˜T˜F )¨A¨k©N¸3Ð+?¸yÈÈ<ÉÐY\ÐH]ð ^Ü˜: d¨d¨V°>Ð+BÑ&BÀ<ÓPÐQÐQ[ô]Ùktùs   ƒ58zHeld-out run GNN resultsz]One run excluded from each fit. All held-out IoU values were zero; labels remain unvalidated.z}<section><div class="scroll"><table><thead><tr><th>Held-out run</th><th>AP</th><th>IoU</th><th>Model</th></tr></thead><tbody>z</tbody></table></div><p>rÛ   zJoint residual GNNz4Shared checkpoint and a prediction PNG for each run.zHeld-out runsz"Cross-run AP, IoU and checkpoints.zGraph and node searchzgraph_search/index.htmlz83k, 5k, 6k, 12k; Mesh GNN, residual GNN and MLP control.zOptimized experimentzoptimized_experiment/index.htmlz,All 12k individual, joint and held-out fits.zAll-model comparisonz;Risk GNN versus CNN, FNO, point, voxel and residual models.r  c              3  óT   •K  — | ]  \  }}}d |› d|› dt        ‰|d«      › d�–— Œ! y­w©r!  ú</strong><p>rG   zOpen resultsr"  Nr  )rZ   rJ   r;   Údescriptionr*  s       €r   r]   z!build_together.<locals>.<genexpr>P  s`   øè ø€ ð +PÙINÑ-E¨U°6¸+ð .HÈÀwÈlÐ[fÐZgÐgkÔlmÐnyð  {Að  BPó  mQð  lRð  RXô  ,YÙINùó   ƒ%(r$  z=<section><h2>Joint-fit ME1a result</h2><div class="score">AP r˜   rw   r  r™   z3</div><p>The individual ME1a AP 0.629 result is in ú2ME1a_DT/models/residual_gnn_12000/14h06/index.htmlzIndependent ME1a resultsz.</p></section>z#Together: AC28 + ME1a model resultsz_Joint training, individual-versus-joint comparison, graph-size search and held-out diagnostics.Úgraph_node_studyÚ	graph_fit)úrepresentation_sensitivity.csvzrepresentation_sensitivity.jsonúresolution_views.pngúsensitivity_curves.pngz-Together: graph node and representation studyz]AC28 and ME1a representation fidelity across eight graph budgets, with 16 weak training fits.r  r^  zRepresentation CSVzgraph_fit/report.csvzPer-size GNN fit CSVr_  zResolution views PNGr`  zSensitivity curves PNGc              3  óT   •K  — | ]  \  }}}d |› d|› dt        ‰|d«      › d�–— Œ! y­wrW  r  )rZ   rJ   r;   rY  Útogether_indexs       €r   r]   z!build_together.<locals>.<genexpr>f  sI   øè ø€ ð +tñ)sÑ$ˆE�&˜ð % U G¨<¸°}ÀDÌÈ>ÐZ`ÐaoÓIpÐHqÐqwÔxñ)sùrZ  ÚModelsz8Joint residual GNN, held-out runs and all-model ranking.zGraph node studyz.Node sizes, shape fidelity and label transfer.zFull AC28 + ME1a reportz1All preprocessing, models and visual inspections.zTogether: AC28 + ME1a resultszEExperiments that compare or train with both parts are collected here.)ÚTOGETHERr+   ÚCOMBINEDrö   r<   r  r1   ra   r3   rç   rß   rå   r%  rá   râ   rï   r©   ÚopenÚcsvÚwriterÚwriterowÚ	writerowsrI   r   ré   Údictr&  r:   rC   )r'  r(  r•   r@  r²   Újoint_checkpointr´   rJ  Ú
joint_rowsr³   rë   r\   r[   ÚfolderÚfhrh  r8  ÚtableÚ	held_rowsr·   ÚcardsrL   ÚgraphÚfilenameÚgraph_indexrT  rU  r*  r  rb  s                            @@@@@r   Úbuild_togetherrv  	  sS  ü€ Ü˜Ñ €FÜŒX˜Ñ# V¨nÑ%<Ô=ÜŒXÐ(Ñ(¨&Ð3IÑ*IÔJÜŒX˜Ñ'¨°,Ñ)>Ô?ð Ð1Ñ1€JÜ�jØ(LÜ37¸
ÄCÐJ{ÑD{Ó3|ä�œSÐ#WÑWÓXñ	#Zô [ð
 Ð,Ñ,€HØ‡N�N˜4¨$€NÔ/Ü! $¨°gÓ>¸|ÑLÐÜŒgÐ(Ñ(¨(°_Ñ*DÔEÜŒhÐ=Ñ=¸xÐJZÑ?ZÔ[Ü×Ñ˜Ð#6Ñ6ñ 7å04ô6Ù04™}˜t Q¨¨1ð #˜V 6˜?¬B¯J©J°vÀÀÀf¸oÑ7NÔPR×PZÑPZÓ,[Ñ[Ø04ò6ò7ð €Jß!%Ñˆˆd�D˜#Ü�t˜D Ó)ˆØ˜‰}ˆÜ˜F 4¨¨S°ÜŸJ™J v°°°f¨oÑ'>¼r¿z¹zÓJÈ7ô	Tà×Ñ˜4  F¨<Ñ$7Ð8Õ9ð "&ð �\Ñ
!×	'Ñ	'¨°BÀÐ	'Ô	HÈBÜ�z‰z˜"‹~ˆ˜vŸ™Ð/dÔeØ×Ññ `ÙT^ó`ô 	`÷ 
Ið �Ñ×)Ñ)¬$¯*©*Ð?UÝ-1Ó2©T T˜˜a›¨TÑ2¸CÐSXØOÙ)3Ô4©™g˜a  A”�S•	¨Ò4ñ66ð >?ô+@ð JQð *ô Rð ˜LÑ(€NØ
�'‰'ó 5á)3ó5ó 5€Eô 	ˆÐCØ	rØð  AFð  @Gð GÜ˜~¨h°Ñ.FÐG]Ó^Ð_Ð_`Üˆn˜XÐ&9Ñ9Ð:WÓXÐYÐYZÜˆn˜X lÑ2°=ÓAÐBÀ!Üˆn˜XÐ&6Ñ6Ð7PÓQÐRÐR`ð	
bð
 
Ð"Ñ	"ô$ð �IÑ€DØ‡J�J�t T€JÔ*ÜŒhÐ;Ñ;¸DÐAQÑ<QÔRØ€Iß"ÑˆˆT�$�sÜ�t˜D 8¨D¨6Ð!2Ó3ˆÜ”'˜#˜lÑ+Ñ+¨D°D°6¸Ð1HÑ,HÔIØ×Ñ˜$˜s˜Õ$ð #ð 
ˆ-Ñ×#Ñ#¤D§J¡JÀ5Ñ^gÔPhÑ^gÑWZÐWXÐYZÒQRÐ^gÒPhÑ/iÐqrÔ$sð  ~EÐ#ô  FØ�LÑ €JØ
�'‰'ô vÙktóvó v€EäˆÐ.Ø	hð Ið  JOð  IPð PÜ�˜D Ñ.¨~Ó>Ð?¸~ð
OØOSÐTdÑOdôfð �|Ñ#€Kà	˜~Ð/eÐfØ	˜*Ð&JÐKØ	  &Ð)BÑ"BÐD~ÐØ	 Ð(IÑ!IÐKyÐzØ	 Ð-jÐkðm€Eð 
# 2§7¡7ó +PÙINó+Pó $Pñ 
PØP\ñ
]€DàÐLÌZÐX\Ð]iÐjqÓMrÐs~ÑMð  ADð  MEØœ
 4¨°WÓ=¸lÑKÈCÐPð Q=Ü=>¸{Ì3ð  PDñ  LDð  E_ó  >`ð  =að  apðqñ r€Dô 	ˆÐ:Ø	jØ	ˆxÐ(Ñ(ô*ô Ð)Ñ)€EÜŒX�kÑ! %¨Ñ"3Ô4óFˆä”(˜8Ñ# E¨(¡NÕ3ðFð �lÑ"€KÜˆÐDØ	hØ%¤a¨°EÐ:ZÑ4ZÐ[oÓ&pÐ%qÐqrÜˆk˜%Ð 6Ñ6Ð7MÓNÐOÈqÜˆk˜%Ð 6Ñ6Ð7MÓNÐOÈqÜˆk˜%Ð 8Ñ8Ð9QÓRÐSÐSað
cð 
Ð'Ñ	'ô)ô ˜LÑ(€NØ	" 2§7¡7ó +tð �kÐ"\Ð]Ø Ð,\Ð]Ø&¤x°Ñ'<Ð=pÐqñ)só+tó $tñ 
tð
 uAñ
A€Dô 	ˆÐ7Ø	PÐQUØ	Ð'Ñ	'õ)ùóa6÷ 
IÑ	Hüò
 3ùã4ùó* Qis$   Ã::U)Ç?U/È2U<ÉVÎVÕ/U9c                 óÌ  ‡— t         dz  Šdt        dz  dfdt        dz  dfdt        dz  d	ff} d
dj                  ˆfd„| D «       «      z   dz   }|dt	        ‰t        dz  d«      › dt	        ‰t
        dz  d«      › dt	        ‰t        dz  d«      › dt	        ‰t         dz  d«      › dt	        ‰t        dz  d«      › d�z  }t        ‰dd|«       t         dz  j                  dd ¬!«       y )"NrE   zIndependent AC28zAC28/index.htmlz-All AC28 models, preprocessing and diffusion.zIndependent ME1a_DTzME1a_DT/index.htmlzEME1a baseline models and the individual residual GNN AP 0.629 result.ÚTogetherzLJoint model training, held-out runs, graph sizes and cross-model comparison.r  rF   c              3  ó    •K  — | ]E  \  }}}d t        j                  |«      › dt        j                  |«      › dt        ‰|d«      › d�–— ŒG y­w)r!  rX  rG   zOpen folderr"  N)r@   rA   rC   )rZ   rJ   r;   rY  r    s       €r   r]   zbuild_top.<locals>.<genexpr>v  si   øè ø€ ð +/á(-Ñ$ˆE�&˜ð %¤T§[¡[°Ó%7Ð$8¸ÄTÇ[Á[ÐQ\ÓE]ÐD^Ð^bÔcdÐejÐkqÐró  dAð  cBð  BHô  	IÙ(-ùs   ƒAAr$  u]   <section><h2>Find the 0.629 ME1a result</h2><div class="score">AP 0.629 Â· IoU 0.476</div><p>r[  zDIndividual ME1a residual GNN: prediction PNG, checkpoint and metricsz5</p></section><section><h2>Experiment folders</h2><p>zexperiments/index.htmlz2AC28, ME1a and together results inside experimentszr</p></section><section><h2>Existing original outputs</h2><p>The source folders remain in place for compatibility. zPrevious combined visual reportrØ   z!models/cad_predictions/index.htmlzOriginal AC28 model galleryz)results/models/cad_predictions/index.htmlzOriginal ME1a model galleryrÜ   zAll AC28 and ME1a resultsznOpen independent part results or the experiments that use both parts. Every result page also has a PNG export.zINDEX.mdaÍ  # Organized results

- [Open all results](index.html) or [PNG of the index](page.png).
- [AC28 independent results](independent/AC28/index.html): preprocessing, all ten original models, Risk GNN, individual residual GNN, and diffusion.
- [ME1a independent results](independent/ME1a_DT/index.html): preprocessing, all ten original models, Risk GNN, individual residual GNN, and diffusion.
- [ME1a individual residual GNN AP 0.629](independent/ME1a_DT/models/residual_gnn_12000/14h06/index.html): `prediction.png`, `probability.npz`, `checkpoint.pt`, and `report.json`.
- [Together results](together/index.html): joint GNN checkpoint, per-run predictions, held-out tests, graph-size search, and all-model ranking.
- [Experiment folders](../experiments/index.html): mirrored individual and together models, with reports and PNGs.

The original output paths remain available. All AP and IoU values are diagnostics on provisional weak labels, not validated production accuracy.
r   r   )
rH   r  rd  r&  rC   rç   re  r  r:   rI   )rr  rL   r    s     @r   Ú	build_toprz  q  s`  ø€ Ü
�,Ñ
€EØœsÐ#4Ñ4Ð5dÐeØ!¤#Ð&:Ñ":ð  <Cð  DØ”x Ñ,Ð-{Ð|ð~€Eð 
# 2§7¡7ó +/á(-ó+/ó $/ñ 
/à/;ñ
<€Dð 	ð Ü�Uœ3ÐSÑSð  U[ó  \ð  ]ð ]7Ü78¸¼wÐG_Ñ?_ð  aUó  8Vð  7Wð Wtä�%œ Ñ-Ð.OÓPÐQÐQUÜ�%œÐ CÑCÐDaÓbÐcÐcgÜ�%œÐ KÑKÐLiÓjÐkÐkyð{ñ |€Dô 	ˆÐ*Ø	yÐz~ô@äˆZÑ×#Ñ#ð 
%ð ð $õ 
r   c            	     ó’  — t        t        dz  «      } t        j                  t        dz  d¬«      5 }|j                  D �ci c]*  }|t        j
                  ||   t        j                  «      “Œ, }}d d d «       t        «        t        | «       t        | |«       t        «        t        t        dz  «       y c c}w # 1 sw Y   ŒMxY w)Nzgnn_joint_hard/report.jsonz"gnn_joint_hard/prediction_maps.npzFr»   rE   )r   re  rß   rà   Úfilesrá   râ   r  r9  rv  rz  ÚprintrH   )r'  Údrœ   r(  s       r   Úmainr  �  s›   € Ü	”8Ð8Ñ8Ó	9€DÜ	�‰”Ð>Ñ>ÈEÕ	RÐVWØ=>¿WºWÓE¹W°c�”B—J‘J˜q ™v¤b§j¡jÓ1Ñ1¸WˆÐE÷ 
SäÔÜ�T˜&Ô!Ü�4˜ÔÜ„KÜ	Œ'�,Ñ
Õùò F÷ 
SÐ	Rús   ±B=Á /B8Á/B=Â8B=Â=CÚ__main__)r   r   Úreturnrk  )r)   r   r*   r   r�  ÚNone)r:   r   r;   r   r�  Ústr)r:   r   r;   r   rB   rƒ  r�  rƒ  rŸ   )r   r   rJ   rƒ  rK   rƒ  rL   rƒ  rM   zPath | Noner�  r‚  )r`   rk  r\   rƒ  rX   rƒ  r�  rk  )r   r   r‹   ú
np.ndarrayrŒ   r„  r�   r„  rJ   rƒ  rŽ   Úfloatr�   r…  r�  r‚  )
r   r   r±   rk  r²   rk  r³   rƒ  r�  r‚  )r*   r   rê   rƒ  rë   r   r\   rƒ  r[   rk  r�   r„  rÈ   rƒ  r�  r‚  )r   r   rò   zdict[str, str]r�  r‚  )r�  r‚  )r'  rk  r(  rk  r�  r‚  )-Ú__doc__Ú
__future__r   rg  r@   r   r6   r  r%   Úpathlibr   Ú
matplotlibÚuseÚmatplotlib.pyplotÚpyplotr~   Únumpyrß   Ú__file__Úresolver.   rç   rH   re  r  rd  r  r%  r   r+   r3   r<   rC   r:   ra   r“   r¹   rï   rö   r  r9  rv  rz  r  Ú__name__rY   r   r   Ú<module>r‘     sV  ðá TÝ "ã 
Û Û Û 	Û 	Û Ý ã Ø €
‡�ˆuÔ Ý Û á
ˆx‹.×
 Ñ
 Ó
"×
*Ñ
*¨1Ñ
-€Ø
�IÑ
€ØÐ)Ñ)€Ø�Ñ€Ø�ZÑ€Ø
Ð)Ñ
)€Ø	�V˜W eÐ,Ø	�v˜w¨Ð0Ø	�y '¨7Ð3ð5€ó
8óOóó
Eó_ô0ó+ð/Øð/Ø$ð/Ø+0ð/Ø59ó/ó$/ð!'Ø)ð!'Ø25ð!'Ø:>ó!'óH/ó9ó@UYópe)óPó< ð ˆZÒ™�Ðr   