a
    ëÝEbÂ,  ã                
   @   s�  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZejjedƒ dd�Zd	d
„ Zdd„ Z dd„ Z!dd„ Z"ej #d¡dd„ ƒZ$ej %dg d¢¡dd„ ƒZ&dd„ Z'dd„ Z(ej %dddg¡ej %dd d!g¡ej %d"d#ej)d$fd#ej*d%fd&ej)d'fg¡d(d)„ ƒƒƒZ+d*d+„ Z,ej %d,d-d.dej-d/ed0�g¡d1d2„ ƒZ.dS )3é    N)Ú_check_for_pgf)ÚFigureCanvasBaseÚLocationEventÚMouseButtonÚ
MouseEventÚNavigationToolbar2ÚRendererBase)ÚToolZoomÚToolPanÚRubberbandBaseÚToolViewsPositionsÚ_views_positions©ÚFigureZxelatexzxelatex + pgf is required)Úreasonc               	      sR  t  ¡ ‰ dd„ tddƒD ƒ} ‡ fdd„tddƒD ƒ}t d¡ d	¡}d
dg}d
dg}dd„ }|ˆ | ||||ƒ |ˆ | dd… ||||ƒ |ˆ g ||||ƒ |ˆ | |dd… |||ƒ |ˆ | g |||ƒ td|jd ƒD ]&}|ˆ | ||d|…d d …f ||ƒ qÖ|ˆ | ||g |ƒ |ˆ | |||g ƒ |ˆ | ||g g ƒ |ˆ | |||dd… |ƒ d S )Nc                 S   s   g | ]}t j |¡‘qS © )ÚpathÚPathZunit_regular_polygon©Ú.0Úir   r   úc/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/matplotlib/tests/test_backend_bases.pyÚ
<listcomp>   ó    z&test_uses_per_path.<locals>.<listcomp>é   é   c                    s   g | ]}ˆ   |¡ ¡  ¡ ‘qS r   )ÚrotateZ
get_matrixÚcopyr   ©Úidr   r   r      r   é   é   é   )é
   é   ÚredÚgreenc                 S   s¢   t ƒ }t| | ||¡ƒ}| ¡ }dd„ | || |tt|ƒƒ|t | ¡||g g dgg d¡D ƒ}	| 	|||||¡}
|ržt
j|	t|ƒd�}t|ƒ |
d |
g¡sžJ ‚d S )Nc                 S   s   g | ]\}}}}}|‘qS r   r   )r   ZxoZyoZpath_idZgc0ZrgbFacer   r   r   r   #   r   z5test_uses_per_path.<locals>.check.<locals>.<listcomp>FÚscreen)Z	minlengthr    )r   ÚlistZ_iter_collection_raw_pathsZnew_gcZ_iter_collectionÚrangeÚlenÚ
transformsZAffineDeltaTransformZ_iter_collection_uses_per_pathÚnpZbincountÚsetÚissubset)Zmaster_transformÚpathsZall_transformsÚoffsetsÚ
facecolorsÚ
edgecolorsÚrbZ	raw_pathsÚgcÚidsZusesÚseenr   r   r   Úcheck   s(    ÿûÿ
ÿz!test_uses_per_path.<locals>.checkr   )r+   ZAffine2Dr)   r,   ÚarangeÚreshapeÚshape)r/   Ztforms_matricesr0   r1   r2   r7   Únr   r   r   Útest_uses_per_path   s(    ÿr<   c                   C   s   t tƒ jtƒsJ ‚d S ©N)Ú
isinstancer   Úfigurer   r   r   r   r   Útest_canvas_ctor>   s    r@   c                   C   s   t  ¡ j ¡ dksJ ‚d S )Nz	image.png)Úpltr?   ÚcanvasZget_default_filenamer   r   r   r   Útest_get_default_filenameB   s    rC   c                  C   s.   t  ¡ } t| ƒ}t  | ¡ t  | j¡r*J ‚d S r=   )rA   r?   r   ÚcloseZfignum_existsÚnumber)ÚfigrB   r   r   r   Útest_canvas_changeF   s    
rG   Zpdfc                 C   sÌ   t  ¡  |  dd¡ t t¡�>}t  ¡  t|ƒdks8J ‚dt|d j	ƒv sNJ ‚W d   ƒ n1 sb0    Y  t t¡�B}t  
¡  ¡  t|ƒdks”J ‚dt|d j	ƒv sªJ ‚W d   ƒ n1 s¾0    Y  d S )NZDISPLAYz:999r    z=Matplotlib is currently using pdf, which is a non-GUI backendr   )rA   ÚsubplotsZsetenvÚpytestÚwarnsÚUserWarningÚshowr*   ÚstrÚmessageZgcf)ZmonkeypatchZrecr   r   r   Útest_non_gui_warningO   s    ÿ&ÿrO   zx, y))é*   é   )NrP   )NN)éÈ   gq=
×£ Y@)g     ¸i@g       @c                 C   sþ   t  ¡ \}}t|ƒ}td|| |ƒ}| d u r:|jd u s\J ‚n"|jt| ƒksLJ ‚t|jtƒs\J ‚|d u rt|jd u s–J ‚n"|jt|ƒks†J ‚t|jtƒs–J ‚| d urú|d urút 	d 
| | ¡| |¡¡| | |¡¡sÒJ ‚dd„  |_|_t 	d| | |¡¡súJ ‚d S )NZ
test_eventz
x={} +y={}c                 S   s   dS )NZfoor   )Úxr   r   r   Ú<lambda>w   r   z.test_location_event_position.<locals>.<lambda>zx=foo +y=foo)rA   rH   r   r   rS   Úintr>   ÚyÚreÚmatchÚformatZformat_xdataZformat_ydataZformat_coordZ	fmt_xdataZ	fmt_ydata)rS   rV   rF   ÚaxrB   Úeventr   r   r   Útest_location_event_positionb   s$    
þr\   c                     sŠ   t  ¡ } | jddddddd� | j ¡  g ‰ | j d‡ fdd„¡ td	| jg| j d
¡¢t	j
‘R Ž }| jj |j|¡ tˆ ƒdks†J ‚d S )Nç      à?ZhelloÚcenterT)ZhaÚvaZpickerZ
pick_eventc                    s
   ˆ   | ¡S r=   )Úappend)r[   ©Zpicksr   r   rT   €   r   ztest_pick.<locals>.<lambda>Úbutton_press_event)r]   r]   r    )rA   r?   ÚtextrB   ÚdrawZmpl_connectr   ZtransFigureÚ	transformr   ÚLEFTÚ	callbacksÚprocessÚnamer*   )rF   Ústart_eventr   ra   r   Ú	test_pick{   s    
ÿ
ÿþrk   c                  C   sÚ  t  ¡ \} }|jdd� | ¡ d u s(J ‚t| jƒ}| ¡  | ¡ dksJJ ‚| ¡ }| ¡ }d}d}|j	 
|¡ t¡}|j	 
|¡ t¡}td| jg|¢tj‘R Ž }	| jj |	j|	¡ td| jg|¢tj‘R Ž }
| jj |
j|
¡ | ¡ |	j|
jfksöJ ‚| ¡ |	j|
jfk�sJ ‚td| jg|¢tj‘R Ž }	| jj |	j|	¡ td| jg|¢tj‘R Ž }
| jj |
j|
¡ | ¡ tj|dd	d
�k�s†J ‚| ¡ tj|dd	d
�k�s¤J ‚| ¡  | ¡ d u �s¾J ‚| ¡ �sÒ| ¡ �rÖJ ‚d S )NZlogit)ZxscaleÚZOOM)g�íµ ÷Æ°>gš™™™™™¹?)gwJëÿï?gš™™™™™é?rb   Úbutton_release_eventr   g»½×Ùß|Û=)ÚrelÚabs)rA   rH   r-   Úget_navigate_moder   rB   ÚzoomZget_xlimZget_ylimÚ	transDatare   ÚastyperU   r   r   rf   rg   rh   ri   ZxdataZydataÚRIGHTrI   ÚapproxZget_autoscalex_onZget_autoscaley_on)rF   rZ   ÚtbZxlim0Zylim0Úd0Úd1Ús0Ús1rj   Ú
stop_eventr   r   r   Útest_interactive_zoomˆ   sf    
ÿÿÿÿÿÿÿÿÿÿÿÿr|   Ú	plot_funcZimshowÚcontourfÚorientationÚverticalÚ
horizontalztool,button,expectedrq   ©é   é   )iìÿÿÿé   Úpan)éþÿÿÿé   c                 C   sŠ  t  ¡ \}}t d¡ d¡}d\}}	t|| ƒ|||	d�}
|j|
||d�}| dkrb|j ¡ r^J ‚d S |j ¡ spJ ‚d\}}|df}|df}|d	kr¬|d d d
… }|d d d
… }|jj	 
|¡ t¡}|jj	 
|¡ t¡}td|jg|¢|‘R Ž }td|jg|¢|‘R Ž }t|jƒ}|dk�r@| ¡  | |¡ | |¡ | |¡ n&| ¡  | |¡ | |¡ | |¡ |j|jftj|dd�k�s†J ‚d S )Né   )rƒ   r   )r   r#   )ÚvminÚvmax)rZ   r   r~   r‚   r]   r€   éÿÿÿÿrb   rm   rq   g333333Ã?)ro   )rA   rH   r,   r8   r9   ÚgetattrZcolorbarrZ   Zget_navigaterr   re   rs   rU   r   rB   r   rq   Z
press_zoomZ	drag_zoomZrelease_zoomr†   Z	press_panZdrag_panZrelease_panrŠ   r‹   rI   ru   )r}   r   ÚtoolÚbuttonÚexpectedrF   rZ   ÚdataZvmin0Zvmax0ZcollÚcbrŠ   r‹   rw   rx   ry   rz   rj   r{   rv   r   r   r   Útest_interactive_colorbar¸   sT    ÿÿÿÿÿÿ






r“   c                  C   sô   d} t jt| d�� dtjd< W d   ƒ n1 s20    Y  t ¡ }| ¡ d u sTJ ‚|jjj	j
jdtd� |jjj	j
jdtd� |jjj	j
jttd� |jjj	j
jdtd� |jjj	j
 d¡ | ¡ d	ksÎJ ‚|jjj	j
 d¡ | ¡ d
ksðJ ‚d S )NzƒTreat the new Tool classes introduced in v[0-9]*.[0-9]* as experimental for now; the API and rcParam may change in future versions.)rX   ÚtoolmanagerZtoolbarrq   )ri   rŽ   r†   Z
rubberbandrl   ZPAN)rI   rJ   rK   rA   ZrcParamsZgcarp   r?   rB   Úmanagerr”   Zadd_toolr	   r
   r   r   r   Ztrigger_tool)Zexpected_warning_regexrZ   r   r   r   Útest_toolbar_zoompanô   s,    ÿ(ÿÿÿÿr–   ÚbackendÚsvgZpsZpgf)Zmarksc                 C   s  ddl m} ddlm} t d| › �¡}|j}|dd�}||ƒ | dd¡}|dd�}||ƒ | dd¡}dd	„ | ¡ D ƒ}	|j 	¡  |j 	¡  d
d	„ | ¡ D ƒ}
dd	„ | ¡ D ƒ}t
|	|
ƒD ]\}}tj||dd�r¾J ‚q¾t
||
ƒD ]\}}tjj||dd� qæd S )Nr   r   )ÚFigureCanvaszmatplotlib.backends.backend_T)Zconstrained_layoutr$   c                 S   s   g | ]}|  ¡ ‘qS r   ©Úget_position©r   rZ   r   r   r   r     r   ztest_draw.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   rš   rœ   r   r   r   r   $  r   c                 S   s   g | ]}|  ¡ ‘qS r   rš   rœ   r   r   r   r   %  r   g{®Gázt?)Zatol)Úmatplotlib.figurer   Zmatplotlib.backends.backend_aggr™   rI   ZimportorskiprH   ZravelrB   rd   Úzipr,   ZallcloseÚtestingZassert_allclose)r—   r   r™   Ztest_backendZ
TestCanvasZfig_testZ	axes_testZfig_aggZaxes_aggZinit_posZlayed_out_pos_testZlayed_out_pos_aggÚinitZplacedÚrefÚtestr   r   r   Ú	test_draw  s*    ÿ



r£   )/rW   Zmatplotlib.testingr   Zmatplotlib.backend_basesr   r   r   r   r   r   Zmatplotlib.backend_toolsr	   r
   r   r   r   r�   r   Zmatplotlib.pyplotZpyplotrA   Zmatplotlib.transformsr+   Zmatplotlib.pathr   Únumpyr,   rI   ÚmarkZskipifZneeds_xelatexr<   r@   rC   rG   r—   rO   Zparametrizer\   rk   r|   rf   rt   r“   r–   Úparamr£   r   r   r   r   Ú<module>   sL    ÿ)	

ÿ
0


þÿ6ÿ