a
    >¥°fgX  ã                   @   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g d¢¡dd„ ƒZ"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¡d.d/„ ƒƒƒZ)d0d1„ Z*d2d3„ Z+ej !d4d5d6dej,d7ed8g¡d9d:„ ƒZ-ej !d;g d<¢¡d=d>„ ƒZ.d?d@„ Z/dAdB„ Z0dCdD„ Z1ej !dEd(d+g¡ej !dFej'ej(g¡ej !dGdHdIg¡ej !dJg dK¢¡ej !dLdMdNg¡dOdP„ ƒƒƒƒƒZ2dS )Qé    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   úq/var/www/staging/api/virtual_environments/venv/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Úlenr   ZAffineDeltaTransformZ_iter_collection_uses_per_pathÚnpZbincountÚsetÚissubset)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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    r>   c                  C   s.   t  ¡ } t| ƒ}t  | ¡ t  | j¡r*J ‚d S r8   )r<   r:   r   ÚcloseZfignum_existsÚnumber)Úfigr=   r   r   r   Útest_canvas_changeF   s    
rB   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<FigureCanvasPdf is non-interactive, and thus cannot be shownr   )r<   ÚsubplotsZsetenvÚpytestÚwarnsÚUserWarningÚshowr'   ÚstrÚmessageÚgcf)ZmonkeypatchZrecr   r   r   Útest_non_gui_warningO   s    ÿ&ÿrK   c                  C   sD   t  ¡ \} }| j |¡ | jj|ks(J ‚|  ¡  | jjd u s@J ‚d S r8   )r<   rC   r=   Z
grab_mouseZmouse_grabberÚclear©rA   Úaxr   r   r   Útest_grab_clearb   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ø| | |¡d| 	| ¡› d| 
|¡› dksÔJ ‚dd„  |_|_| | |¡dksøJ ‚d S )NZ
test_eventz
(x, y) = (z, ú)c                 S   s   dS )NÚfoor   )Úxr   r   r   Ú<lambda>€   r   z.test_location_event_position.<locals>.<lambda>z(x, y) = (foo, foo))r<   rC   r   r   rU   Úintr9   ÚyÚformat_coordZformat_xdataZformat_ydataZ	fmt_xdataZ	fmt_ydata)rU   rX   rA   rN   r=   Úeventr   r   r   Útest_location_event_positionl   s"    
ÿr[   c                  C   sz   t  ¡ \} }|jddd | dd¡dks.J ‚| ¡ jdd | dd¡dksRJ ‚| ¡ jd	d
 | dd¡dksvJ ‚d S )N©r   r    )r   r   )ÚxlimÚylimg      @z(x, y) = (5.00, 5.00))r   é(   )r^   z$(x, y) = (5.00, 5.00) | (5.00, 10.0))r   r   )r]   z3(x, y) = (5.00, 5.00) | (5.00, 10.0) | (2.50, 5.00))r<   rC   r)   rY   ÚtwinxZtwinyrM   r   r   r   Ú!test_location_event_position_twin„   s    
ÿra   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g| j	 
d¡¢tj‘R Ž  ¡  td| jd
ƒ ¡  tˆ ƒdks J ‚d S )Nç      à?ZhelloÚcenterT)ZhaÚvaZpickerc                    s   | j jdksJ ‚ˆ  | ¡ d S )NÚa)Z
mouseeventÚkeyÚappend)rZ   ©Zpicksr   r   Úhandle_pick•   s    ztest_pick.<locals>.handle_pickZ
pick_eventÚkey_press_eventre   Úbutton_press_event©rb   rb   Zkey_release_eventr   )r<   r:   Útextr=   ÚdrawZmpl_connectr   Ú_processr   ZtransFigureÚ	transformr   ÚLEFTr'   )rA   ri   r   rh   r   Ú	test_pick   s    


ÿþrr   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wJëÿï?çš™™™™™é?rk   Úbutton_release_eventr   g»½×Ùß|Û=)ÚrelÚabs)r<   rC   r)   Úget_navigate_moder	   r=   ÚzoomÚget_xlimÚget_ylimÚ	transDatarp   ÚastyperW   r   r   rq   Ú	callbacksÚprocessÚnameZxdataZydataÚRIGHTrD   ÚapproxZget_autoscalex_onZget_autoscaley_on)rA   rN   Ú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 u sNJ ‚| ¡  | ¡ d u sfJ ‚d S )Nr   r   )	r<   rC   Úplotr=   Z
widgetlockr	   rz   ry   Úpan)rA   rN   r„   r   r   r   Útest_widgetlock_zoompanÒ   s    
rŽ   Ú	plot_funcZimshowÚcontourfÚorientationÚverticalÚ
horizontalztool,button,expectedrz   ©é   é   )iìÿÿÿé   r   )éþÿÿÿé   )g…ëQ¸…÷?g…ëQ¸@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\   )ÚvminÚvmax)rN   r‘   r   r”   rb   r’   éÿÿÿÿrk   rv   rz   ç333333Ã?©rx   )r<   rC   r(   r3   r4   ÚgetattrZcolorbarrN   Úget_navigater}   rp   r~   rW   r   r=   r	   rz   Ú
press_zoomÚ	drag_zoomÚrelease_zoomr   Ú	press_panÚdrag_panÚrelease_panr›   rœ   rD   rƒ   )r   r‘   ÚtoolÚbuttonÚexpectedrA   rN   Ú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 d   ƒ n1 s.0    Y  t ¡ } |  ¡ d u sPJ ‚| jj	j
j d¡ |  ¡ dksrJ ‚| jj	j
j d¡ |  ¡ dks”J ‚d S )N©ÚmatchÚtoolmanagerÚtoolbarrz   rs   r   ZPAN)rD   rE   rF   Ú_EXPECTED_WARNING_TOOLMANAGERr<   ÚrcParamsZgcary   r:   r=   Úmanagerr°   Útrigger_tool)rN   r   r   r   Útest_toolbar_zoompan  s    (r¶   c                  C   s¬  t  ¡ \} }| tdƒtdƒ¡ t| jƒ}| ¡  td| jdddƒ ¡  td| jdddƒ ¡  | 	¡ | 
¡   krzdks€n J ‚td| jdddƒ ¡  td| jdddƒ ¡  | 	¡ | 
¡   krÈdksÎn J ‚|j dd	g¡\}}td
| jg|¢tj‘R Ž  ¡  td| jg|¢tj‘R Ž  ¡  td| jdƒ ¡  | 	¡ | 
¡   krPdksVn J ‚td| jdddƒ ¡  td| jdddƒ ¡  | 	¡ | 
¡   kr¢dks¨n J ‚d S )Né   rj   Úkéd   Úl)r   r    r\   )r!   r!   )r   r   rk   rv   Úh)r<   rC   rŒ   r&   r	   r=   rz   r   ro   r{   r|   r}   rp   r   r   rq   )rA   rN   r„   ÚstartÚstopr   r   r   Ú$test_toolbar_home_restores_autoscale%  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   ©Zget_position©r   rN   r   r   r   r   V  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Á   Ú	importlibÚimport_modulerC   Zravelr=   rn   Ú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_drawC  s&    



rÌ   z&key,mouseend,expectedxlim,expectedylim))N©çš™™™™™É?rÎ   ©gìQ¸…ë@g{®Gáú(@©gš™™™™™@gffffff'@)N)rÎ   rb   rÏ   ©r   é	   )N)rb   rÎ   rÑ   rÐ   )Nrl   rÑ   rÑ   )N©ru   ç      Ð?©gÃõ(\ÂÀg…ëQ¸@©g      @g     €&@)N©rÎ   rÔ   rÏ   rÖ   )N)ru   ç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Û   )ru   gÍÌÌÌÌÌì?©g¤p=
×£Àg¤p=
×£@rÞ   )rÛ   rÚ   rÏ   )gìQ¸…ëÀg
×£p=
@)rU   )rÎ   rt   rÏ   rÑ   )rX   )rt   rÎ   rÑ   rÐ   )ÚcontrolrÍ   rÏ   rÏ   )rß   rÝ   ©gÃõ(\Â@gq=
×£p'@rà   c                 C   s  t  ¡ \}}| t d¡¡ | ¡ s(J ‚| d¡ d}|j |¡ 	t
¡}|j |¡ 	t
¡}td|jg|¢R tj| dœŽ}	td|jg|¢R tj| dœŽ}
t|jƒ}| ¡  | |	¡ | |
¡ | |
¡ t| ¡ ƒtj|ddksäJ ‚t| ¡ ƒtj|ddksJ ‚d S )	Nr    Úequalrl   rk   )r©   rf   rv   g{®Gáz”?rŸ   )r<   rC   rŒ   r(   r3   r¡   Z
set_aspectr}   rp   r~   rW   r   r=   r   rq   r	   r   r¥   r¦   r§   Útupler{   rD   rƒ   r|   )rf   ZmouseendZexpectedxlimZexpectedylimrA   rN   Z
mousestartZsstartÚsendr‰   rŠ   r„   r   r   r   Útest_interactive_pane  s<    
ÿÿþÿÿþ



rä   c                  C   s¨   t jttd dtjd< W d   ƒ n1 s.0    Y  t ¡ } t| jj	j
jƒ}d| jj	j
jv sdJ ‚| jj	j
 d¡ t| jj	j
jƒ|d ksJ ‚d| jj	j
jvs¤J ‚d S )Nr®   r°   r±   Úforwardr   )rD   rE   rF   r²   r<   r³   rJ   r'   r=   r´   r°   ZtoolsZremove_tool)rA   Zinitial_lenr   r   r   Útest_toolmanager_remove›  s    (ræ   c                  C   s&  t jttd dtjd< W d   ƒ n1 s.0    Y  t ¡ } | jjj	 
d¡}t|tƒs^J ‚| jjj	 
|¡|u svJ ‚t jtdd( | jjj	 
d¡d u sžJ ‚W d   ƒ n1 s²0    Y  | jjj	j
dddd u sØJ ‚t jtdd* | jjj	 d¡d u sJ ‚W d   ƒ n1 s0    Y  d S )	Nr®   r°   r±   Ú
rubberbandz'ToolManager does not control tool 'foo'rT   F)Úwarn)rD   rE   rF   r²   r<   r³   rJ   r=   r´   r°   Zget_toolr9   r   rµ   )rA   rç   r   r   r   Útest_toolmanager_get_tool¦  s    (ÿ6ÿré   c                  C   sö   t jttd dtjd< W d   ƒ n1 s.0    Y  t ¡ } d| jjj	 
d¡v sXJ ‚t jtdd" | jjj	 dd¡ W d   ƒ n1 sŽ0    Y  | jjj	 
d¡dgks²J ‚t jtdd" | jjj	 d	d¡ W d   ƒ n1 sè0    Y  d S )
Nr®   r°   r±   Úvrå   z"Key c changed from back to forwardÚcz'foo' not in ToolsrT   )rD   rE   rF   r²   r<   r³   rJ   r=   r´   r°   Zget_tool_keymapZupdate_keymapZraisesÚKeyError)rA   r   r   r   Útest_toolmanager_update_keymap·  s    (ÿ0rí   r¨   r©   Ú	patch_visTFÚforward_nav)TFÚautoÚt_sÚtwinÚsharec                 C   sò  t  ¡ \}}|jddd}| |¡ |j |¡ |dkrv| d¡}| |¡ | |¡ | d¡}	|	 |¡ |	 |¡ n|dkrŽ| ¡ }| ¡ }	| 	d¡ |j 
d	¡ | 	d
¡ |j 
d¡ | 	d¡ |j 
d¡ |	 	d¡ |	j 
d¡ d\}
}||fD ]}|j|
Ž  |j|Ž  qöd\}}}}|j ||f¡ t¡}|j ||f¡ t¡}|j ¡  |¡\}}|j ¡  |¡\}}td|jg|¢|‘R Ž }td|jg|¢|‘R Ž }t|jƒ}| dkr&|dkrÂdnd}| g |¢|¢|¡\}}| ¡ du r| g |¢|¢|¡\}}nF| ¡ du r|
}|}n.|j ¡ sD| g |¢|¢|¡\}}n|
}|}| ¡  | |¡ | |¡ | |¡ | ¡ tj|ddksŽJ ‚| ¡ tj|ddksªJ ‚| ¡ tj|ddksÆJ ‚| ¡ tj|ddksâJ ‚| ¡ tj| ¡ ddksJ ‚| ¡ tj|	 ¡ ddksîJ ‚nÈ|j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  | ¡ du r®|j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  nj| ¡ du rÆ|
}|}nR|j ¡ s|j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  n|
}|}| %¡  | &|¡ | '|¡ | (|¡ | ¡ tj|ddksZJ ‚| ¡ tj|ddksvJ ‚| ¡ tj|ddks’J ‚| ¡ tj|ddks®J ‚| ¡ tj| ¡ ddksÎJ ‚| ¡ tj|	 ¡ ddksîJ ‚d S )NéÝ   éc   )Zzorderró   éÞ   éß   rò   Úax_t)r   r   r   rb   Ú	ax_t_twinÚrÚax_b)r   r   r   rb   Ú	ax_b_twinÚb)r\   r\   )r   r!   r   r!   rk   rv   rz   r   ÚinÚoutTFrž   rŸ   ))r<   rC   Zadd_subplotZset_forward_navigation_eventsÚpatchZset_visibleZsharexZshareyr`   Z	set_labelZset_facecolorZset_xlimZset_ylimr}   rp   r~   rW   Úinvertedr   r=   r	   Z_prepare_view_from_bboxZget_forward_navigation_eventsZget_visiblerz   r¢   r£   r¤   r{   rD   rƒ   r|   Z	start_panZ_get_pan_pointsÚTÚfloatZend_panr   r¥   r¦   r§   )r¨   r©   rî   rï   rñ   rA   rû   rø   rù   rü   Z	init_xlimZ	init_ylimrN   Zxstart_tZxstop_tZystart_tZystop_tr‡   rˆ   Zxstart_bZystart_bZxstop_bZystop_br‰   rŠ   r„   Ú	directionZxlim_tZylim_tZxlim_bZylim_br   r   r   Ú test_interactive_pan_zoom_eventsÄ  s¤    















 $  
 



 r  )3rÅ   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   rO   Zparametrizer[   ra   rr   r‹   rŽ   rq   r‚   r­   r¶   r¾   ÚparamrÌ   rä   ræ   ré   rí   r  r   r   r   r   Ú<module>   sr   $ÿ(	


ÿ
0



ýÿ6ÿÿ
þ
!