§
    €¤âji  ã                   óö  — d 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ddl	Z	ddl
mZ ej                             dej                             dd¦  «        ¦  «         ddlZddlmZ  ee¦  «                             ¦   «         j        j        Zedz  Z ed	¦  «        Zed
z   ed¦  «        edz  edz  edz  edz  edz  edz  edz  edz  dœ
Zej                             d¦  «        rd„ e                     ¦   «         D ¦   «         ZdZg d¢Zg d¢ZddgZg d¢Zej                             dd¦  «        Zeej                             dd ¦  «        z  Z g d!¢Z!d"„ Z" G d#„ d$¦  «        Z#d%„ Z$e%d&k    r e$¦   «          dS dS )'aÜ  Longer parts with a higher height degree, meshes only: the cut rule (tracked-fit / tracked) against the degree cap
(M, and KAPPA, the largest condition number of a part's height basis on its layer centres). Each encoding at 6144 atoms,
its prefixes at 256 / 1024 / 6144, decoded by the SDF default at 128. Writes ../report/degree_sweep.csv.

The KAPPA patch changes the degree the encoder and the decoder derive from a part's layer count (`_parts.height_degree`),
in this process only: a descriptor written with KAPPA != 1e2 does not decode right in the package.

    env -u PYTHONPATH PYTHONWARNINGS=ignore .venv/bin/python ~/code/data/meshes/fcp_2810_partition/scripts/degree_sweep.py
    FCP_OBJECTS=bowl_gso,dino ... (a subset)
é    N)ÚPath)ÚcKDTreeÚFCP_APIz/home/joao/code/fcp_devel/api)Ú_partsÚreportz/home/joao/code/data/meshesz)fcp_2710_tests/meshes/battery_stepped.plyz`/home/joao/code/fousd-3d/outputs/heavy/MANNEQUIN_SUMMER_DRESS_-_ORANGE_envelope_solid_target.plyz#data/meshes_clean/gso__Elephant.plyz%data/meshes_clean/objectfolder__2.plyz;data/meshes_clean/gso__Threshold_Bead_Cereal_Bowl_White.plyz;data/meshes_clean/gso__Room_Essentials_Mug_White_Yellow.plyz?data/meshes_clean/gso__Schleich_Therizinosaurus_ln9cruulPqc.plyzAdata/meshes_clean/gso__Timberland_Mens_Classic_2Eye_Boat_Shoe.plyz"fcp_2710_tests/meshes/open_box.plyz8data/meshes_clean/gso__Breyer_Horse_Of_The_Year_2015.ply)
Úbattery_steppedÚdressÚelephantÚbowl_ofÚbowl_gsoÚmugÚdinoÚshoeÚopen_boxÚhorseÚFCP_OBJECTSc                 óh   — i | ]/\  }}|t           j        d                               d¦  «        v ¯,||“Œ0S )r   Ú,)ÚosÚenvironÚsplit)Ú.0ÚkÚvs      úF/home/joao/code/data/meshes/fcp_2810_partition/scripts/degree_sweep.pyú
<dictcomp>r   )   s>   € Ð
UÐ
UÐ
U‘D�A�q¨1µ´
¸=Ô0I×0OÒ0OÐPSÑ0TÔ0TÐ+TÐ+Tˆ1ˆaÐ+TÐ+TÐ+Tó    )r   r   é   )ç      Y@g     @�@g     ˆÃ@)é   é#   é2   éP   ztracked-fitÚtracked)é   i   i   Ú
FCP_DEVICEÚcudaÚFCP_OUTzdegree_sweep.csv)ÚobjectÚruleÚkappaÚMÚatomsÚpartsÚmax_degÚmean_lenÚchamferÚp95Ún_meanÚn_over30Úsecondsc                 ó–   — | t           _        t           j                             ¦   «          t           j                             ¦   «          d S ©N)r   ÚKAPPAÚheight_degreeÚcache_clearÚ
orth_basis)r   s    r   Ú	set_kappar<   5   s9   € Ø…F„LÝ
Ô×$Ò$Ñ&Ô&Ð&Ý
Ô×!Ò!Ñ#Ô#Ð#Ð#Ð#r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚRefzpThe clean mesh as 200k surface samples with their face normals; Chamfer over 50k of them (in % of the diagonal).c                 ól  — t           j                             |dd¬¦  «        \  | _        }|j        |         | _        t          | j        ¦  «        | _        | j        d d…         | _        t          t          j                             t          j        | j        d¬¦  «        ¦  «        ¦  «        | _        d S )Ni@ r   ©ÚseedéPÃ  r   )Úaxis)ÚtrimeshÚsampleÚsample_surfaceÚptsÚface_normalsÚnrmr   ÚtreeÚchkÚfloatÚnpÚlinalgÚnormÚptpÚdiag)ÚselfÚgÚfis      r   Ú__init__zRef.__init__>   s‡   € Ý”~×4Ò4°Q¸ÀaÐ4ÑHÔH‰ˆŒ�"Ø”> "Ô%ˆŒÝ˜DœHÑ%Ô%ˆŒ	Ø”8˜G˜V˜GÔ$ˆŒÝ�"œ)Ÿ.š.­¬°´¸qÐ)AÑ)AÔ)AÑBÔBÑCÔCˆŒ	ˆ	ˆ	r   c           	      ó  — |�t          |j        ¦  «        dk    rt          j        gdz  S t          j                             |dd¬¦  «        \  }}| j                             |¦  «        \  }}t          j	        t          |¦  «                             | j        ¦  «        d         |g¦  «        | j        z  dz  }t          j        t          j        d|j        |         | j        |         ¦  «        ¦  «        }t          j        t          j        t          j        |dd	¦  «        ¦  «        ¦  «        }|                     ¦   «         t          j        |d
¦  «        |                     ¦   «         |dk                         ¦   «         dz  gS )Nr   é   rB   é   r@   éd   zij,ij->iéÿÿÿÿr   é_   é   )ÚlenÚfacesrM   ÚnanrD   rE   rF   rJ   ÚqueryÚconcatenater   rK   rQ   ÚabsÚeinsumrH   rI   ÚdegreesÚarccosÚclipÚmeanÚ
percentile)	rR   ÚmÚqrT   ÚaÚjÚeÚcÚangs	            r   ÚmeasurezRef.measureE   s)  € Øˆ9�˜AœG™œ¨Ò)Ð)Ý”F�8˜a‘<ÐÝ”×-Ò-¨a°¸aÐ-Ñ@Ô@‰ˆˆ2ØŒy�Š˜qÑ!Ô!‰ˆˆ1ÝŒN�G A™JœJ×,Ò,¨T¬XÑ6Ô6°qÔ9¸1Ð=Ñ>Ô>ÀÄÑJÈSÑPˆÝŒF•2”9˜Z¨¬¸Ô);¸T¼XÀa¼[ÑIÔIÑJÔJˆÝŒj�œ¥2¤7¨1¨b°!Ñ#4Ô#4Ñ5Ô5Ñ6Ô6ˆØ—’‘”�"œ-¨¨2Ñ.Ô.°·²±
´
¸SÀ2ºX¿OºOÑ<MÔ<MÐPSÑ<SÐTÐTr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU   rp   © r   r   r>   r>   ;   s@   € € € € € ØzÐzðDð Dð DðUð Uð Uð Uð Ur   r>   c                  óP  ‡— t                                d¬¦  «         t                               dd¬¦  «        5 } t	          j        | ¦  «        }|                     t          ¦  «         t           	                    ¦   «         D �]ü\  }}t          j        |d¬¦  «        }t          |¦  «        }t          D �]È}t          |¦  «         t          D �]­Št           D �]¡}t#          j        ¦   «         }t'          j        |t+          t,          ¦  «        t.          ‰|t0          ¬¦  «        }	t#          j        ¦   «         |z
  }
d	„ |	j        D ¦   «         }t+          ˆfd
„|D ¦   «         ¦  «        }t,          D ]½}t'          j        |	                     |¦  «        t0          ¬¦  «        }|                     |||d›‰|t9          |	j        ¦  «        |t;          t=          t?          j         |¦  «        ¦  «        d¦  «        gd„ | !                    |¦  «        D ¦   «         ¢t;          |
d¦  «        ‘¦  «         Œ¾|  "                    ¦   «          tG          |d›d|d›d‰d›d|d›dt9          |	j        ¦  «        d›d|d›�d¬¦  «         �Œ£�Œ¯�ŒÊ�Œþ	 d d d ¦  «         n# 1 swxY w Y   t          d¦  «         d S )NT)Úexist_okÚwÚ )ÚnewlineÚmesh)Úforce)r-   Úupr,   r.   Údevicec                 ó&   — g | ]\  }}}||z
  d z   ‘ŒS )r   ru   )r   Ú_Úh0Úh1s       r   ú
<listcomp>zmain.<locals>.<listcomp>_   s&   € ÐEÐEÐE±	°°2°r  R¡¨!¡ÐEÐEÐEr   c              3   óB   •K  — | ]}t          j        |‰¦  «        V — Œd S r7   )r   r9   )r   Únr,   s     €r   ú	<genexpr>zmain.<locals>.<genexpr>`   s0   øè è € Ð!KÐ!KÀ¥&Ô"6°q¸!Ñ"<Ô"<Ð!KÐ!KÐ!KÐ!KÐ!KÐ!Kr   )r~   rS   r   c                 óH   — g | ]}t          t          |¦  «        d ¦  «        ‘Œ S )é   )ÚroundrL   )r   r   s     r   rƒ   zmain.<locals>.<listcomp>d   s(   € Ð)UÐ)UÐ)UÀ­%µ°a±´¸!Ñ*<Ô*<Ð)UÐ)UÐ)Ur   é   Ú16sz k=z M=Ú3dÚ Ú12sz parts=z deg=)Úflushr   )$ÚREPORTÚmkdirÚOUTÚopenÚcsvÚwriterÚwriterowÚFIELDSÚOBJÚitemsrD   Úloadr>   ÚKAPPASr<   ÚMSÚRULESÚtimeÚperf_counterÚfcpÚencodeÚmaxÚBUDGETSÚUPÚDEVICEr.   ÚdecodeÚprefixr]   r‰   rL   rM   rg   rp   r�   Úprint)Úfrx   ÚnameÚpathrS   Úrefr+   r*   ÚtÚdÚsecÚlensÚdegÚTri   r,   s                  @r   Úmainr³   P   s  ø€ Ý
‡L‚L˜$€LÑÔÐÝ	�Š�#˜rˆÑ	"Ô	"ð ~ aÝŒJ�q‰MŒMˆØ	�
Š
•6ÑÔÐÝŸ)š)™+œ+ð 	~ñ 	~‰JˆD�$Ý”˜T¨Ð0Ñ0Ô0ˆAÝ�a‘&”&ˆCÝð ~ñ ~�Ý˜%Ñ Ô Ð Ýð ~ñ ~�AÝ %ð ~ñ ~˜Ý Ô-Ñ/Ô/˜ÝœJ qµµG±´ÅÀqÐPTÕ]cÐdÑdÔd˜Ý"Ô/Ñ1Ô1°AÑ5˜ØEÐE¸Q¼WÐEÑEÔE˜Ý!Ð!KÐ!KÐ!KÐ!KÀdÐ!KÑ!KÔ!KÑKÔK˜Ý!(ð gð g˜AÝ #¤
¨1¯8ª8°A©;¬;½vÐ FÑ FÔ F˜AØŸJšJ¨¨d°u°L°LÀ!ÀQÍÈAÌGÉÌÐVYÕ[`ÕafÕgiÔgnÐosÑgtÔgtÑauÔauÐwxÑ[yÔ[yð (fØ)UÐ)UÀcÇkÂkÐRSÁnÄnÐ)UÑ)UÔ)Uð(fÝW\Ð]`ÐbcÑWdÔWdð(fñ gô gð gð gàŸš™	œ	˜	Ý ÐpÐpÐp¨eÐpÐpÐp¸!ÐpÐpÐpÀÐpÐpÐpÕRUÐVWÔV]ÑR^ÔR^ÐpÐpÐpÐhkÐpÐpÐpÐx|Ð}Ñ}Ô}Ð}Ñ}ñ~ñ~ñ~ð	~ð~ð ~ð ~ñ ~ô ~ð ~ð ~ð ~ð ~ð ~ð ~øøøð ~ð ~ð ~ð ~õ* ˆc�N„N€N€N€Ns   ¹IJÊJÊJÚ__main__)&rt   r”   r   Úsysrž   Úpathlibr   ÚnumpyrM   rD   Úscipy.spatialr   r«   Úinsertr   Úgetr    r   Ú__file__ÚresolveÚparentÚROOTr�   ÚDr˜   r™   r¤   r›   rœ   r�   r£   r¥   r’   r—   r<   r>   r³   rq   ru   r   r   ú<module>rÀ      sh  ðð	ð 	ð €
€
€
Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !à „‡‚��2”:—>’> )Ð-LÑMÔMÑ NÔ NÐ NØ 
€
€
€
Ø Ð Ð Ð Ð Ð à€tˆH�~„~×ÒÑÔÔ&Ô-€Ø	�‰€Ø€DÐ	&Ñ'Ô'€àÐFÑFØˆTÐtÑuÔuØÐ9Ñ9ØÐ:Ñ:ØÐQÑQØÐLÑLØÐQÑQØÐSÑSØÐ8Ñ8ØÐKÑKðð €ð „:‡>‚>�-Ñ Ô ð VØ
UÐ
U˜CŸIšI™KœKÐ
UÑ
UÔ
U€CØ€Ø	ˆˆ€ØÐÐ€Ø	˜	Ð"€Ø
Ð
Ð
€Ø	Œ�Š˜ fÑ	-Ô	-€ØˆrŒz�~Š~˜iÐ);Ñ<Ô<Ñ<€ð
ð 
ð 
€ð$ð $ð $ðUð Uð Uð Uð Uñ Uô Uð Uð*ð ð ð4 ˆzÒÐØ€D�F„F€F€F€Fð Ðr   