Ë
    ˜ƒ¢j_  ã                   óz   — d Z ddl­ ddlmZmZ ddlmZ ddlZddlZddl	m
Z
 edz  Zd„ Zd	„ Zed
k(  r e«        yy)zGExport auditable comparison fields and a topology-based graph scaffold.é    )Ú*)Ú	transformÚfit)ÚcKDTreeN)ÚImageÚviewerc                 óD  — | j                  t        j                  j                  |j	                  d«      «      «      }|d   j                  «       }|d   j                  «       }||z
  }|t        j                  j                  |d¬«      t        j                  d||«      fS )NÚfloat32ÚpointsÚprimitive_normalsé   )Úaxiszij,ij->i)
Úcompute_closest_pointsÚo3dÚcoreÚTensorÚastypeÚnumpyÚnpÚlinalgÚnormÚeinsum)ÚsceneÚqÚrÚcpÚnormalÚdeltas         úanalysis/export_explorer.pyÚclosestr    
   s€   € Ø×"Ñ"¤3§8¡8§?¡?°1·8±8¸IÓ3FÓ#GÓH€AØˆ�{×ÑÓ€B !Ð$7Ñ"8×">Ñ">Ó"@˜6ÀqÈÁtÀØŒb�i‰i�n‰n˜U¨ˆnÓ*¬2¯9©9°ZÀÀfÓ+MÐMÐMó    c                  ó6  — t         dz  } | j                  d¬«       t        j                  j	                  t        t        dz  «      «      }|j                  «        |j                  «        t        j                  j                  j                  «       }|j                  t        j                  j                  j                  j                  |«      «       t        j!                  t        dz  j#                  «       «      }t$        j'                  t        dz  «      }|d   }t        j!                  t(        dz  j#                  «       «      }d	t$        j+                  |d
   d   «      dfd	t$        j+                  |d   d   «      dfd	t$        j+                  |d   «      dfdt$        j+                  |d   «      dfdœ}i t        j!                  t        dz  j#                  «       «      dddœ}i }	t-        d„ t.        j1                  d«      D «       «      }
dD �]½  }t-        |
j1                  |d	k(  rdnd«      «      }t        j                  j3                  t        |dz  «      «      }t$        j5                  |j6                  «      d d d…   }|j9                  «       r%t$        j5                  |j:                  «      d d d…   nt$        j=                  |d«      }t$        j?                  t$        jA                  |dz  «      jC                  t$        jD                  «      dd¬«      \  }}||   jG                  «       ||   jG                  «       tI        |j6                  «      f|	|<   ~tK        jL                  |d z  «      }|jN                  }|jQ                  d!«       |jS                  | d"|› d#�z  «       ||d	k(  rd$d%gnd&d'gd(d)d*œ|jU                  d+i «      |<   �ŒÀ |jW                  «       D �]!  \  }\  }}}t$        j'                  t        |› d,�z  «      d-   }|rstY        d.«      D ]e  }t[        ||«      }t]        ||«      \  }}}|dk  }t_        ||   ||   «      }||z  }t$        j`                  jc                  |d d/…d/f   «      d0k  sŒe n t[        ||«      }t]        ||«      \  }}}|	|   \  }}}t[        ||«      }t]        ||«      \  } }!}"te        |«      }#|#jg                  |d1d2¬3«      \  }$}%||%   }&|&|&ji                  d4d¬5«      z
  }'t$        jk                  d6|'|'«      d1z  }(t$        jm                  t$        jo                  t$        j`                  jq                  |(«      d d …df   d«      «      })t$        jr                  |)|$d d …d7f   d8kD  <   |#jg                  |d2¬9«      d4   }*|)|*   }+t$        ju                  ||!|"|+|g«      jC                  d:«      },| |› d;�z  jM                  d<«      5 }-|-jw                  ty        jz                  d=tI        |«      «      «       |-jw                  |,j}                  «       «       d d d «       |#jg                  |d2¬9«      d   jC                  d>«      }.|.j                  | |› d?�z  «       i }/d@|d d …d2f   dAkD  fdB|d d …d2f   dCkD  |d d …d2f   dAk  z  fdD|d d …d2f   dCk  ffD ]ˆ  \  }0}t�        |jƒ                  «       «      |j…                  «       r!t‡        t$        j‰                  ||   «      «      nd |j…                  «       r"t‡        t$        j‹                  ||   dE«      «      nd dFœ|/|0<   ŒŠ g }1t�        t        j1                  |› dG�«      «      D ]¾  }2t[        t$        j'                  |2«      d-   |«      }3t]        ||3«      \  }}4}|1j�                  |2j�                  j“                  dH«      d7   t‡        t$        j‰                  |4«      «      t‡        t$        j‹                  |4dE«      «      t‡        t$        ji                  |4dIk  «      «      dJœ«       ŒÀ i dK|“dL|“dMtI        |«      “dNtI        |«      “d|j•                  «       “dOt‡        t$        j`                  j—                  |d d/…d d/…f   «      «      “dPt‡        t$        j‰                  |«      «      “dQt‡        t$        j‹                  |dE«      «      “dRt‡        t$        j‹                  |dS«      «      “dTt‡        t$        ji                  |d2k  «      «      “dUt‡        t$        ji                  |dIk  «      «      “dVt‡        t$        ji                  |dWk  «      «      “dXt‡        t$        ji                  |d1kD  «      «      “dY|/“dZ|1“d[d“}5|5|d\   |<   t$        j™                  t        |› d]�z  |.|.dIk  t$        j›                  tI        |«      tœ        ¬^«      |¬_«       tŸ        j                   t        |› d]�z  | |› d]�z  «       t£        |d`D �6ci c]  }6|6|5|6   “Œ
 c}6d¬a«       �Œ$ dbD ]"  }tŸ        j                   t        |z  | |z  «       Œ$ | dcz  j¥                  t        j§                  |d2d¬d«      «       t        dez  j¥                  t        j§                  |d2d¬d«      «       y # 1 sw Y   �ŒZxY wc c}6w )fNÚexplorer_dataT)Úexist_okzdesign_fine.stlúregistration_comparison.jsonúcad_graph.npzÚpos_mmz!analysis/baseline_transforms.jsonÚ16hÚreflection_diagnosticr   ÚrigidÚ16h_previousFÚ18h01)Ú
16h_mirrorÚ	16h_rigidr+   r,   zdesign_metadata.jsonzZEuclidean distance to nearest CAD triangle; full 2 mm voxel sample; no distance exclusionsé*   )ÚvariantsÚdesignÚmetricÚseedc              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)N)Úis_dir)Ú.0Úps     r   Ú	<genexpr>zmain.<locals>.<genexpr>   s   è ø€ Ð<Ñ-�A°·±µŒaÑ-ùs   ‚˜z1. PLY*)r(   r,   z*16*z*18*zall_merge_pointcloud_full.plyé   gffffffæ?gš™™™™™é?r   )r   Úreturn_indexzMerged_Image.png)i   i  Úimage_z.pngiÇ  i®  iw  iÚ  u   ì°�íž˜ (dent)zCSV convention unconfirmed)ÚsizeÚ
dent_pixelÚlabelÚcoordinate_originÚimagesz_all_merge_pointcloud_full.npzr   é#   é   gü©ñÒMbP?é   é   )ÚkÚworkersr   )Úkeepdimsznki,nkj->nijéÿÿÿÿé   )rF   z<f4z.binÚwbz<Ir
   z_coverage.binÚlong_armi¼  ÚbendiX  ÚleggÍÌÌÌÌÌì?)ÚnÚ	median_mmÚp90_mmz_merged_pointcloud_*.npzÚmerged_pointcloud_é   )ÚsensorrO   rP   Úwithin5ÚbatchÚn_rawÚ	n_displayÚn_evaluationÚdeterminantrO   rP   Úp95_mmgffffffî?Úwithin2rT   Úwithin10é
   Ú	outside20ÚregionsÚsensorsÚindependently_validatedr0   z_graph_observations.npz)Údtype)Úcad_to_scan_distance_mmÚcoverage_within5Útraining_validÚtransform_raw_to_cad)rO   rP   rT   r^   )Úflush)zprocess.jsonzdesign_graph.jsonr&   r%   zraw_geometry.pngzrotation_vs_reflection.pngzmetadata.json)ÚindentÚensure_asciizexplorer_metadata.json)TÚWEBÚmkdirr   ÚioÚread_triangle_meshÚstrÚOUTÚremove_duplicated_verticesÚcompute_triangle_normalsÚtÚgeometryÚRaycastingSceneÚadd_trianglesÚTriangleMeshÚfrom_legacyÚjsonÚloadsÚ	read_textr   ÚloadÚROOTÚarrayÚnextÚDATAÚglobÚread_point_cloudÚasarrayr   Ú
has_colorsÚcolorsÚ	full_likeÚuniqueÚfloorr   Úint32ÚcopyÚlenr   Úopenr<   Ú	thumbnailÚsaveÚ
setdefaultÚitemsÚranger   r    r   r   r   r   ÚqueryÚmeanr   ÚsqrtÚmaximumÚeigvalshÚnanÚcolumn_stackÚwriteÚstructÚpackÚtobytesÚtofileÚintÚsumÚanyÚfloatÚmedianÚquantileÚsortedÚappendÚstemÚsplitÚtolistÚdetÚsavez_compressedÚzerosÚboolÚshutilÚcopy2ÚprintÚ
write_textÚdumps)7ÚwebÚmeshr   Ú
comparisonÚgraphÚgpÚbaseliner0   ÚmetadataÚscansÚbaseÚnameÚfolderÚcÚrawÚrgbÚ_ÚidxÚimÚdimsÚkeyrr   Úrefiner7   r   r   ÚdÚmaskr   ÚsignedrN   ÚvÚvcpÚvdÚvsÚtreeÚddÚiiÚnearÚcenteredÚcovÚrmsÚnearestÚvrmsÚdataÚfÚgdistÚregionÚregion_namer`   ÚpathÚspÚsdÚrowrE   s7                                                          r   ÚmainrÞ      sç  € ÜˆOÑ€C˜CŸI™I¨t˜IÔ4Ü	�‰×	"Ñ	"¤3¤sÐ+<Ñ'<Ó#=Ó	>€D¸t×?^Ñ?^Ô?`Ðae×a~Ña~ô  bAÜ
�%‰%�.‰.×
(Ñ
(Ó
*€E¨5×+>Ñ+>¼s¿u¹u¿~¹~×?ZÑ?Z×?fÑ?fÐgkÓ?lÔ+mÜ�z‰zœ3Ð=Ñ=×HÑHÓJÓK€JÜ
�'‰'”#�oÑ%Ó
&€E¨%°©/ rÜ�Z‰ZœÐAÑA×LÑLÓNÓO€HàœBŸH™H ZÐ0GÑ%HÈÑ%UÓVÐW[Ð\Øœ2Ÿ8™8 J¨wÑ$7¸Ñ$DÓEÀdÐKØœbŸh™h x°Ñ'?Ó@ÀÐGØœŸ™ (¨7Ñ"3Ó4°UÐ;ñ	=€Hð
 ¤T§Z¡Z´Ð5KÑ1K×0VÑ0VÓ0XÓ%Yð  d@ð  HJñ  K€HØ
€EÜ	Ñ<œŸ™ 9Ô-Ó<Ó	<€DÜˆÜ�D—I‘I¨¨eª™f¸Ó@ÓAˆÜ
�&‰&×
!Ñ
!¤# fÐ-LÑ&LÓ"MÓ
Nˆä�J‰J�q—x‘xÓ ¡ 2 Ñ&ˆÈÏÉÌ¬2¯:©:°a·h±hÓ+?ÁÀ"ÀÒ+EÔ]_×]iÑ]iÐjmÐnpÓ]q sÜ�i‰iœŸ™  R¡Ó(×/Ñ/´·±Ó9¸qÈdˆiÓS‰ˆˆ#Ø˜‘X—]‘]“_ S¨¡X§]¡]£_´S¸¿¹³]ÐCˆˆd‰ØÜ�:‰:�fÐ/Ñ/Ó0ˆ°b·g±g°Ø
�‰�ZÔ  §¡¨¨v°d°V¸4Ð-@Ñ)@Ô!AØ7;ÐX\Ð^cÒXcÈ$ÈtÉÐjnÐosÐitð  ~Mð  b~ñ  0ˆ×Ñ˜H RÓ(¨Ó.ð  ð  (Ÿ~™~×/Ñˆ‰OˆT�!�FÜ
�'‰'”#˜˜Ð<Ð=Ñ=Ó
>¸xÑ
HˆÙÜ˜2–Y�Ü˜A˜a“.�¬°°aÓ(8¡  A a¸aÀ¹d¸Ü˜!˜D™' " T¡(Ó+�¨e°A©g¨AÜ—9‘9—>‘> %¨¨¨¨1¨¡+Ó.¨tÓ3±Eð ô �A�a‹.ˆ¤W¨U°1Ó%5™˜˜A˜fØ˜‘+‰	ˆˆC�¤	¨#¨aÓ 0˜a¼7À5ÈÓ;K±°°R¸ä�Q‹Zˆ˜dŸj™j¨¨R¸˜jÓ:™˜˜2Øˆr‰Uˆ˜D §¡¨1°d Ó!;Ñ;�8Ü�I‰I�n X¨hÓ7¸Ñ:ˆÜ�G‰G”B—J‘JœrŸy™y×1Ñ1°#Ó6²q¸°sÑ;¸AÓ>Ó?ˆÔPR×PVÑPVÀÀBÂqÈÀtÁHÈQÁJÁØ—
‘
˜1 Q�
Ó'¨Ñ*ˆ°°G±¨4ä�_‰_˜a  2 d¨3Ð/Ó0×7Ñ7¸Ó>ˆØ�S�E˜�,Ñ×$Ñ$ TÔ*¨a°·±¼¿¹ÀDÌÈQËÓ8PÔ0QÐRS×RYÑRYÐZ^×ZfÑZfÓZhÔRi×*Ø�j‰j˜ AˆjÓ& qÑ)×0Ñ0°Ó;ˆ¸E¿L¹LÈÐPSÈuÐTaÐMbÑIbÔ<cØˆØ",¨Qªq°¨s©V°C©ZÐ!8¸&À!ÂAÀaÀCÁ&ÈÁ*ÈqÒQRÐSTÐQTÉvÐWZÉ{ÑA[Ð9\Ð^cÐdeÒfgÐhiÐfiÑdjÐloÑdoÐ]pÓ qÑˆK˜Ü%(¨¯©«£_Ð^b×^fÑ^fÔ^hÄÄrÇyÁyÐQRÐSWÑQXÓGYÔAZÐnrð  _c÷  _gñ  _gô  _iô  }Bô  CE÷  CNñ  CNð  OPð  QUñ  OVð  WYó  CZô  }[ð  osñ  !tˆF�;Òð !ràˆÜœ3Ÿ8™8 t fÐ,DÐ$EÓFÖGˆDÜœŸ™ › xÑ0°Ó3ˆB¼7À5ÈÓ;L±F°A°b¸Ø�N‰N T§Y¡Y§_¡_Ð5IÓ%JÈ2Ñ%NÔ[`Ôac×ajÑajÐkmÓanÓ[oÔy~ô  @B÷  @Kñ  @Kð  LNð  OQó  @Ró  zSô  ^cô  df÷  dkñ  dkð  lnð  opñ  lpó  dqó  ^rñ  sõ  tð Hð wˆW�Tð  w˜' !ð  w K´°A³ð  w°~ÄcÈ!Ãfð  wÈ[ÐYZ×YaÑYaÓYcð  wÐdqÔrwÔxz÷  yBñ  yB÷  yFñ  yFð  GHð  IKð  JKð  IKð  LNð  MNð  LNð  INñ  GOó  yPó  sQð  wð  R]ô  ^cô  df÷  dmñ  dmð  noó  dpó  ^qð  wð  rzô  {@ô  AC÷  ALñ  ALð  MNð  OQó  ARó  {Sð  wð  T\ô  ]bô  ce÷  cnñ  cnð  opð  qtó  cuó  ]vð  wð  w@ô  AFô  GI÷  GNñ  GNð  OPð  QRñ  ORó  GSó  ATð  wð  U^ô  _dô  eg÷  elñ  elð  mnð  opñ  mpó  eqó  _rð  wð  s}ô  ~Cô  DF÷  DKñ  DKð  LMð  NPñ  LPó  DQó  ~Rð  wð  S^ô  _dô  eg÷  elñ  elð  mnð  oqñ  mqó  eró  _sð  wð  t}ð  ~Dð  wð  ENð  OVð  wð  Wpð  qvð  wˆØ"%ˆ�Ñ˜SÑ!ä
×ÑœC 3 %Ð'>Ð ?Ñ?ÐX]ÐotÐuvÑovô  GI÷  GOñ  GOô  PSð  TVó  PWô  ^bð  GOó  Gcð  yzÐô  	{Ü�‰”S˜C˜5Ð 7Ð8Ñ8¸À¸uÐD[Ð=\Ñ9\Ô]ÜˆcÑ&RÓSÑ&R �A�c˜!‘f‘HÐ&RÑSÐZ^×_ð?  0ó@ TˆÜ�‰”S˜‘X˜c $™hÕ'ð TàˆÑ×$Ñ$¤T§Z¡Z°ÀÈu ZÓ%UÔVÜÐ	!Ñ!×-Ñ-¬d¯j©j¸ÈÐX]¨jÓ.^Õ_÷% +Ñ*üò Ts   ×#Aj	ç0jê	j	Ú__main__)Ú__doc__Ú
ac28_auditÚregister_ac28r   r   Úscipy.spatialr   r¬   r™   ÚPILr   r   rj   r    rÞ   Ú__name__© r!   r   Ú<module>rç      s>   ðÙ MÜ ß 'Ý !ß Ý àˆ�M€òNò
=`ð~ ˆZÒ™�Ðr!   