§
    Ç‰âjÝ  ã                   ó>  — d Z ddlZddlmZ ddlZ ej        d¦  «         ddlmZ ddl	Z
ddlZddlmZ ej                             d e ee¦  «        j        ¦  «        ¦  «         ej                             dd¦  «         ddlZddlmZmZmZmZmZmZ ej        d         Zg d	¢g d
¢dœZ eej        ¦  «        dk    rej        d         ndZ  e
j!        g d¢¦  «        e
j"         #                    g d¢¦  «        z  Z$dd„Z%dZ&dd„Z'd„ Z(e)dk    r e(¦   «          dS dS )uÈ  The clean bowl_gso mesh at 256 layers: does its dimple texture (about 50 periods around, ~0.1 % of the radius) come
through? Variants of N (harmonics per ring) and M (Chebyshev degree) with the atom cap raised for the experiment (the
package's MAX_ATOMS is 6144). Per variant: atoms stored, Chamfer (â€° of the diagonal, against the mesh), the amplitude of
harmonics 45-55 of a decoded mid-height section against GT's; renders: shaded (smooth shading from vertex normals; GT
subdivided twice so its large triangles do not show) and coloured by distance to GT. report/texture_bowl_<set>.html.

    env -u PYTHONPATH PYTHONWARNINGS=ignore .venv/bin/python ~/code/data/meshes/fcp_2710_tests/scripts/texture_bowl.py
é    N)ÚPathÚAgg)ÚPoly3DCollectionz/home/joao/code/fcp_devel/api)ÚCSSÚIMGÚOBJÚREPORTÚUPÚstatsz
fcp.encode))é   é   é   é   )r   é@   r   r   )r   r   r   é`ê  ©r   r   é0   r   )r   )é   é€   r   r   )r   r   r   é@ )r   r   r   r   )Ú256Ú512é   r   )g333333Ó?gš™™™™™é¿ç      à?é-   é8   c                 óä  ‡— |                       dd|fd¬¦  «        Š‰€t          j        S t          ˆfd„‰j        D ¦   «         t
          ¬¦  «        dd…dd…f         }|                     d¦  «        }t          j        |dd…df         |d         z
  |dd…df         |d         z
  ¦  «        }t          j         	                    ||z
  d¬	¦  «        }t          j
        |¦  «        }t          j        t          j         t          j        d
d¬¦  «        }	t          j        |	||         ||         dt          j        z  ¬¦  «        }
t          j        t          j                             |
|
                     ¦   «         z
  ¦  «        ¦  «        t          |
¦  «        z  dz  }t#          t          j        |||…         dz                       ¦   «         ¦  «        |                     ¦   «         z  dz  ¦  «        S )zdAmplitude (% of the mean radius) of harmonics lo..hi-1 of the largest loop of section z (canonical).r   ©r   r   r   )Úplane_originÚplane_normalNc              3   ó<   •K  — | ]}‰j         |j                 V — Œd S ©N)ÚverticesÚpoints)Ú.0ÚeÚss     €úB/home/joao/code/data/meshes/fcp_2710_tests/scripts/texture_bowl.pyú	<genexpr>zband.<locals>.<genexpr>$   s,   øè è € Ð6Ð6 aˆQŒZ˜œÔ!Ð6Ð6Ð6Ð6Ð6Ð6ó    )Úkeyé   r   )Úaxisi   F)Úendpoint)Úperiodéd   )ÚsectionÚnpÚnanÚmaxÚentitiesÚlenÚmeanÚarctan2ÚlinalgÚnormÚargsortÚlinspaceÚpiÚinterpÚabsÚfftÚrfftÚfloatÚsqrtÚsum)ÚGÚzÚloÚhiÚPÚcÚaÚrÚoÚagÚrgÚAr'   s               @r(   ÚbandrQ      s“  ø€ à	�	Š	  1 a˜y°yˆ	ÑAÔA€AØ€yÝŒvˆÝÐ6Ð6Ð6Ð6¨1¬:Ð6Ñ6Ô6½CÐ@Ñ@Ô@ÀÀÀÀBÀQÀBÀÔG€AØ	�Šˆq‰	Œ	€AÝ
Œ
�1�Q�Q�Q˜�T”7˜Q˜qœT‘> 1 Q Q Q¨ T¤7¨Q¨q¬T¡>Ñ2Ô2€AÝ
Œ	�Š�q˜1‘u 1ˆÑ%Ô%€AÝ
Œ
�1‰Œ€AÝ	Œ•b”e�V�RœU D°5Ð	9Ñ	9Ô	9€BÝ	Œ�2�q˜”t˜Q˜qœT¨!­b¬e©)Ð	4Ñ	4Ô	4€BÝ
Œ�rŒv�{Š{˜2 §¢¡	¤	™>Ñ*Ô*Ñ+Ô+­c°"©g¬gÑ5¸Ñ9€AÝ•”˜!˜B˜r˜Eœ( a™-×,Ò,Ñ.Ô.Ñ/Ô/°!·&²&±(´(Ñ:¸SÑ@ÑAÔAÐAr*   gš™™™™™¹?c           	      ó  — |j         dd…df         dk     }|j        |         }|j        |                              d¦  «        }|t	          j        t          j                             |dd¬¦  «        d¦  «        z  }ddt	          j        |t          z  d	d¦  «        z  z   }|€t          j
        |||d
z  f         }nq t          j        d¦  «        t	          j        ||                              d¦  «        t          z  d	d¦  «        ¦  «        dd…dd…f         dd|z  z   dd…df         z  }|                      t          |j        |         |                     d	d¦  «        dd	d¬¦  «        ¦  «         |                      dd¦  «         |                      dd¦  «         |                      dd¦  «         |                      d¦  «         |                      dd¦  «         |                      ¦   «          |                      |d¬¦  «         dS )zqSmooth shading: each face lit by the mean of its vertices' normals; err (per vertex, % of the diagonal): colours.Nr   çš™™™™™©?T)r-   Úkeepdimsgê-�™—q=g333333Ã?g333333ë?r   g{®Gázð?Úmagma_ré   gÍÌÌÌÌÌÜ?gš™™™™™á?ÚnoneF)Ú
facecolorsÚ
edgecolorsÚ
linewidthsÚantialiasedéÿÿÿÿ)r   r   r   é   i¦ÿÿÿé	   )Úfontsize)Úface_normalsÚfacesÚvertex_normalsr7   r2   Úmaximumr9   r:   ÚclipÚLIGHTÚc_ÚpltÚget_cmapÚEMAXÚadd_collection3dr   r#   Úset_xlimÚset_ylimÚset_zlimÚset_box_aspectÚ	view_initÚset_axis_offÚ	set_title)	ÚaxÚmÚtitleÚerrÚfrontÚFÚnÚshadeÚfcs	            r(   Úshowr{   2   sô  € àŒN˜1˜1˜1˜a˜4Ô  4Ò'€EØ	Œ�Œ€AØ	Ô˜Ô× Ò  Ñ#Ô#€AØ�Œ•B”I—N’N 1¨1°t�NÑ<Ô<¸eÑ	DÔ	DÑD€AØ�4�"œ' !¥e¡)¨Q°Ñ2Ô2Ñ2Ñ2€EØ
€{ÝŒU�5˜% ¨¡Ð-Ô.ˆˆà$�SŒ\˜)Ñ$Ô$¥R¤W¨S°¬V¯[ª[¸©^¬^½dÑ-BÀAÀqÑ%IÔ%IÑJÔJÈ1È1È1ÈbÈqÈbÈ5ÔQÐUYÐ\`ÐchÑ\hÑUhÐjkÐjkÐjkÐmqÐjqÔTrÑrˆØ×ÒÕ(¨¬°A¬À2Ç7Â7È1ÈaÁ=Ä=Ð]cØ45À5ðJñ Jô Jñ Kô Kð Kà‡K‚K��AÑÔÐ˜Ÿš B¨Ñ*Ô*Ð*¨B¯KªK¸¸AÑ,>Ô,>Ð,>Ø×Ò�iÑ Ô Ð  "§,¢,¨q°#Ñ"6Ô"6Ð"6¸¿ºÑ8IÔ8IÐ8IÈ2Ï<Ê<ÐX]ÐhiÈ<ÑKjÔKjÐKjÐKjÐKjr*   c                  ó  ‡‡‡ ‡!— t          j        t          d         d¬¦  «        } t          j        |                      dd¬¦  «        ¦  «        }g g }}d Št          t                   D �]Õ\  }}}}|t          _	        t          j        | ||t          j        dd¦  «        d||¬	¦  «        }t          j        |d¬
¦  «        }	t          j        |j                             |	j        ¦  «        |	j        d¬¦  «        Š‰�€t          j        |j                             | j        ¦  «        | j        d¬¦  «        Šˆfd„dD ¦   «         }
‰                     ¦   «                              ¦   «         }t+          t          j                             t          j        ‰j        d¦  «        ¦  «        ¦  «        }|                     |dt          j        |
¦  «        d›d�d f¦  «         |                     t7          dddt          j        |
¦  «        ¬¦  «        ¦  «         t          j        ˆfd„dD ¦   «         ¦  «        }t9          |||	¦  «        d         dz  }|› d|› d|› dt;          |j        d         ¦  «        › d�}|                     t7          |t;          |j        d         ¦  «        t?          |d¦  «        |¬¦  «        ¦  «         t          j         t           j!         "                    ‰‰j        ¦  «        d         ¦  «        |z  dz  }|                     ‰|› d|d›d|d›d �|f¦  «         tG          |d!         d"¬#¦  «         �Œ×d$t          _	        dd%l$m%Š  dCˆ fd&„	Š!ˆ!fd'„|D ¦   «         }ˆ!fd(„|D ¦   «         }tM          j'        d)d*¬+¦  «        }| (                    g d,¢¦  «        }| )                    tL          j*         +                    d-tM          j,        dtZ          ¦  «        ¬.¦  «        |d/d0¬1¦  «         |j.         /                    ¦   «          ‰  0                    t          j        |j.         1                    ¦   «         ¦  «        d d …d d …d d…f          2                    ¦   «         ¦  «        }tM          j3        |¦  «         |d         j4        \  }}‰  5                    d2|t;          |¦  «        z  d3|z  fd4¦  «        }tm          |¦  «        D ] \  }}| 7                    |||z  df¦  «         Œ!tm          |¦  «        D ]<\  }}| 7                    |�|n|||z  |�|n|||j4        d         z
  d3z  z   f¦  «         Œ=tp          d5t          › d6�z  }| 9                    |¦  «         dd l:}d7tv          › d8�d9t          › d:�d;| <                    |¦  «                             d<¦  «         =                    d¬=¦  «        d>|j>        › d?�d@g}t~          d5t          › dA�z   @                    dB A                    |¦  «        ¦  «         tG          |¦  «         d S )DNÚbowl_gsoÚmesh)ÚforceiPÃ  r   )Úseedr   Úcuda)ÚatomsÚlayersÚupÚdeviceÚNÚM)r…   F)Úprocessc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS © ©rQ   )r%   rF   rE   s     €r(   ú
<listcomp>zmain.<locals>.<listcomp>O   s!   ø€ Ð7Ð7Ð7 •$�q˜!‘*”*Ð7Ð7Ð7r*   )g333333Ó¿g        gš™™™™™Ù?r   zGT
harmonics 45-55 = z.3fz % of rÚGTÚ )Úvariantr‚   ÚchamferrQ   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rŠ   r‹   )r%   rF   ÚCs     €r(   rŒ   zmain.<locals>.<listcomp>T   s!   ø€ Ð:Ð:Ð: A•T˜!˜Q‘Z”ZÐ:Ð:Ð:r*   g     @�@z layers, N=z, M=z, z atomsrV   r0   z	
Chamfer u   â€°, harmonics 45-55 = z %r\   T)Úflushr   )ÚImagec           	      ó   •— t          j        dd¬¦  «        }t          |                     ddddd¬¦  «        | ||¦  «         |j                             ¦   «          ‰                     t          j        |j         	                    ¦   «         ¦  «        d d …d d …d d…f          
                    ¦   «         ¦  «        }t          j        |¦  «         |S )	N)é   gÍÌÌÌÌÌ@én   ©ÚfigsizeÚdpir   Ú3dÚortho)Ú
projectionÚ	proj_typerV   )rg   Úfigurer{   Úadd_subplotÚcanvasÚdrawÚ	fromarrayr2   ÚasarrayÚbuffer_rgbaÚcopyÚclose)rs   Útru   ÚfigÚimr”   s        €r(   Útilezmain.<locals>.tile^   s²   ø€ ÝŒj ¨sÐ3Ñ3Ô3ˆÝˆS�_Š_˜Q  1°Àˆ_ÑIÔIÈ1ÈaÐQTÑUÔUÐUØŒ
�ŠÑÔÐØ�_Š_�RœZ¨¬
×(>Ò(>Ñ(@Ô(@ÑAÔAÀ!À!À!ÀQÀQÀQÈÈÈÀ(ÔK×PÒPÑRÔRÑSÔSˆÝŒ	�#‰ŒˆØˆ	r*   c                 ó0   •— g | ]\  }}} ‰||¦  «        ‘ŒS rŠ   rŠ   )r%   rs   r¨   Ú_r«   s       €r(   rŒ   zmain.<locals>.<listcomp>f   s)   ø€ Ð
,Ð
,Ð
,™'˜!˜Q ˆ4ˆ4��1‰:Œ:Ð
,Ð
,Ð
,r*   c                 óL   •— g | ] \  }}}|� ‰|dt           › d�|¦  «        nd ‘Œ!S )Nzdistance to GT, 0-z % of the diagonal)ri   )r%   rs   r¨   ru   r«   s       €r(   rŒ   zmain.<locals>.<listcomp>g   sU   ø€ ð $ð $ð $Ùˆq�!�Sð KNÈ/ˆ4ˆ4�Ð@­Ð@Ð@Ð@À#ÑFÔFÐFÐ_cð $ð $ð $r*   )r–   g      ð?r—   r˜   )rS   r   gÍÌÌÌÌÌì?g      Ð?rU   )Úcmapr:   Ú
horizontalz!distance to GT, % of the diagonal)ÚcaxÚorientationÚlabelÚRGBr,   ÚwhiteÚtexture_bowl_z.pngzD<html><head><meta charset='utf-8'><title>Bowl texture</title><style>z</style></head><body>z"<h1>bowl_gso: the dimple texture (z layers set)</h1>zÞ<p>The texture is about 50 periods around (harmonics 45-55 of a section, about 0.1 % of the radius). N harmonics per ring stores harmonics 1..N only. The atom cap is raised beyond the package's 6144 for the experiment.</p>é   )Úindexz<img src='img/z' style='max-width:100%'>z</body></html>z.htmlÚ
r"   )BÚtrimeshÚloadr   r2   r¤   ÚsampleÚVARIANTSÚSETÚENCÚ	MAX_ATOMSÚfcpÚencoder
   ÚgetÚdecodeÚTrimeshÚposeÚto_canonicalr#   ra   Ú	subdividerB   r9   r:   ÚptpÚappendr7   Údictr   r6   r‚   Úroundr?   Ú	proximityÚclosest_pointÚprintÚPILr”   rg   rŸ   Úadd_axesÚcolorbarÚcmÚScalarMappableÚ	Normalizeri   r¡   r¢   r£   r¥   r¦   r§   ÚsizeÚnewÚ	enumerateÚpaster   ÚsaveÚpandasr   Ú	DataFrameÚto_htmlÚnamer	   Ú
write_textÚjoin)"ÚgÚrefÚoutÚpanelsrƒ   r†   r‡   ÚcapÚdrs   ÚgtÚGsÚdiagÚbrJ   Úlabru   ÚtopÚbotr©   rr   ÚbarÚwÚhÚsheetÚkrª   ÚimgÚpdÚhtmlr’   rE   r”   r«   s"                                 @@@@r(   Úmainrö   C   s  øøøø€ ÝŒ•S˜”_¨FÐ3Ñ3Ô3€AÝ
Œ*�Q—X’X˜f¨1�XÑ-Ô-Ñ
.Ô
.€CØ�bˆ€CØ€AÝ%¥cœ]ð #ñ #Ñˆ��1�cØ�ŒÝŒJ�q ¨Fµr´v¸jÈ)Ñ7TÔ7TÐ]cÐghÐlmÐnÑnÔnˆÝŒJ�q Ð(Ñ(Ô(ˆÝŒO˜AœF×/Ò/°´
Ñ;Ô;¸Q¼WÈeÐTÑTÔTˆØ‰9Ý” ¤× 3Ò 3°A´JÑ ?Ô ?ÀÄÐRWÐXÑXÔXˆAØ7Ð7Ð7Ð7Ð&6Ð7Ñ7Ô7ˆBØ—’‘”×(Ò(Ñ*Ô*ˆBÝ�œŸš­¬¨q¬z¸1Ñ(=Ô(=Ñ>Ô>Ñ?Ô?ˆDØ�MŠM˜2ÐP½¼À¹¼ÐPÐPÐPÐPÐRVÐWÑXÔXÐXØ�JŠJ•t D°¸BÅRÄWÈRÁ[Ä[ÐQÑQÔQÑRÔRÐRÝŒGÐ:Ð:Ð:Ð:Ð)9Ð:Ñ:Ô:Ñ;Ô;ˆÝ�!�S˜!ÑÔ˜QÔ #Ñ%ˆØÐGÐG AÐGÐG¨1ÐGÐGµ°A´G¸A´J±´ÐGÐGÐGˆØ�
Š
•4 ­3¨q¬w°q¬z©?¬?ÅEÈ!ÈQÁKÄKÐVWÐXÑXÔXÑYÔYÐYÝŒf•WÔ&×4Ò4°Q¸¼
ÑCÔCÀAÔFÑGÔGÈ$ÑNÐQTÑTˆØ�Š�q˜SÐSÐS¨AÐSÐSÐSÈ!ÐSÐSÐSÐSÐUXÐYÑZÔZÐZÝˆc�"Œg˜TÐ"Ñ"Ô"Ð"Ñ"Ø…C„MØÐÐÐÐÐðð ð ð ð ð ð -Ð
,Ð
,Ð
, VÐ
,Ñ
,Ô
,€Cð$ð $ð $ð $Ø"ð$ñ $ô $€Cå
Œ*˜X¨3Ð
/Ñ
/Ô
/€CØ	�ŠÐ,Ð,Ð,Ñ	-Ô	-€BØ‡L‚L•”×&Ò&¨I½C¼MÈ!ÍTÑ<RÔ<RÐ&ÑSÔSÐY[ÐiuØ:ð ñ <ô <ð <à„J‡O‚OÑÔÐØ
�/Š/�"œ* S¤Z×%;Ò%;Ñ%=Ô%=Ñ>Ô>¸q¸q¸qÀ!À!À!ÀRÀaÀR¸xÔH×MÒMÑOÔOÑ
PÔ
P€CÝ„Iˆc�N„N€NØˆqŒ6Œ;�D€A€qØ�IŠI�e˜a¥# c¡(¤(™l¨A°©EÐ2°GÑ<Ô<€EÝ˜3‘”ð $ð $‰ˆˆ2Ø�Š�B˜˜Q™ ˜
Ñ#Ô#Ð#Ð#Ý˜3‘”ð qð q‰ˆˆ2Ø�Š˜"˜.�B�B¨c°A¸±EÀÀ¸1¸1ÐTUÐYZÐ]`Ô]eÐfgÔ]hÑYhÐmnÑXnÑTnÐ3oÑpÔpÐpÐpÝ
Ð)¥Ð)Ð)Ð)Ñ
)€CØ	‡J‚Jˆs�O„O€OØÐÐÐàmÕSVÐmÐmÐmØGµÐGÐGÐGð"à#%§<¢<°Ñ#4Ô#4×#:Ò#:¸1Ñ#=Ô#=×#EÒ#EÈEÐ#EÑ#RÔ#Rð  UIÐehÔemð  UIð  UIð  UIØð€Dõ Ð(�cÐ(Ð(Ð(Ñ(×4Ò4°T·Y²Y¸t±_´_ÑEÔEÐEÝ	ˆ#�J„J€J€J€Jr*   Ú__main__)r   r   r"   )*Ú__doc__ÚsysÚpathlibr   Ú
matplotlibÚuseÚmatplotlib.pyplotÚpyplotrg   Únumpyr2   rº   Úmpl_toolkits.mplot3d.art3dr   ÚpathÚinsertÚstrÚ__file__ÚparentrÁ   Úparts_reportr   r   r   r	   r
   r   Úmodulesr¿   r½   r6   Úargvr¾   Úarrayr9   r:   re   rQ   ri   r{   rö   Ú__name__rŠ   r*   r(   ú<module>r     sê  ððð ð €
€
€
Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €
„ˆuÑ Ô Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à „‡‚��3�3�t�t˜H‘~”~Ô,Ñ-Ô-Ñ .Ô .Ð .Ø „‡‚�Ð2Ñ 3Ô 3Ð 3Ø 
€
€
€
Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à	„k�,Ô€ØiÐiÐiØoÐoÐoðqð q€à�S˜œ‘]”] QÒ&Ð&€c„hˆq„k€k¨E€ØˆŒÐ!Ð!Ð!Ñ"Ô" R¤Y§^¢^Ð4DÐ4DÐ4DÑ%EÔ%EÑE€ðBð Bð Bð Bð  €ðkð kð kð kð">ð >ð >ðB ˆzÒÐØ€D�F„F€F€F€Fð Ðr*   