Ë
    ÏaºjÑY  ã                  óÆ   — d Z ddlmZ ddlZddlZddlmZ  ee«      j                  «       j                  d   Z
e
dz  Ze
dz  Zdd„Zdd	„Zddd
„Zdd„Zedk(  r e«        yy)z<Assemble the AC28/ME1a comparison and all ME1a result links.é    )ÚannotationsN)ÚPathé   zexperiments/ME1a_DTzresults/ME1a_DT_comparisonc                óH   — t        j                  | j                  «       «      S )N)ÚjsonÚloadsÚ	read_text)Úpaths    õ   ì „ì²˜ë¦¬/build_me1a_report.pyÚloadr      s   € œDŸJ™J t§~¡~Ó'7Ó8Ð8ó    c                ó`   — dt        j                  | «      › dt        j                  |«      › d�S )Nz	<a href="z">z</a>)ÚhtmlÚescape)r
   Úlabels     r   Úlinkr      s,   € °	¼$¿+¹+ÀdÓ:KÐ9LÈBÌtÏ{É{Ð[`ÓOaÐNbÐbfÐ.gÐ'gr   c                ó   — | d|› d�›S )Nz,.Úf© )ÚvalueÚdigitss     r   Únumberr      s   € ¸¸rÀ&ÀÈ¸lÐ8KÐ/Lr   c                 ó(  ‡+— t        t        dz  «      d   } t        t        dz  «      d   }t        t        dz  «      }t        t        dz  «      }t        t        dz  «      }t        t        dz  «      }t        t        dz  «      }t        t        dz  «      d	   }t        t        d
z  «      d	   }t        t        dz  «      }	t        t        dz  «      }
t        t        dz  «      }t        t        dz  «      }t        t        dz  «      }d}g }|D ]î  Š+t	        ˆ+fd„| D «       «      }t	        ˆ+fd„| D «       «      }t	        ˆ+fd„|D «       «      }t	        ˆ+fd„|D «       «      }|j                  d‰+d›d|d   d›d|d   d›dt        |d   «      › dt        |d   «      › dt        |d   «      › dt        |d   «      › dt        |d   «      › dt        |d   «      › dt        |d   «      › dt        |d   «      › d�«       Œð g }|d   j                  «       D ]¸  \  }}|d   j                  |«      }|j                  dt        j                  |«      › d|d    › dt        |d!   «      › dt        |d"   «      › dt        |d#   «      › dt        |d$   «      › dt        |d%   «      › d|rt        |d"   «      nd&› d|rt        |d#   «      nd&› d�«       Œº g }|d'   D ]~  }|d(   d)   }|j                  dt        j                  |d*   «      › d|d+   d›dt        |d,   «      › dt        |d-   «      › dt        |d.   d/   «      › dt        |d.   d0   «      › d�«       Œ€ d1„ }d2}g }|D ]–  } |||d3|› �«      } |||d4«      } |||d5|› �«      } |j                  d|› dt        |d6   «      › dt        |d7   «      › dt        |d6   «      › dt        |d7   «      › dt        | d6   d8«      › dt        | d7   «      › d�«       Œ˜ |
d	   D �!cg c]  }!|!d9   ‘Œ	 }"}!t        d:„ |d   D «       «      }#d;|d<   › d=|d>   › d?|d@   dA   d›dB|dC   d›dD|dE   d›dF|#› dGt        |d   «      › dHt        |d'   «      › dI�}$dJdK|$dKdLdKdMdKdNdOg
}%|D ]ï  Š+t	        ˆ+fdP„| D «       «      }t	        ˆ+fdQ„| D «       «      }t	        ˆ+fdR„|D «       «      }t	        ˆ+fdS„|D «       «      }|%j                  dTdUj                  ‰+d›|d   d›|d   d›t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      f«      z   dVz   «       Œñ |%dKdWdKdXdKdYt        |"«      dZ›d[t        |"«      dZ›d\�d]|	d^   d_   dZ›d`�da|	db   dc   dd   de›df|	dg   › dh�dKdidKdj|#› dkt        |dl   «      › dm�dn|do   dZ›dp|d!   dZ›dq|dr   dZ›ds|dt   dZ›du�	dvdKdwdxgz  }%|d   j                  «       D ]°  \  }}|d   j                  |«      }&|%j                  dTdUj                  |t!        |d    «      t        |d!   «      t        |d"   «      t        |d#   «      t        |d$   «      t        |d%   «      |&rt        |&d"   «      nd&|&rt        |&d#   «      nd&f	«      z   dVz   «       Œ² |%g dy¢z  }%|d'   D ]t  }|d(   d)   }|%j                  dTdUj                  |d*   |d+   d›t        |d,   «      t        |d-   «      t        |d.   d/   «      t        |d.   d0   «      f«      z   dVz   «       Œv |%g dz¢z  }%|D ]r  } |||d3|› �«       |||d4«       |||d5|› �«      g}'|%j                  dTdUj                  |g|'D �!�(cg c]  }!d{D ]  }(t        |!|(   «      ‘Œ Œ c}(}!¢­«      z   dVz   «       Œt |%g d|¢z  }%|%g d}¢z  }%t        d~z  j#                  dj                  |%«      d€¬�«       d‚})dKj                  g dƒ‘|)› ‘d„‘t        j                  |$«      › ‘d…‘|dE   d›‘d†‘|d‡   dc   d   d›‘dˆ‘|dC   d›‘d‰‘|d@   dA   d›‘dŠ‘|#› ‘d‹‘t        |d   «      › ‘dŒ‘t        |d'   «      › ‘d�‘dKj                  |«      › ‘dŽ‘t%        d�d�«      › ‘d‘‘t%        d’d“«      › ‘d‘‘t%        d”d•«      › ‘d–‘|	d^   d_   dZ›‘d—‘|	db   dc   dd   de›‘d˜‘t%        d™dš«      › ‘d‘‘t%        d›dœ«      › ‘d‘‘t%        d�dž«      › ‘dŸ‘|dr   dZ›‘d ‘dKj                  |«      › ‘d¡‘t%        d¢d£«      › ‘d‘‘t%        d¤d¥«      › ‘d‘‘t%        d¦d§«      › ‘d‘‘t%        d¨d©«      › ‘d‘‘t%        dªd««      › ‘d¬‘dKj                  |«      › ‘d­‘t%        d®d¯«      › ‘d‘‘t%        d°d±«      › ‘d‘‘t%        d²d³«      › ‘d´‘dKj                  |«      › ‘dµ‘t%        d¶d·«      › ‘d‘‘t%        d¸d¹«      › ‘d‘‘t%        dºd»«      › ‘d‘‘t%        d¼d½«      › ‘d¾‘t%        d¿dÀ«      › ‘d‘‘t%        dÁdÂ«      › ‘d‘‘t%        dÃdÄ«      › ‘d‘‘t%        dÅdÆ«      › ‘d‘‘t%        dÇdÈ«      › ‘d‘‘t%        dÉdÊ«      › ‘d‘‘t%        d~dË«      › ‘dÌ‘«      }*t        dÍz  j#                  |*d€¬�«       t'        t        dÍz  «       y c c}!w c c}(}!w )ÎNzrepresentation_sensitivity.jsonÚrecordszgraph_fit/report.jsonz*results/models/cad_predictions/report.jsonzresults/models/report.jsonz#results/models/weak_gnn/report.jsonzgen_models/outputs/report.jsonzgnn_joint/report.jsonÚrowszgnn_joint_hard/report.jsonz%results/inspection/target_review.jsonz'results/inspection/component_audit.jsonz%analysis/results/source_manifest.jsonz!data_processed/brep/metadata.jsonz data_processed/graphs/index.json)éà.  ip  iˆ  i¸  iÜ  iî  i,  éd   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­w©ÚpartÚAC28Úrequested_nodesNr   ©Ú.0ÚrÚbudgets     €r   Ú	<genexpr>zmain.<locals>.<genexpr>&   ó*   øè ø€ ÐT™#�Q  6¡¨FÓ!2°qÐ9JÑ7KÈVÓ7SŒq™#ùó   ƒ!‘!š!c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­w©r    ÚME1a_DTr"   Nr   r#   s     €r   r'   zmain.<locals>.<genexpr>'   ó+   øè ø€ ÐW™#�Q  6¡¨IÓ!5¸!Ð<MÑ:NÐPVÓ:VŒq™#ùr)   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr   r   r#   s     €r   r'   zmain.<locals>.<genexpr>(   ó+   øè ø€ Ð[™9�a¨¨&©	°6Ó(9¸aÐ@QÑ>RÐTZÓ>Z”™9ùr)   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr+   r   r#   s     €r   r'   zmain.<locals>.<genexpr>)   ó+   øè ø€ Ð^™9�a¨¨&©	°9Ó(<ÀÐCTÑAUÐW]ÓA]”™9ùr)   z<tr><th>Ú,z	</th><td>Úactual_nodesz	</td><td>Úsource_to_graph_p95_mmÚimage_silhouette_iou_128Úsurface_voxel_jaccard_32Ú'weak_label_transfer_iou_on_finest_graphz
</td></tr>ÚmodelsÚepochsÚ
loss_finalÚaverage_precisionÚthreshold_iouÚthreshold_diceÚdisplay_coverageu   â€”ÚvariantsÚmetricséÿÿÿÿÚvariantÚnodes_per_runÚ	best_lossÚMAE_mmÚriskÚAPz
IoU_at_0.5c                ó0   ‡‡— t        ˆˆfd„| D «       «      S )Nc              3  óf   •K  — | ](  }|d    dk(  sŒ|d   dk(  sŒ|d   ‰k(  r|d   ‰k(  r|–— Œ* y­w)r&   r   ÚkindÚresidual_geoÚeval_runÚsetupNr   )r$   r%   ÚrunrM   s     €€r   r'   z*main.<locals>.gnn_score.<locals>.<genexpr>A   sE   øè ø€ ð B™t˜! q¨¡{°EÓ'9¸aÀ¹iÈÓ>WØ˜*™ sÒ*¨q°©z¸5Ò/@ô ™tùs   ƒ1‘1š1)Únext)r   rN   rM   s    ``r   Ú	gnn_scorezmain.<locals>.gnn_score@   s    ù€ Üô B™tó Bó Bð 	Br   )ÚAC28_16hÚ
AC28_18h01Ú
ME1a_14h06Úsingle_ÚjointÚholdout_Ú	mapped_apÚ
mapped_ioué   Úsample_to_fused_p95_mmc              3  ó,   K  — | ]  }|d    dk(  –— Œ y­w)ÚstatusÚforward_backward_smokeNr   )r$   r%   s     r   r'   zmain.<locals>.<genexpr>N   s   è ø€ ÐRÁ/¸Q�1�X‘;Ð 8Õ8Á/ùs   ‚z
ME1a used Úprocess_rowsz XLS process rows, Údefect_rowsz CSV defect marks, Úfused_checkÚvertex_countz fused PLY vertices, Ú
face_countz B-Rep faces and Úsource_verticeszT welded STEP-mesh vertices. The same eight graph budgets as AC28 were prepared. All z7 recorded architecture forward/backward checks passed; z prediction-model families and z< diffusion variants completed weak-label diagnostic fitting.z%# ME1a_DT and AC28 experiment resultsÚ z1## Graph node changes and representation fidelityu  Values compare each part with its own finest graph. Surface P95 is sampled source-to-simplified distance; image IoU uses six 128Â² views; voxel Jaccard uses 32-cell surface occupancy; weak-label transfer IoU maps each graph's 10 mm CSV-seeded mask back to the finest graph.zÏ| Requested | AC28 actual | ME1a actual | AC28 P95 mm | ME1a P95 mm | AC28 image IoU | ME1a image IoU | AC28 voxel Jaccard | ME1a voxel Jaccard | AC28 weak-label transfer IoU | ME1a weak-label transfer IoU |z8|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr   r   r#   s     €r   r'   zmain.<locals>.<genexpr>]   r(   r)   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr+   r   r#   s     €r   r'   zmain.<locals>.<genexpr>^   r-   r)   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr   r   r#   s     €r   r'   zmain.<locals>.<genexpr>_   r/   r)   c              3  óF   •K  — | ]  }|d    dk(  sŒ|d   ‰k(  sŒ|–— Œ y­wr+   r   r#   s     €r   r'   zmain.<locals>.<genexpr>`   r1   r)   z| z | z |a[  The ME1a 100-node request produced 144 nodes, a 387.356 mm surface P95 error and 0.151 image silhouette IoU. The 3,000-node request produced 3,083 nodes, a 0.563 mm surface P95 error and 0.988 silhouette IoU. Small 10 mm weak defect masks lose substantial support even at 3,000 nodes; geometry fidelity alone does not preserve localization labels.z!## Scan and annotation inspectionzÕ- All six PLY files passed full vertex/bounds checks with no nonfinite vertices. The five component files are views of the same production run, not independent training samples. Sample-to-fused P95 distances span z.3fu   â€“z mm.z7- The inferred merged-height raster-to-PLY mapping has Úraster_mapping_checkÚheight_abs_p90_mmz„ mm height P90 error on sampled scan points. All six CSV anchors are within 30 mm of a CAD node after a diagnostic proper-rigid fit.z(- The fitted pose has capped 80 mm RMSE Úregistration_candidatesr   Úcapped_rmse80_mmz.2fzB mm and is not independently validated. The six CSV seeds produce Úweak_10mm_positive_nodesz] positive nodes at an assumed 10 mm geodesic radius. All `training_valid` masks remain false.z&## Model execution and weak-label fitsz- z= forward/backward architecture checks passed on ME1a inputs; Ú	syntheticz6 synthetic checks/demos are separate from real labels.zE- The constrained risk/deformation GNN ran 400 weak-fit epochs: loss Úloss_initialu    â†’ z; same-run threshold IoU Útraining_threshold_iouz, Dice Útraining_threshold_dicez=. Its defect-type head cannot learn from one run-level class.zÏ- All ten feasible model families were fitted to the same ME1a weak target. Values below are same-run training diagnostics and cannot rank production quality or be compared as held-out AC28 vs ME1a accuracy.zk| Model | Epochs | ME1a loss | ME1a AP | ME1a IoU | ME1a Dice | CAD mapping coverage | AC28 AP | AC28 IoU |z-|---|---:|---:|---:|---:|---:|---:|---:|---:|)rd   z!## Conditional diffusion variantsrd   zöFour representation-specific diffusion denoisers and a paper-inspired TAG Graph U-Net were also fitted on the one ME1a run. Deformation MAE uses a nearest-scan proxy under unvalidated registration; risk AP/IoU are same-run weak-label diagnostics.rd   z\| Variant | Nodes/run | Best loss | ME1a deformation MAE mm | Weak risk AP | Weak risk IoU |z|---|---:|---:|---:|---:|---:|)rd   z### Joint AC28 + ME1a GNN experimentrd   a  The residual geometric GNN was compared with the prior Mesh GNN and a position-aware MLP control at 3k, 5k, 6k and 12k requested nodes. A second 12k fit used hard, class-balanced weak masks for 180 epochs. The numbers below are weak-label diagnostics, not verified prediction accuracy.rd   z\| Run | Individual AP | Individual IoU | Joint AP | Joint IoU | Held-out AP | Held-out IoU |z#|---|---:|---:|---:|---:|---:|---:|)rW   rX   )rd   aa  ME1a individual-fit AP reached 0.629 and IoU 0.476, exceeding the earlier FNO same-run AP 0.444 and IoU 0.143. Its held-out AP stayed near its 0.001 prevalence and IoU was zero. Adding ME1a to AC28 holdout training did not consistently improve either AC28 run. The GNN fits ME1a's weak training mask more closely. Cross-part prediction remains unproven.rd   aµ  For localized risk output, fix the current graph at **12,000 requested nodes** (AC28 11,956; ME1a 12,324 actual). The 5k ME1a graph has 5,132 actual nodes and transfers only 0.175 of the finest weak mask by IoU; its 6k graph transfers 0.333 and 3k transfers 0.129. Lower-node graphs can be context inputs, but should not define the spatial output grid. This is a representability choice, not a statistically validated predictive optimum.rd   zk- [Four-size architecture/pooled-fit comparison](gnn_joint/index.html) and [full CSV](gnn_joint/report.csv)z£- [Optimized 12k residual GNN results](gnn_joint_hard/index.html), [prediction maps](gnn_joint_hard/prediction_maps.png), and [full CSV](gnn_joint_hard/report.csv)rd   )rd   z## Open resultsrd   z"- [Interactive report](index.html)zx- [All risk models compared on AC28 and ME1a](model_ranking/index.html) and [full metrics CSV](model_ranking/report.csv)zS- [ME1a preprocessing gallery](../../experiments/ME1a_DT/data_processed/index.html)zK- [ME1a graph viewer](../../experiments/ME1a_DT/results/graphs/viewer.html)zh- [ME1a all-model training gallery](../../experiments/ME1a_DT/results/models/cad_predictions/index.html)zW- [ME1a weak GNN gallery](../../experiments/ME1a_DT/results/models/weak_gnn/index.html)z«- [ME1a conditional diffusion gallery](../../experiments/ME1a_DT/gen_models/outputs/index.html) and [report JSON](../../experiments/ME1a_DT/gen_models/outputs/report.json)zt- [Graph representation CSV](representation_sensitivity.csv) and [per-resolution training CSV](graph_fit/report.csv)z‹- [AC28 preprocessing gallery](../../data_processed/index.html) and [AC28 all-model training gallery](../models/cad_predictions/index.html)rd   zöThe fused PLY is an outcome for target construction, not an input to pre-process prediction. Missing independently verified registration, reviewed spatial labels, OK examples and held-out production runs prevent a valid prediction-accuracy claim.rd   z	README.mdÚ
zutf-8)Úencodinga‘  body{font:15px/1.5 system-ui,sans-serif;background:#f5f7fb;color:#1a2532;max-width:1450px;margin:auto;padding:24px}h1,h2{line-height:1.2}a{color:#125a93}section{background:white;border:1px solid #dce3ec;border-radius:12px;padding:20px;margin:20px 0}.lead{font-size:18px}.warning{background:#fff2cf;border-left:5px solid #d29a13;padding:14px}.scroll{overflow:auto}table{border-collapse:collapse;min-width:850px;width:100%}th,td{border-bottom:1px solid #e1e6ec;padding:8px;text-align:right;white-space:nowrap}th:first-child{text-align:left}thead th{background:#edf3f8}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:14px}.grid img,.wide{width:100%;border:1px solid #e0e6ed;border-radius:6px}.kpis{display:flex;flex-wrap:wrap;gap:12px}.kpis span{background:#eaf1f7;border-radius:8px;padding:10px 14px}small{color:#546474}@media(max-width:700px){body{padding:12px}.grid{display:block}}z¤<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>ME1a_DT + AC28 results</title><style>zT</style>
<h1>ME1a_DT with AC28: preprocessing and model results</h1><p class="lead">a2  </p>
<p class="warning"><strong>Interpretation:</strong> PLY-to-CAD registration and CSV defect extents are not independently validated. Training metrics below measure fit to weak masks on the same physical run. They are not held-out accuracy or evidence of design transfer.</p>
<div class="kpis"><span><b>z'</b> STEP mesh vertices</span><span><b>Úresolutionsz'</b> finest graph nodes</span><span><b>z </b> B-Rep faces</span><span><b>z'</b> fused PLY vertices</span><span><b>z(</b> architecture checks</span><span><b>z.</b> prediction-model families</span><span><b>a™  </b> diffusion variants</span></div>
<section><h2>Graph nodes change what the representations retain</h2><p>Each part is compared with its own finest graph. P95 is sampled source-surface error in mm; six-view image silhouette IoU and surface voxel Jaccard are measured after regenerating each representation from every graph.</p><div class="scroll"><table><thead><tr><th>Requested nodes</th><th>AC28 actual</th><th>ME1a actual</th><th>AC28 P95 mm</th><th>ME1a P95 mm</th><th>AC28 image IoU</th><th>ME1a image IoU</th><th>AC28 voxel Jaccard</th><th>ME1a voxel Jaccard</th><th>AC28 weak-label transfer IoU</th><th>ME1a weak-label transfer IoU</th></tr></thead><tbody>a  </tbody></table></div><p><strong>ME1a at 3,083 nodes:</strong> 0.563 mm P95 and 0.988 image IoU. <strong>ME1a at 144 nodes:</strong> 387.356 mm P95 and 0.151 image IoU. Fine geometry views can remain similar while 10 mm defect masks lose support.</p><div class="grid"><img src="resolution_views.png" alt="AC28 and ME1a depth views by graph budget"><img src="sensitivity_curves.png" alt="Representation quality versus node count"><img src="graph_fit/resolution_training.png" alt="Weak label and training fit by node count"></div><p>zrepresentation_sensitivity.csvzRepresentation metrics CSVu    Â· zgraph_fit/report.csvzAll graph-resolution fits CSVz4../../experiments/ME1a_DT/results/graphs/viewer.htmlzME1a interactive graph viewerzÓ</p></section>
<section><h2>Source and visual inspection</h2><p>All six PLY files have finite vertices. The component scans are five views of one run. The merged-height raster matches sampled PLY heights at P90 z4 mm. The automatic rigid pose has capped 80 mm RMSE aÉ   mm, so residual/deformation values remain diagnostic.</p><div class="grid"><img src="../../experiments/ME1a_DT/results/inspection/csv_defects_on_merged_image.png" alt="Six CSV defect marks on merged image"><img src="../../experiments/ME1a_DT/results/inspection/ply_components.png" alt="Fused and component PLY scans"><img src="../../experiments/ME1a_DT/results/inspection/alignment_targets.png" alt="CAD and fused PLY fit with diagnostic targets"></div><p>z?../../experiments/ME1a_DT/results/inspection/target_review.jsonzAnnotation and pose review JSONzA../../experiments/ME1a_DT/results/inspection/component_audit.jsonzAll PLY audit JSONz3../../experiments/ME1a_DT/data_processed/index.htmlzME1a preprocessing galleryaQ  </p></section>
<section><h2>All model weak-label fits</h2><p>Ten model families fit the same ME1a diagnostic mask. AP, IoU and Dice are measured on that training run. AC28 columns show its own separate weak-label training run and are included for traceability, not a performance ranking. The constrained GNN's 400-epoch training IoU was zÛ.</p><div class="scroll"><table><thead><tr><th>Model</th><th>Epochs</th><th>ME1a loss</th><th>ME1a AP</th><th>ME1a IoU</th><th>ME1a Dice</th><th>CAD map coverage</th><th>AC28 AP</th><th>AC28 IoU</th></tr></thead><tbody>z®</tbody></table></div><img class="wide" src="../../experiments/ME1a_DT/results/models/cad_predictions/comparison.png" alt="All ME1a weak-fit model predictions on one CAD"><p>zC../../experiments/ME1a_DT/results/models/cad_predictions/index.htmlz(ME1a model image gallery and checkpointszD../../experiments/ME1a_DT/results/models/cad_predictions/report.jsonzAll model metrics JSONz<../../experiments/ME1a_DT/results/models/weak_gnn/index.htmlzConstrained GNN trainingz4../../experiments/ME1a_DT/results/models/report.jsonzArchitecture execution reportz$../models/cad_predictions/index.htmlzAC28 model resultsa  </p></section>
<section><h2>Conditional diffusion diagnostics</h2><p>Four representation-specific denoisers and the TAG Graph U-Net were fitted on the one ME1a run. Deformation MAE uses an unvalidated nearest-scan target. Weak risk AP and IoU are measured on that same run, so these values do not establish generation or prediction quality.</p><div class="scroll"><table><thead><tr><th>Variant</th><th>Nodes/run</th><th>Best loss</th><th>Deformation MAE mm</th><th>Weak risk AP</th><th>Weak risk IoU</th></tr></thead><tbody>a6  </tbody></table></div><div class="grid"><img src="../../experiments/ME1a_DT/gen_models/outputs/14h06_four_variant_comparison.png" alt="Four ME1a diffusion variants"><img src="../../experiments/ME1a_DT/gen_models/outputs/graph_unet_6000_14h06_comparison.png" alt="Graph baseline and TAG U-Net on ME1a"></div><p>z7../../experiments/ME1a_DT/gen_models/outputs/index.htmlz3Diffusion gallery, generated clouds and checkpointsz8../../experiments/ME1a_DT/gen_models/outputs/report.jsonzFive-variant report JSONz#../../gen_models/outputs/index.htmlzAC28 diffusion galleryaC  </p></section>
<section><h2>Can one GNN learn from both parts?</h2><p>The residual geometric GNN was compared with the prior Mesh GNN and a coordinate MLP control at 3k, 5k, 6k and 12k graph budgets. The optimized 12k fit uses hard, class-balanced provisional masks. Individual and joint scores are measured on their training runs; held-out scores predict a run excluded from fitting.</p><div class="scroll"><table><thead><tr><th>Run</th><th>Individual AP</th><th>Individual IoU</th><th>Joint AP</th><th>Joint IoU</th><th>Held-out AP</th><th>Held-out IoU</th></tr></thead><tbody>a9  </tbody></table></div><p><strong>Result:</strong> ME1a individual fit AP 0.629 / IoU 0.476 exceeds its previous FNO same-run 0.444 / 0.143, but held-out ME1a AP is near chance and IoU is zero. Adding ME1a did not consistently improve held-out AC28 prediction. <strong>Node choice:</strong> use 12k requested nodes (11,956 AC28; 12,324 ME1a actual) for spatial outputs. ME1a's 5k graph has 5,132 actual nodes and retains only 0.175 of the finest weak mask by IoU; its 6k graph retains 0.333 and 3k retains 0.129. This choice protects localized labels; it is not a validated predictive optimum.</p><div class="grid"><img src="gnn_joint/comparison.png" alt="GNN variants and node sizes, joint and held-out results"><img src="gnn_joint_hard/prediction_maps.png" alt="Individual, pooled and held-out GNN prediction maps"></div><p>zmodel_ranking/index.htmlz!Risk GNN versus every other modelzgnn_joint/index.htmlz!Four-size architecture experimentzgnn_joint_hard/index.htmlz(Optimized 12k GNN and pooling experimentzgnn_joint_hard/report.csvz!All optimized per-run metrics CSVu_  </p></section>
<section><h2>Prepared inputs</h2><p>ME1a has six CAD image views at 128Â²/256Â², sparse surface voxels at 32/64/128, one 8,192-point CAD set, a separate 8,192-point post-scan diagnostic set, tabular XLS conditions and the trimmed B-Rep face graph. The scan is an outcome used for target construction, not a pre-process predictor.</p><p>z:../../experiments/ME1a_DT/data_processed/images/index.htmlÚImagesz:../../experiments/ME1a_DT/data_processed/voxels/index.htmlÚVoxelsz:../../experiments/ME1a_DT/data_processed/points/index.htmlÚPointsz;../../experiments/ME1a_DT/data_processed/tabular/index.htmlzProcess tablez8../../experiments/ME1a_DT/data_processed/brep/index.htmlzB-Repz../../data_processed/index.htmlzAC28 inputszFull written summaryz</p></section></html>z
index.html)r   ÚOUTÚMEÚPROJECTrO   Úappendr   ÚitemsÚgetr   r   ÚsumÚlenÚjoinÚminÚmaxÚstrÚ
write_textr   Úprint),ÚrepÚ	graph_fitÚtrainedÚac28_trainedÚsmokeÚweakÚ	diffusionÚgnn_softÚgnn_hardÚtargetÚscanÚmanifestÚbrepÚgraphsÚbudgetsÚ
graph_rowsÚaÚmÚfaÚfmÚ
model_rowsÚnameÚrowÚbaselineÚdiffusion_rowsÚmetricrP   Úgnn_runsÚgnn_rowsrN   ÚsinglerU   Úheldr%   Úp95Ú
smoke_passÚsummaryÚmdÚbaseÚvaluesÚkeyÚcssÚpager&   s,                                              @r   Úmainr­      s(  ø€ ÜŒSÐ2Ñ2Ó3°IÑ>€CÜ”3Ð.Ñ.Ó/°	Ñ:€IÜ”Ð@Ñ@ÓA€GÜ”gÐJÑJÓK€LÜ
ŒrÐ.Ñ.Ó
/€EÜ	ŒbÐ6Ñ6Ó	7€DÜ”2Ð6Ñ6Ó7€IÜ”#Ð-Ñ-Ó.¨vÑ6€HÜ”#Ð2Ñ2Ó3°FÑ;€HÜ”Ð:Ñ:Ó;€FÜ	ŒbÐ:Ñ:Ó	;€DÜ”"Ð<Ñ<Ó=€HÜ	ŒbÐ4Ñ4Ó	5€DÜ”Ð5Ñ5Ó6€FØ3€Gà€JÛˆÜ
ÓT™#ÓTÓ
TˆÜ
ÓW™#ÓWÓ
WˆÜÓ[™9Ó[Ó[ˆÜÓ^™9Ó^Ó^ˆØ×Ñ˜H V¨A J¨i¸¸.Ñ8IÈ!Ð7LÈIÐVWÐXfÑVgÐhiÐUjð kÜ˜!Ð4Ñ5Ó6Ð7°yÄÈÐJbÑHcÓAdÐ@eð fÜ˜!Ð6Ñ7Ó8Ð9¸Ä6È!ÐLfÑJgÓChÐBið jÜ˜!Ð6Ñ7Ó8Ð9¸Ä6È!ÐLfÑJgÓChÐBið jÜ˜"ÐFÑGÓHÐIð JÜ˜"ÐFÑGÓHÐIÈðUõ 	Vð ð €JØ˜HÑ%×+Ñ+Ö-‰ˆˆSØ˜hÑ'×+Ñ+¨DÓ1ˆØ×Ñ˜H¤T§[¡[°Ó%6Ð$7°yÀÀXÁÀð PÜ˜#˜lÑ+Ó,Ð-¨Y´v¸cÐBUÑ>VÓ7WÐ6Xð YÜ˜#˜oÑ.Ó/Ð0°	¼&ÀÐEUÑAVÓ:WÐ9Xð YÜ˜#Ð0Ñ1Ó2Ð3ð 4Ù<D”6˜(Ð#6Ñ7Ô8È%ÐPð QÙ8@”6˜( ?Ñ3Ô4ÀeÐLÈJðXõ 	Yð .ð €NØ˜Ô$ˆØ�9‰~˜bÑ!ˆØ×Ñ ¬¯©°S¸±^Ó)DÐ(EÀYÈsÐSbÑOcÐdeÐNfð gÜ˜#˜kÑ*Ó+Ð,¨I´f¸VÀHÑ=MÓ6NÐ5Oð PÜ˜& ™.¨Ñ.Ó/Ð0°	¼&ÀÈÁÐP\ÑA]Ó:^Ð9_Ð_iðkõ 	lð %ò
Bð 4€HØ€HÛˆÙ˜ #¨°¨u oÓ6ˆÙ˜  WÓ-ˆÙ�x  h¨s¨eÐ$4Ó5ˆØ�‰˜( 3 % y´¸¸{Ñ8KÓ1LÐ0MÈYÔW]Ð^dÐeqÑ^rÓWsÐVtð uÜ˜% Ñ,Ó-Ð.¨i¼¸uÀ\Ñ?RÓ8SÐ7Tð UÜ˜$˜{Ñ+¨AÓ.Ð/¨y¼ÀÀ\Ñ@RÓ9SÐ8TÐT^ð`õ 	að	 ð /3°6ªlÓ;©l¨ˆÐ#Ó	$¨l€CÐ;ÜÑRÀ%ÈÂ/ÓRÓR€Jà
�X˜nÑ-Ð.Ð.AÀ(È=ÑBYÐAZÐZmØ�MÑ" >Ñ2°1Ð
5Ð5JÈ4ÐP\ÑK]Ð^_ÐJ`ð aØÐ'Ñ(¨Ð+ð ,àˆlÐQÜˆw�xÑ Ó!Ð
"Ð"AÄ#ÀiÐPZÑF[ÓB\ÐA]ð  ^Zð	[ð ð 	0°°7¸2Ø;¸Bð 	\ð  ]_ð 	ZØBð	D€Bó
 ˆÜ
ÓT™#ÓTÓ
TˆÜ
ÓW™#ÓWÓ
WˆÜÓ[™9Ó[Ó[ˆÜÓ^™9Ó^Ó^ˆØ
�	‰	�$�u—z‘z f¨Q Z°A°nÑ4EÀaÐ3HÈQÈ~ÑM^Ð_`ÐLaÜ�1Ð-Ñ.Ó/´°qÐ9QÑ7RÓ0SÜ�1Ð/Ñ0Ó1´&¸Ð;UÑ9VÓ2WÜ�1Ð/Ñ0Ó1´&¸Ð;UÑ9VÓ2WÜ�2Ð?Ñ@ÓAÜ�2Ð?Ñ@ÓAð#Có Dñ Dð
 EIñIõ 	Jð ð ˆ2ð  lð  moØ+¨Bð `ô  adð  ehó  aið  jmð  `nð  nqô  ruð  vyó  rzð  {~ð  qð  Cð  	DØ
AÀ&ÐI_ÑB`ÐatÑBuÐvyÐAzð  {ð  	@Ø
2°6Ð:SÑ3TÐUVÑ3WÐXjÑ3kÐloÐ2pð  qsð  tzð  {Uñ  tVð  sWð  Wtð  	uð  vxØ0°Ø
ˆZˆLÐUÔVYÐZ_Ð`kÑZlÓVmÐUnð  oeð  	fØ
OÐPTÐUcÑPdÐehÐOiÐinÐosð  uAñ  pBð  CFð  oGð  G`ð  aeð  f~ñ  að  @Cð  `Dð  DKð  LPð  Qjñ  Lkð  loð  Kpð  pmð  	nð 	Zð  []ØuØ7ð
9ñ 
9€Bð ˜HÑ%×+Ñ+Ö-‰ˆˆSØ˜(Ñ#×'Ñ'¨Ó-ˆØ
�	‰	�$�u—z‘z 4¬¨C°©MÓ(:¼6À#ÀlÑBSÓ;TÜ�3Ð*Ñ+Ó,¬V°C¸Ñ4HÓ-IÜ�3Ð'Ñ(Ó)¬&°Ð5GÑ1HÓ*IÙ15ŒF�4Ð+Ñ,Ô-¸5Ù-1ŒF�4˜Ñ(Ô)°uð	#>ó ?ñ ?ð @Dñ	Dõ 	Eð .ð ò *ñ *€Bð ˜Ô$ˆØ�9‰~˜bÑ!ˆØ
�	‰	�$�u—z‘z 3 y¡>°S¸Ñ5IÈ!Ð4LÌfÐUXÐYdÑUeÓNfÜ�6˜(Ñ#Ó$¤V¨F°6©N¸4Ñ,@Ó%AÄ&ÈÐPVÉÐXdÑIeÓBfð#hó iñ iØimñnõ 	oð %ð ò /ñ /€Bó ˆÙ˜( 3¨°° Ó7¹	À(È3ÈwÓ8WÙ˜( 3¨°#°Ð'7Ó8ð:ˆà
�	‰	�$�u—z‘z 3Ð"oÁÔ(nÁ¸AÓSmÈC¬°°#±­ÐSm¨ÀÒ(nÑ"oÓpÑpÐquÑuÕvð ð ò rñ r€Bð ò 
Eñ 
E€Bô 	ˆ�_× Ñ  §¡¨2£¸Ð Ô@ð 	`€C÷	
hó 	
hð  rð 	
hð  svð  rwð 	
hð wLð 	
hÜLPÏKÉKÐX_ÓL`ÐKað	
hðbð	
hð #Ð#4Ñ5°aÐ8ð	
hð 9`ð	
hð agÐgtÑ`uÐvwÑ`xð  zHñ  aIð  JKð  `Lð	
hð Lsð	
hð txð  yEñ  tFð  GHð  sIð	
hð Iið	
hð jrð  s@ñ  jAð  BPñ  jQð  RSð  iTð	
hð T{ð	
hð |Fð  {Gð	
hð Goð	
hô psð  t{ð  |Dñ  tEó  pFð  oGð	
hð Guð	
hô vyð  zCð  DNñ  zOó  vPð  uQð	
hðQu	ð	
hð v	x	÷  v	}	ñ  v	}	ð  ~	H
ó  v	I
ð  u	J
ð		
hð J
]ð		
hô ^bð  cCð  D`ó  ^að  ]bð		
hð bfð		
hô gkð  lBð  Cbó  gcð  fdð		
hð dhð		
hô imð  ndð  eDó  iEð  hFð		
hðFEð		
hð
 FLð  Mcñ  Fdð  exñ  Fyð  z}ð  E~ð	
hð
 ~rð	
hð
 syð  zSñ  sTð  UVñ  sWð  Xjñ  skð  loð  rpð	
hð
 pyð	
hô
 z~ð  @ð  Abó  zcð  ydð	
hð
 dhð	
hô
 imð  nqð  rFó  iGð  hHð	
hð
 HLð	
hô
 MQð  RGð  Hdó  Með  Lfð	
hð
fCð	
hð DHð  Iañ  Dbð  cfð  Cgð	
hð gB	ð	
hð C	E	÷  C	J	ñ  C	J	ð  K	U	ó  C	V	ð  B	W	ð	
hð W	Eð	
hô FJð  KPð  Q{ó  F|ð  E}ð	
hð }Að	
hô BFð  GMð  Nfó  Bgð  Ahð	
hð hlð	
hô mqð  rpð  qKó  mLð  lMð	
hð MQð	
hô RVð  WMð  Nmó  Rnð  Qoð	
hð osð	
hô txð  y_ð  `tó  tuð  svð	
hðv~ð	
hð A÷  Fñ  Fð  GUó  Vð  ~Wð	
hð WMð	
hô NRð  SLð  MBó  NCð  MDð	
hð DHð	
hô IMð  NHð  Icó  Idð  Heð	
hð eið	
hô jnð  oTð  Umó  jnð  ioð	
hðouð	
hð vx÷  v}ñ  v}ð  ~F	ó  vG	ð  uH	ð	
hð H	Að	
hô BFð  Gað  bEó  BFð  AGð	
hð GKð	
hô LPð  Qgð  hKó  LLð  KMð	
hð MQð	
hô RVð  Wrð  s]ó  R^ð  Q_ð	
hð _cð	
hô dhð  iDð  Ehó  dið  cjð	
hðjQð	
hô RVð  WSð  T\ó  R]ð  Q^ð	
hð ^bð	
hô cgð  hdð  emó  cnð  boð	
hð osð	
hô txð  yuð  v~ó  tð  s@	ð	
hð @	D	ð	
hô E	I	ð  J	G
ð  H
W
ó  E	X
ð  D	Y
ð	
hð Y
]
ð	
hô ^
b
ð  c
]ð  ^eó  ^
fð  ]
gð	
hð gkð	
hô lpð  qRð  S`ó  lað  kbð	
hð bfð	
hô gkð  lwð  xNó  gOð  fPð	
hð Peô	
h€Dô 	ˆÑ×!Ñ! $°Ð!Ô8Ü	Œ#ˆlÑ
Õùòs 	<ùóv )os   Ðj	ÞjÚ__main__)r
   r   )r
   rƒ   r   rƒ   Úreturnrƒ   )é   )r   Úfloatr   Úintr¯   rƒ   )r¯   ÚNone)Ú__doc__Ú
__future__r   r   r   Úpathlibr   Ú__file__ÚresolveÚparentsrz   ry   rx   r   r   r   r­   Ú__name__r   r   r   Ú<module>r»      sj   ðá BÝ "ã Û Ý áˆX‹×ÑÓ ×(Ñ(¨Ñ+€Ø
Ð Ñ €ØÐ(Ñ(€ó 9Û gÜ LóSðl ˆZÒ™�Ðr   