§
    ôíáj®  ã                   ó*  — d Z ddlZddlZddlmZ ddlZddlZej         	                    d e
 ee¦  «        j        ¦  «        ¦  «         ddlZddlmZmZmZmZ ddlZddlmZmZmZmZmZ g d¢Zg d¢Zedz  Zdd
„Zd„ Zedk    r e¦   «          dS dS )a§  Normal error of the decoded mesh for local, hybrid+pointtest, gwn, package on 5 clouds per object:
../report/normals_cmp.csv. Normal error: points sampled on the decoded mesh, the angle (degrees) between their face
normal and the normal of the closest clean-mesh face. Chamfer as in ablation.py (stats).

    env -u PYTHONPATH PYTHONWARNINGS=ignore .venv/bin/python ~/code/data/meshes/fcp_2710_tests/scripts/normals_cmp.py
é    N)ÚPath)ÚCONFIGSÚCTXÚPNÚlabel)ÚOBJÚREPORTÚROOTÚUPÚstats)Úclean_10000Úpn0p6_10000Údgrad_10000Únoise0p6_10000Ú
clean_2048)ÚpackageÚlocalzhybrid+pointtestÚgwnznormals_cmp.csvé N  c                 ó  — t           j                             ||d¬¦  «        \  }}t           j                             | |¦  «        \  }}}t          j        d|j        |         | j        |         ¦  «                             dd¦  «        }t          j	        t          j
        |¦  «        ¦  «        }|                     ¦   «         t          j        |¦  «        t          j        |d¦  «        |dk                         ¦   «         fS )Né   ©Úseedzij,ij->iéÿÿÿÿé   é_   éZ   )ÚtrimeshÚsampleÚsample_surfaceÚ	proximityÚclosest_pointÚnpÚeinsumÚface_normalsÚclipÚdegreesÚarccosÚmeanÚmedianÚ
percentile)	ÚgÚmÚnÚqÚfiÚ_ÚtriÚcÚas	            úA/home/joao/code/data/meshes/fcp_2710_tests/scripts/normals_cmp.pyÚ
normal_errr6      sÀ   € ÝŒN×)Ò)¨!¨Q°QÐ)Ñ7Ô7�E€A€rÝÔ!×/Ò/°°1Ñ5Ô5�I€A€qˆ#Ý
Œ	�*˜aœn¨RÔ0°!´.ÀÔ2EÑFÔF×KÒKÈBÐPQÑRÔR€AÝ
Œ
•2”9˜Q‘<”<Ñ Ô €AØ�6Š6‰8Œ8•R”Y˜q‘\”\¥2¤=°°BÑ#7Ô#7¸!¸bº&¿º¹¼ÐHÐHó    c                  óz  — t                                dd¬¦  «        5 } t          j        | ¦  «        }|                     g d¢¦  «         t
          D �]Ð}t          j        t
          |         d¬¦  «        }t          j	        | 
                    dd¬	¦  «        ¦  «        }t          D �]z}|                     d
d¦  «        d         }d„ t          D ¦   «                              |d¦  «        t          t          j                             |j        ¦  «        ¦  «        z  t&          d<   t          j	        t          j        t(          dz  |› d
|› d�z  ¦  «        j        ¦  «        }t,          D ]¦}t/          |         |t1          j        |d¦  «        ¦  «        }	t3          j        |	d¬¦  «        }
|                     |||t7          |	j        ¦  «        t;          |	||
¦  «        d         gt=          ||
¦  «        ¢¦  «         |                      ¦   «          Œ§tA          ||d¬¦  «         �Œ|�ŒÒ	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚwÚ )Únewline)	ÚobjectÚcloudÚconfigÚpartsÚchamferÚn_meanÚn_medianÚn_p95ÚflippedÚmesh)ÚforceiPÃ  r   r   r1   r   c                 ó4   — i | ]}d t          |¦  «        › �|“ŒS )Úpn)r   )Ú.0Úvs     r5   ú
<dictcomp>zmain.<locals>.<dictcomp>*   s&   € Ð @Ð @Ð @¸ ¥e¨A¡h¤h  °!Ð @Ð @Ð @r7   g        ÚsigmaÚpointcloudsz.ply)r   r   r   Úcuda)ÚdeviceT)Úflush)!ÚOUTÚopenÚcsvÚwriterÚwriterowr   r   Úloadr#   Úasarrayr   ÚCLOUDSÚrsplitr   ÚgetÚfloatÚlinalgÚnormÚextentsr   r
   ÚverticesÚCFGr   r   ÚfcpÚdecodeÚlenr?   r   r6   rP   Úprint)Úfr9   Únamer,   Úrefr3   ÚtagÚPÚkÚdr-   s              r5   Úmainrl   !   sI  € Ý	�Š�#˜rˆÑ	"Ô	"ð + aÝŒJ�q‰MŒMˆØ	�
Š
ÐnÐnÐnÑoÔoÐoÝð 	+ñ 	+ˆDÝ”�S œY¨fÐ5Ñ5Ô5ˆAÝ”*˜QŸXšX f°1˜XÑ5Ô5Ñ6Ô6ˆCÝð 	+ñ 	+�Ø—h’h˜s AÑ&Ô& qÔ)�Ø @Ð @½RÐ @Ñ @Ô @× DÒ DÀSÈ#Ñ NÔ NÕRWÕXZÔXa×XfÒXfÐghÔgpÑXqÔXqÑRrÔRrÑr•�G‘Ý”J�wœ|­D°=Ñ,@ÀdÐCTÐCTÈQÐCTÐCTÐCTÑ,TÑUÔUÔ^Ñ_Ô_�Ýð ð �AÝ œ
 1¥b¤f¨T°9Ñ&=Ô&=Ñ>Ô>�AÝœ
 1¨VÐ4Ñ4Ô4�AØ—J’J  a¨­C°´©L¬L½%ÀÀ3ÈÑ:JÔ:JÈ1Ô:MÐaÕPZÐ[\Ð^_ÑP`ÔP`ÐaÑbÔbÐbØ—G’G‘I”I�I�IÝ�d˜A TÐ*Ñ*Ô*Ð*Ñ*ñ	+ð	+ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   �HH0È0H4È7H4Ú__main__)r   ) Ú__doc__rS   ÚsysÚpathlibr   Únumpyr#   r   ÚpathÚinsertÚstrÚ__file__ÚparentÚablationÚabr   r   r   r   ra   Úparts_reportr   r	   r
   r   r   rX   r`   rQ   r6   rl   Ú__name__© r7   r5   ú<module>r|      sD  ððð ð €
€
€
Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€à „‡‚��3�3�t�t˜H‘~”~Ô,Ñ-Ô-Ñ .Ô .Ð .Ø Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 
€
€
€
Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à	VÐ	VÐ	V€Ø5Ð5Ð5€ØÐ Ñ €ðIð Ið Ið Ið+ð +ð +ð& ˆzÒÐØ€D�F„F€F€F€Fð Ðr7   