Ë
    õƒ¢jÁ  ã                   óJ   — d dl ­ d dlZd dlZd dlmZ d„ Zedk(  r e«        yy)é    )Ú*N)ÚImagec            
      ó  ‡— t         dz  } g }t        t         j                  d«      «      D ]é  }|j                  «       rd|j                  v rŒ"|j
                  j                  «       dvrŒ?t        j                  «       }|j                  d«      5 Št        ˆfd„d«      D ]  }|j                  |«       Œ 	 d d d «       |j                  t        |j                  t        «      «      |j!                  «       j"                  |j%                  «       dœ«       Œë | d	z  j'                  t(        j+                  d
|dœdd¬«      «       t,        j/                  d«      D ]%  }t1        j2                  || |j4                  z  «       Œ' t(        j7                  | dz  j9                  «       «      }t;        d„ t         j/                  d«      D «       «      }|d   j=                  «       D ]À  \  }}t;        |j/                  |dk(  rdnd«      «      }	t?        j                  |	dz  «      }
|d   \  }}tA        d|dz
  «      tA        d|dz
  «      tC        |
jD                  |dz   «      tC        |
jF                  |dz   «      g}|
jI                  |«      jK                  | d|› d�z  «       ||d<   ŒÂ | dz  j'                  t(        j+                  |dd¬«      «       tL        jO                  | dz  «      }tQ        |d   «      }|d    }|jR                  d   dk(  r&|jC                  «       dk\  r|jA                  «       |k  sJ ‚tL        jU                  |d   |d!   k7  «      sJ ‚tW        tY        tZ        |j\                  «      «      tW        tY        tZ        |d d d"…   j\                  «      «      k(  sJ ‚tL        j_                  |d   «      jU                  «       r&tL        j_                  |d#   «      jU                  «       sJ ‚tL        j_                  |d$   |d%      «      jU                  «       sJ ‚t(        j7                  t        d&z  j9                  «       «      }|d'   j=                  «       D �]M  \  }}tL        ja                  |d(   «      }|d d)…d d)…f   }tL        jc                  |j\                  |z  tL        je                  d)«      d*¬+«      sJ |«       ‚tL        jc                  tL        jg                  tL        jh                  jk                  |«      «      d!d*¬+«      sJ |«       ‚tL        jO                  | |› d,�z  «      }tQ        |d-   «      |k(  r|d-   jm                  «       rJ ‚| |› d.�z  j                  d«      5 Što        tL        jq                  ‰js                  d/«      d0¬1«      d   «      }tL        jq                  ‰js                  «       d2¬1«      ju                  |d3«      }d d d «       |d4   k(  r,tL        j_                  d d …d d5…f   «      jU                  «       sJ ‚tL        jU                  |d d …d)f   dk\  «      sJ ‚tL        jU                  tL        jg                  |d d …d/f   «      |d d …d)f   d6z   k  «      sJ |«       ‚|d7   |d8   cxk  r	|d9   k  sJ ‚ J ‚tL        jc                  ||d:   «      r�ŒNJ ‚ tL        jw                  tL        ja                  |d'   d;   d(   «      tL        ja                  |d;   «      «      sJ ‚tQ        |«      ||jR                  d!   to        |d%   jy                  «       «      g d<¢d=œ}t,        d>z  j'                  t(        j+                  |d¬?«      «       t{        |«       y # 1 sw Y   �Œ³xY w# 1 sw Y   �Œ¥xY w)@Nzviewer/explorer_datar   Úviewer)z.stpz.plyz.xlsz.csvÚrbc                  ó&   •— ‰ j                  d«      S )Ni  € )Úread)Úfs   €úanalysis/finalize_analysis.pyÚ<lambda>zmain.<locals>.<lambda>   s   ø€  Q§V¡V¨KÔ%8ó    r   )ÚpathÚbytesÚsha256zsource_manifest.jsonzSHA-256)ÚhashÚsourcesé   F)ÚindentÚensure_asciiz*_graph_observations.npzzmetadata.jsonc              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)N)Úis_dir)Ú.0Úps     r   Ú	<genexpr>zmain.<locals>.<genexpr>   s   è ø€ Ð@Ñ1˜°Q·X±XµZ”!Ñ1ùs   ‚˜z1. PLY*ÚimagesÚ16hz*16*z*18*zMerged_Image.pngÚ
dent_pixelr   i   Ú
dent_crop_z.pngÚcrop_boxzcad_graph.npzÚpos_mmÚ
edge_indexé   éÿÿÿÿÚedge_length_mmÚ	k1_per_mmÚcurvature_validz!analysis/baseline_transforms.jsonÚvariantsÚ	transformé   g:Œ0âŽyE>)Úatolz_graph_observations.npzÚtraining_validz.biné   z<u4)Údtypez<f4é	   Ú	n_displayé   gü©ñÒMb`?Ú	median_mmÚp90_mmÚp95_mmÚtransform_raw_to_cadÚ18h01)z.orthogonal transforms; determinant magnitude 1z.18:01 baseline transform bit-for-bit preservedz)finite exported coordinates and distancesz/normal projection bounded by Euclidean distancez/graph indices, reverse edges, and no self edgeszall training_valid masks falsez0binary sizes and displayed counts match metadata)Úsource_countÚgraph_nodesÚdirected_edgesÚcurvature_mapped_nodesÚchecksznumerical_validation.json)r   )>ÚDATAÚsortedÚrglobÚis_fileÚpartsÚsuffixÚlowerÚhashlibr   ÚopenÚiterÚupdateÚappendÚstrÚrelative_toÚROOTÚstatÚst_sizeÚ	hexdigestÚ
write_textÚjsonÚdumpsÚOUTÚglobÚshutilÚcopy2ÚnameÚloadsÚ	read_textÚnextÚitemsr   ÚmaxÚminÚwidthÚheightÚcropÚsaveÚnpÚloadÚlenÚshapeÚallÚsetÚmapÚtupleÚTÚisfiniteÚarrayÚallcloseÚeyeÚabsÚlinalgÚdetÚanyÚintÚ
frombufferr	   ÚreshapeÚarray_equalÚsumÚprint)Úwebr   r   ÚshaÚblockÚmetaÚscanbaserT   ÚinfoÚfolderÚimgÚxÚyÚboxÚgÚnÚeÚbaselineÚkeyÚvÚtÚrÚobsÚcountÚaÚresultr
   s                             @r   Úmainr�      sR  ø€ ÜÐ#Ñ#€C¨B GÜ”t—z‘z #“Ö'ˆØ�|‰|Œ~ ¨T¯Z©ZÑ!7¸Ø�;‰;×ÑÓÐ&CÑCÀHÜ�N‰NÓˆØ�Y‰Y�tŒ_ ÜÓ8¸Ö=�¸c¿j¹jÈÕ>OÑ=÷ à�‰œs 4×#3Ñ#3´DÓ#9Ó:À4Ç9Á9Ã;×CVÑCVÐ`c×`mÑ`mÓ`oÑpÕqð (ð 	Ð	Ñ×+Ñ+¬D¯J©J¸yÐSZÑ7[ÐcdÐrw¨JÓ,xÔyÜ—‘Ð3Ö4ˆ´V·\±\À$ÀsÈ4Ï9É9Á}Õ5UÐ4Ü	�‰�S˜Ñ(×3Ñ3Ó5Ó	6€DÜÑ@œTŸY™Y yÔ1Ó@Ó@€HØ˜(‘^×)Ñ)Ö+‰	ˆˆTÜ�H—M‘M¨D°%ªK¡&¸VÓDÓEˆÜ�J‰J�vÐ0Ñ0Ó1ˆ°d¸<Ñ6H±#°!°AÜ��1�S‘5‹\œ#˜a  #¡›,¤s¨3¯9©9°Q°s±UÓ';¼CÀÇ
Á
È1ÈSÉ5Ó<QÐRˆØ�‰�‹×Ñ˜3 ¨D¨6°Ð6Ñ6Ô7È¸¸ZÒ8Hð	 ,ð
 	ˆÑ×$Ñ$¤T§Z¡Z°¸AÈ5 ZÓ%QÔRÜ‡g�gˆc�/Ñ!Ó"€A¤S¨¨8©Ó%5 1¸¸,¹°aØ�7‰7�1‰:�qŠ=˜QŸU™U›W ašZ¨A¯E©E«G°AªIÐ5Ð5Ü�6‰6�!�A‘$˜˜!™‘*ÔÐÐÜŒs”5˜Ÿ™‹~Ó¤¤C¬¨a±°"°©g¯i©iÓ$8Ó 9Ò9Ð9Ð9Ü�;‰;�q˜‘{Ó#×'Ñ'Ô)¬b¯k©k¸!Ð<LÑ:MÓ.N×.RÑ.RÔ.TÐTÐTÜ�;‰;�q˜‘~ aÐ(9Ñ&:Ñ;Ó<×@Ñ@ÔBÐBÐBÜ�Z‰ZœÐAÑA×LÑLÓNÓO€HØ�jÑ!×'Ñ'×)‰ˆˆAÜ
�(‰(�1�[‘>Ó
"ˆ Q r¨ r¨"¨1¨" u¡X 1Ü�{‰{˜1Ÿ3™3˜q™5¤§¡¨£°ˆ{Ô5Ð9°cÓ9Ð5Ü�{‰{œ2Ÿ6™6¤"§)¡)§-¡-°Ó"2Ó3°A¸4ˆ{Ô@ÐDÀÓDÐ@Ü�G‰G�C˜3˜%Ð6Ð7Ñ7Ó8ˆÄÀCÐHXÑDYÓ@ZÐ\]Ò@]ÐfiÐjzÑf{×fÑfô  gBð  :Bð  ABØ�S�E˜�,Ñ×$Ñ$ TÔ*¨aÜ”b—m‘m A§F¡F¨1£I°E�mÓ:¸1Ñ=Ó>ˆEÄÇÁÈqÏvÉvËxÐ^cÀÓAd×AlÑAlÐmrÐstÓAu¸q÷ +à�a˜‘nÒ$¬¯©°Q²q¸¸!¸°t±WÓ)=×)AÑ)AÔ)CÐCÐCÜ�v‰v�aš˜!˜‘f˜a‘iÔ Ð Ð Ü�v‰v”b—f‘f˜Qšq ˜s™V“n aª¨!¨¡f¨T¡kÑ1Ô2Ð6°3Ó6Ð2Ø�‰~˜q ™{Ô7¨A¨h©KÒ7Ð7Ñ7Ð7Ð7Ü�{‰{˜1˜SÐ!7Ñ8Ö9Ð9Ð9ð *ô �>‰>œ"Ÿ(™( 4¨
Ñ#3°GÑ#<¸[Ñ#IÓJÌ2Ï8É8ÐT\Ð]dÑTeÓKfÔgÐgÐgÜ˜w›<°aÈÏÉÐQRÉÔmpÐqrð  tEñ  rF÷  rJñ  rJó  rLó  nMò  W^ñ  _€FÜÐ	$Ñ$×0Ñ0´·±¸FÈ!°Ó1LÔMÌeÐTZÍm÷E ‰_ú÷2 +Ñ*ús   Â&]'Õ)A(]4Ý']1	Ý4]>	Ú__main__)Ú
ac28_auditrB   rR   ÚPILr   r�   Ú__name__© r   r   Ú<module>r“      s&   ðÜ ß Ý ò(\ðT ˆZÒ™�Ðr   