U
    Ùf=  ã                   @   sÜ  d dl Z d dlmZmZ d dlmZmZ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dZdd	„ Zd
d„ Zdd„ Zdd„ Zej d¡dd„ ƒZdd„ Z ej !ddddddg¡dd„ ƒZ"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d-ej'd/fg¡d0d1„ ƒƒƒZ(d2d3„ Z)ej !d4d5d6dej*d7ed8g¡d9d:„ ƒZ+ej !d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMg¡dNdO„ ƒZ,dPdQ„ Z-dRdS„ Z.dTdU„ Z/dS )Vé    N)ÚpathÚ
transforms)ÚFigureCanvasBaseÚKeyEventÚLocationEventÚMouseButtonÚ
MouseEventÚNavigationToolbar2ÚRendererBase)ÚRubberbandBase©ÚFigure)Úneeds_pgf_xelatexzƒ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.c               	      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 © )r   ÚPathZunit_regular_polygon©Ú.0Úir   r   úJ/tmp/pip-target-lpfmz8o1/lib/python/matplotlib/tests/test_backend_bases.pyÚ
<listcomp>   s     z&test_uses_per_path.<locals>.<listcomp>é   é   c                    s   g | ]}ˆ   |¡ ¡  ¡ ‘qS r   )ÚrotateZ
get_matrixÚcopyr   ©Úidr   r   r      s     é   é   é   )é
   é   Ú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št‚d S )Nc                 S   s   g | ]\}}}}}|‘qS r   r   )r   ZxoZyoZpath_idZgc0ZrgbFacer   r   r   r   $   s     z5test_uses_per_path.<locals>.check.<locals>.<listcomp>FÚscreen)Z	minlengthr   )r
   ÚlistZ_iter_collection_raw_pathsZnew_gcZ_iter_collectionÚrangeÚlenr   ZAffineDeltaTransformZ_iter_collection_uses_per_pathÚnpZbincountÚsetÚissubsetÚAssertionError)Zmaster_transformÚpathsZall_transformsÚoffsetsÚ
facecolorsÚ
edgecolorsÚrbZ	raw_pathsÚgcZidsZusesÚseenr   r   r   Úcheck   s@      ÿ 
      üÿ    ÿz!test_uses_per_path.<locals>.checkr   )r   ZAffine2Dr%   r'   ÚarangeÚreshapeÚshape)r+   Ztforms_matricesr,   r-   r.   r2   Únr   r   r   Útest_uses_per_path   s*     ÿr7   c                   C   s   t tƒ jtƒst‚d S ©N)Ú
isinstancer   Úfigurer   r*   r   r   r   r   Útest_canvas_ctor>   s    r;   c                   C   s   t  ¡ j ¡ dkst‚d S )Nz	image.png)Úpltr:   ÚcanvasZget_default_filenamer*   r   r   r   r   Útest_get_default_filenameB   s    r>   c                  C   s.   t  ¡ } t| ƒ}t  | ¡ t  | j¡r*t‚d S r8   )r<   r:   r   ÚcloseZfignum_existsÚnumberr*   )Úfigr=   r   r   r   Útest_canvas_changeF   s    
rB   Zpdfc              	   C   s¤   t  ¡  |  dd¡ t t¡4}t  ¡  t|ƒdks8t‚dt	|d j
ƒksNt‚W 5 Q R X t t¡8}t  ¡  ¡  t|ƒdks€t‚dt	|d j
ƒks–t‚W 5 Q R X d S )NZDISPLAYz:999r   z=Matplotlib is currently using pdf, which is a non-GUI backendr   )r<   ÚsubplotsZsetenvÚpytestÚwarnsÚUserWarningÚshowr&   r*   ÚstrÚmessageÚgcf)ZmonkeypatchZrecr   r   r   Útest_non_gui_warningO   s    ÿÿrK   c                  C   sD   t  ¡ \} }| j |¡ | jj|ks(t‚|  ¡  | jjd ks@t‚d S r8   )r<   rC   r=   Z
grab_mouseZmouse_grabberr*   Úclear)rA   Úaxr   r   r   Útest_grab_clearb   s
    rN   zx, y)é*   é   )NrO   )NN)éÈ   gq=
×£ Y@)g     ¸i@g       @c                 C   sþ   t  ¡ \}}t|ƒ}td|| |ƒ}| d kr:|jd ks\t‚n"|jt| ƒksLt‚t|jtƒs\t‚|d krt|jd ks–t‚n"|jt|ƒks†t‚t|jtƒs–t‚| d k	rú|d k	rút	 
d | | ¡| |¡¡| | |¡¡sÒt‚dd„  |_|_t	 
d| | |¡¡sút‚d S )NZ
test_eventz
x={} +y={}c                 S   s   dS )NÚfoor   )Úxr   r   r   Ú<lambda>   ó    z.test_location_event_position.<locals>.<lambda>zx=foo +y=foo)r<   rC   r   r   rS   r*   Úintr9   ÚyÚreÚmatchÚformatZformat_xdataZformat_ydataZformat_coordZ	fmt_xdataZ	fmt_ydata)rS   rW   rA   rM   r=   Úeventr   r   r   Útest_location_event_positionl   s$    
þr\   c                     s¢   t  ¡ } | jddddddd | j ¡  g ‰ ‡ fdd„}| j d|¡ td	| jd
ƒ ¡  td| jf| j	 
d¡tjfžŽ  ¡  td| jd
ƒ ¡  tˆ ƒdksžt‚d S )Nç      à?ZhelloÚcenterT)ZhaÚvaZpickerc                    s   | j jdkst‚ˆ  | ¡ d S )NÚa)Z
mouseeventÚkeyr*   Úappend)r[   ©Zpicksr   r   Úhandle_pick‹   s    ztest_pick.<locals>.handle_pickZ
pick_eventZkey_press_eventr`   Úbutton_press_event©r]   r]   Zkey_release_eventr   )r<   r:   Útextr=   ÚdrawZmpl_connectr   Z_processr   ZtransFigureÚ	transformr   ÚLEFTr&   r*   )rA   rd   r   rc   r   Ú	test_pick…   s    


þrk   c                  C   sÒ  t  ¡ \} }|jdd | ¡ d ks(t‚t| jƒ}| ¡  | ¡ dksJt‚| ¡ }| 	¡ }d}d}|j
 |¡ t¡}|j
 |¡ t¡}td| jf|tjfžŽ }	| jj |	j|	¡ td| jf|tjfžŽ }
| jj |
j|
¡ | ¡ |	j|
jfksòt‚| 	¡ |	j|
jfkst‚td| jf|tjfžŽ }	| jj |	j|	¡ td| jf|tjfžŽ }
| jj |
j|
¡ | ¡ tj|dd	d
ks~t‚| 	¡ tj|dd	d
ksœt‚| ¡  | ¡ d ks¶t‚| ¡ sÊ| ¡ rÎt‚d S )NZlogit)ZxscaleÚZOOM)gíµ ÷Æ°>çš™™™™™¹?)gwJëÿï?çš™™™™™é?re   Úbutton_release_eventr   g»½×Ùß|Û=)ÚrelÚabs)r<   rC   r(   Úget_navigate_moder*   r	   r=   ÚzoomÚget_xlimÚget_ylimÚ	transDatari   ÚastyperV   r   r   rj   Ú	callbacksÚprocessÚnameZxdataZydataÚRIGHTrD   ÚapproxZget_autoscalex_onZget_autoscaley_on)rA   rM   ÚtbZxlim0Zylim0Úd0Úd1Ús0Ús1Ústart_eventÚ
stop_eventr   r   r   Útest_interactive_zoom˜   sf    
 ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿr„   c                  C   sj   t  ¡ \} }| ddgddg¡ | j |¡ t| jƒ}| ¡  | ¡ d ksNt‚| 	¡  | ¡ d ksft‚d S )Nr   r   )
r<   rC   Úplotr=   Z
widgetlockr	   rs   rr   r*   Úpan)rA   rM   r}   r   r   r   Útest_widgetlock_zoompanÈ   s    
r‡   Ú	plot_funcZimshowÚcontourfÚorientationÚverticalÚ
horizontalztool,button,expectedrs   ©é   é   )iìÿÿÿé   r†   )éþÿÿÿé   )g…ëQ¸…÷?g…ëQ¸@c                 C   s†  t  ¡ \}}t d¡ d¡}d\}}	t|| ƒ|||	d}
|j|
||d}| dkrb|j ¡ r^t	‚d S |j ¡ spt	‚d\}}|df}|df}|d	kr¬|d d d
… }|d d d
… }|jj
 |¡ t¡}|jj
 |¡ t¡}td|jf||fžŽ }td|jf||fžŽ }t|jƒ}|dkr<| ¡  | |¡ | |¡ | |¡ n&| ¡  | |¡ | |¡ | |¡ |j|jftj|ddks‚t	‚d S )Né   )rŽ   r   )r   r   )ÚvminÚvmax)rM   rŠ   r‰   r   r]   r‹   éÿÿÿÿre   ro   rs   g333333Ã?©rq   )r<   rC   r'   r3   r4   ÚgetattrZcolorbarrM   Úget_navigater*   rv   ri   rw   rV   r   r=   r	   rs   Z
press_zoomZ	drag_zoomZrelease_zoomr†   Ú	press_panÚdrag_panÚrelease_panr”   r•   rD   r|   )rˆ   rŠ   ZtoolÚbuttonÚexpectedrA   rM   ÚdataZvmin0Zvmax0ZcollÚcbr”   r•   r~   r   r€   r   r‚   rƒ   r}   r   r   r   Útest_interactive_colorbarÓ   sT     ÿ ÿ ÿ ÿ






r¡   c               	   C   s„   t jttd dtjd< W 5 Q R X t ¡ } |  ¡ d ks<t‚| j	j
jj d¡ |  ¡ dks^t‚| j	j
jj d¡ |  ¡ dks€t‚d S )N©rY   ÚtoolmanagerÚtoolbarrs   rl   r†   ZPAN)rD   rE   rF   Ú_EXPECTED_WARNING_TOOLMANAGERr<   ÚrcParamsZgcarr   r*   r:   r=   Úmanagerr£   Útrigger_tool)rM   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¾t‚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   ©Zget_position©r   rM   r   r   r   r   0  s     ztest_draw.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   r­   r®   r   r   r   r   5  s     c                 S   s   g | ]}|  ¡ ‘qS r   r­   r®   r   r   r   r   6  s     g{®Gázt?)Zatol)Úmatplotlib.figurer   Zmatplotlib.backends.backend_aggr¬   rD   ZimportorskiprC   Zravelr=   rh   Úzipr'   Zallcloser*   Ú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µ   z&key,mouseend,expectedxlim,expectedylim)N©çš™™™™™É?r·   ©gìQ¸…ë@g{®Gáú(@©gš™™™™™@gffffff'@)N)r·   r]   r¸   ©r   é	   )N)r]   r·   rº   r¹   )Nrf   rº   rº   )N©rn   ç      Ð?©gÃõ(\ÂÀg…ëQ¸@©g      @g     €&@)N©r·   r½   r¸   r¿   )N)rn   ç333333ë?r¾   ©g…ëQ¸	Àgq=
×£p@)N©r·   rÁ   r¸   rÂ   )Úshift)r·   çš™™™™™Ù?r¸   rº   )rÄ   ©rÅ   r·   rº   r¹   )rÄ   rÀ   r¸   r¸   )rÄ   r¼   r¾   )gÃõ(\Â@gq=
×£ð(@)rÄ   )rn   gÍÌÌÌÌÌì?©g¤p=
×£Àg¤p=
×£@rÇ   )rÄ   rÃ   r¸   )gìQ¸…ëÀg
×£p=
@)rS   )r·   rm   r¸   rº   )rW   )rm   r·   rº   r¹   )Úcontrolr¶   r¸   r¸   )rÈ   rÆ   ©gÃõ(\Â@gq=
×£p'@rÉ   c                 C   s  t  ¡ \}}| t d¡¡ | ¡ s(t‚| d¡ d}|j 	|¡ 
t¡}|j 	|¡ 
t¡}td|jf|žtj| dœŽ}	td|jf|žtj| dœŽ}
t|jƒ}| ¡  | |	¡ | |
¡ | |
¡ t| ¡ ƒtj|ddksàt‚t| ¡ ƒtj|ddksþt‚d S )	Nr   Úequalrf   re   )r   ra   ro   g{®Gáz”?r—   )r<   rC   r…   r'   r3   r™   r*   Z
set_aspectrv   ri   rw   rV   r   r=   r   rj   r	   r†   rš   r›   rœ   Útuplert   rD   r|   ru   )ra   ZmouseendZexpectedxlimZexpectedylimrA   rM   Z
mousestartZsstartÚsendr‚   rƒ   r}   r   r   r   Útest_interactive_pan?  s@    
 ÿÿþ ÿÿþ



rÍ   c               	   C   s”   t jttd dtjd< W 5 Q R X t ¡ } t| jj	j
jƒ}d| jj	j
jksPt‚| jj	j
 d¡ t| jj	j
jƒ|d ks|t‚d| jj	j
jkst‚d S )Nr¢   r£   r¤   Úforwardr   )rD   rE   rF   r¥   r<   r¦   rJ   r&   r=   r§   r£   Ztoolsr*   Zremove_tool)rA   Zinitial_lenr   r   r   Útest_toolmanager_removeu  s    rÏ   c               	   C   sæ   t jttd dtjd< W 5 Q R X t ¡ } | jjj	 
d¡}t|tƒsJt‚| jjj	 
|¡|ksbt‚t jtdd | jjj	 
d¡d ksŠt‚W 5 Q R X | jjj	j
dddd ks°t‚t jtdd | jjj	 d¡d ksØt‚W 5 Q R X d S )	Nr¢   r£   r¤   Ú
rubberbandz'ToolManager does not control tool 'foo'rR   F)Úwarn)rD   rE   rF   r¥   r<   r¦   rJ   r=   r§   r£   Zget_toolr9   r   r*   r¨   )rA   rÐ   r   r   r   Útest_toolmanager_get_tool€  s    ÿ"ÿrÒ   c               	   C   sº   t jttd dtjd< W 5 Q R X t ¡ } d| jjj	 
d¡ksDt‚t jtdd | jjj	 dd¡ W 5 Q R X | jjj	 
d¡dgksŠt‚t jtdd | jjj	 d	d¡ W 5 Q R X d S )
Nr¢   r£   r¤   ÚvrÎ   z"Key c changed from back to forwardÚcz'foo' not in ToolsrR   )rD   rE   rF   r¥   r<   r¦   rJ   r=   r§   r£   Zget_tool_keymapr*   Zupdate_keymapZraisesÚKeyError)rA   r   r   r   Útest_toolmanager_update_keymap‘  s    ÿrÖ   )0rX   Z
matplotlibr   r   Zmatplotlib.backend_basesr   r   r   r   r   r	   r
   Zmatplotlib.backend_toolsr   r¯   r   Zmatplotlib.testing._markersr   Zmatplotlib.pyplotZpyplotr<   Únumpyr'   rD   r¥   r7   r;   r>   rB   Úmarkrª   rK   rN   Zparametrizer\   rk   r„   r‡   rj   r{   r¡   r©   Úparamrµ   rÍ   rÏ   rÒ   rÖ   r   r   r   r   Ú<module>   sŠ   $ÿ(	


 ÿ
0



ýÿ6 ÿÿ
 ïþ
!