o
    “ÄŽi÷X  ã                   @   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 ||ƒ qk|ˆ | ||g |ƒ |ˆ | |||g ƒ |ˆ | ||g g ƒ |ˆ | |||dd… |ƒ d S )Nc                 S   s   g | ]}t j |¡‘qS © )r   ÚPathÚunit_regular_polygon©Ú.0Úir   r   ú_/home/jeff/fluffinator/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_bases.pyÚ
<listcomp>   s    z&test_uses_per_path.<locals>.<listcomp>é   é   c                    s   g | ]}ˆ   |¡ ¡  ¡ ‘qS r   )ÚrotateÚ
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 ƒ}	| 	|||||¡}
|rMt
j|	t|ƒd}t|ƒ |
d |
g¡sOJ ‚d S d S )Nc                 S   s   g | ]	\}}}}}|‘qS r   r   )r   ÚxoÚyoÚpath_idÚgc0ÚrgbFacer   r   r   r   $   s    z5test_uses_per_path.<locals>.check.<locals>.<listcomp>FÚscreen)Ú	minlengthr   )r
   ÚlistÚ_iter_collection_raw_pathsÚnew_gcÚ_iter_collectionÚrangeÚlenr   ÚAffineDeltaTransformÚ_iter_collection_uses_per_pathÚnpÚbincountÚsetÚissubset)Úmaster_transformÚpathsÚall_transformsÚoffsetsÚ
facecolorsÚ
edgecolorsÚrbÚ	raw_pathsÚgcÚidsÚusesÚseenr   r   r   Úcheck   s*   ÿüÿ
ÿþz!test_uses_per_path.<locals>.checkr   )r   ÚAffine2Dr0   r4   ÚarangeÚreshapeÚshape)r9   Útforms_matricesr;   r<   r=   rD   Únr   r   r   Útest_uses_per_path   s(   ÿrK   c                   C   s   t tƒ jtƒs	J ‚d S ©N)Ú
isinstancer   Úfigurer   r   r   r   r   Útest_canvas_ctor>   s   rO   c                  C   s>   t  ¡ } | j ¡ dksJ ‚| jj d¡ | j ¡ dksJ ‚d S )NzFigure_1.pngz0:1/2<3z0_1_2_3.png)ÚpltrN   ÚcanvasÚget_default_filenameÚmanagerÚset_window_title©Úfigr   r   r   Útest_get_default_filenameB   s   rW   c                  C   s.   t  ¡ } t| ƒ}t  | ¡ t  | j¡rJ ‚d S rL   )rP   rN   r   ÚcloseÚfignum_existsÚnumber)rV   rQ   r   r   r   Útest_canvas_changeI   s   
r[   Úpdfc                 C   sÎ   t  ¡  |  dd¡ t t¡}t  ¡  t|ƒdksJ ‚dt|d j	ƒv s'J ‚W d   ƒ n1 s1w   Y  t t¡"}t  
¡  ¡  t|ƒdksJJ ‚dt|d j	ƒv sUJ ‚W d   ƒ d S 1 s`w   Y  d S )NÚDISPLAYz:999r   z<FigureCanvasPdf is non-interactive, and thus cannot be shownr   )rP   ÚsubplotsÚsetenvÚpytestÚwarnsÚUserWarningÚshowr1   ÚstrÚmessageÚgcf)ÚmonkeypatchÚrecr   r   r   Útest_non_gui_warningR   s    
ÿý
ÿ"ýri   c                  C   sD   t  ¡ \} }| j |¡ | jj|ksJ ‚|  ¡  | jjd u s J ‚d S rL   )rP   r^   rQ   Ú
grab_mouseÚmouse_grabberÚclear©rV   Úaxr   r   r   Útest_grab_cleare   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s&J ‚t|jtƒs.J ‚|d u r:|jd u s9J ‚n|jt|ƒksCJ ‚t|jtƒsKJ ‚| d ur||d ur~| | |¡d| 	| ¡› d| 
|¡› dksjJ ‚dd„  |_|_| | |¡dks€J ‚d S d S d S )NÚ
test_eventz
(x, y) = (z, ú)c                 S   s   dS )NÚfoor   )Úxr   r   r   Ú<lambda>ƒ   s    z.test_location_event_position.<locals>.<lambda>z(x, y) = (foo, foo))rP   r^   r   r   rv   ÚintrM   ÚyÚformat_coordÚformat_xdataÚformat_ydataÚ	fmt_xdataÚ	fmt_ydata)rv   ry   rV   rn   rQ   Úeventr   r   r   Útest_location_event_positiono   s&   
ÿür€   c                  C   sz   t  ¡ \} }|jddd | dd¡dksJ ‚| ¡ jdd | dd¡dks)J ‚| ¡ jd	d
 | dd¡dks;J ‚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))rP   r^   r6   rz   ÚtwinxÚtwinyrm   r   r   r   Ú!test_location_event_position_twin‡   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g| j	 
d¡¢tj‘R Ž  ¡  td| jd
ƒ ¡  tˆ ƒdksPJ ‚d S )Nç      à?ÚhelloÚcenterT)ÚhaÚvaÚpickerc                    s   | j jdksJ ‚ˆ  | ¡ d S )NÚa)Ú
mouseeventÚkeyÚappend)r   ©Úpicksr   r   Úhandle_pick˜   s   ztest_pick.<locals>.handle_pickÚ
pick_eventÚkey_press_eventrŽ   Úbutton_press_event©rˆ   rˆ   Úkey_release_eventr   )rP   rN   ÚtextrQ   ÚdrawÚmpl_connectr   Ú_processr   ÚtransFigureÚ	transformr   ÚLEFTr1   )rV   r”   r   r’   r   Ú	test_pick’   s   


ÿþr¡   c                  C   sÎ  t  ¡ \} }|jdd | ¡ d u sJ ‚t| jƒ}| ¡  | ¡ dks%J ‚| ¡ }| ¡ }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 )NÚlogit)ÚxscaleÚZOOM)gíµ ÷Æ°>çš™™™™™¹?)gwJëÿï?çš™™™™™é?r—   Úbutton_release_eventr   g»½×Ùß|Û=)ÚrelÚabs)rP   r^   r6   Úget_navigate_moder	   rQ   ÚzoomÚget_xlimÚget_ylimÚ	transDatarŸ   Úastyperx   r   r   r    Ú	callbacksÚprocessÚnameÚxdataÚydataÚRIGHTr`   ÚapproxÚget_autoscalex_onÚget_autoscaley_on)rV   rn   ÚtbÚxlim0Ú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 s'J ‚| ¡  | ¡ d u s3J ‚d S )Nr   r   )	rP   r^   ÚplotrQ   Ú
widgetlockr	   r«   rª   Úpan)rV   rn   r¹   r   r   r   Útest_widgetlock_zoompanÕ   s   
rÆ   Ú	plot_funcÚimshowÚcontourfÚorientationÚverticalÚ
horizontalztool,button,expectedr«   ©é   é   )iìÿÿÿé   rÅ   )éþÿÿÿé   )g…ëQ¸…÷?g…ëQ¸@c                 C   s†  t  ¡ \}}t d¡ d¡}d\}}	t|| ƒ|||	d}
|j|
||d}| dkr1|j ¡ r/J ‚d S |j ¡ s8J ‚d\}}|df}|df}|d	krV|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Í   rˆ   rË   éÿÿÿÿr—   r§   r«   ç333333Ã?©r©   )rP   r^   r4   rF   rG   ÚgetattrÚcolorbarrn   Úget_navigater®   rŸ   r¯   rx   r   rQ   r	   r«   Ú
press_zoomÚ	drag_zoomÚrelease_zoomrÅ   Ú	press_panÚdrag_panÚrelease_panrÔ   rÕ   r`   r¶   )rÇ   rÊ   ÚtoolÚbuttonÚexpectedrV   rn   ÚdataÚvmin0Úvmax0Ú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w   Y  t ¡ } |  ¡ }|  ¡ d u s,J ‚|j	j
j d¡ |  ¡ dks<J ‚|j	j
j d¡ |  ¡ dksLJ ‚d S )N©ÚmatchÚtoolmanagerÚtoolbarr«   r¤   rÅ   ÚPAN)r`   ra   rb   Ú_EXPECTED_WARNING_TOOLMANAGERrP   ÚrcParamsÚgcaÚ
get_figurerª   rQ   rS   rí   Útrigger_tool)rn   rV   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r>dksAJ ‚ J ‚td| jdddƒ ¡  td| jdddƒ ¡  | 	¡ | 
¡   krfdksiJ ‚ J ‚|j dd	g¡\}}td
| jg|¢tj‘R Ž  ¡  td| jg|¢tj‘R Ž  ¡  td| jdƒ ¡  | 	¡ | 
¡   kr©dks¬J ‚ J ‚td| jdddƒ ¡  td| jdddƒ ¡  | 	¡ | 
¡   krÑdksÔJ ‚ J ‚d S )Né   r–   Úkéd   Úl)r   r!   r   )r"   r"   )r   r   r—   r§   Úh)rP   r^   rÃ   r0   r	   rQ   r«   r   r   r¬   r­   r®   rŸ   r   r   r    )rV   rn   r¹   ÚstartÚstopr   r   r   Ú$test_toolbar_home_restores_autoscale)  s$   
$$$(rý   ÚbackendÚsvgÚpsÚpgf)Ú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rmJ ‚q_t
||
ƒD ]\}}tjj||dd qsd S )Nr   r   )ÚFigureCanvaszmatplotlib.backends.backend_T)Úconstrained_layoutr"   c                 S   ó   g | ]}|  ¡ ‘qS r   ©Úget_position©r   rn   r   r   r   r   Z  ó    ztest_draw.<locals>.<listcomp>c                 S   r  r   r  r  r   r   r   r   _  r	  c                 S   r  r   r  r  r   r   r   r   `  r	  g{®Gázt?)Úatol)Úmatplotlib.figurer   Úmatplotlib.backends.backend_aggr  Ú	importlibÚimport_moduler^   ÚravelrQ   r›   Úzipr4   ÚallcloseÚtestingÚassert_allclose)rþ   r   r  Útest_backendÚ
TestCanvasÚfig_testÚ	axes_testÚfig_aggÚaxes_aggÚinit_posÚlayed_out_pos_testÚlayed_out_pos_aggÚinitÚplacedÚrefÚtestr   r   r   Ú	test_drawG  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%  )Nr˜   r&  r&  )N©r¦   ç      Ð?©gÃõ(\ÂÀg…ëQ¸@©g      @g     €&@)N©r#  r)  r$  r+  )N)r¦   ç333333ë?r*  ©g…ëQ¸	Àgq=
×£p@)N©r#  r-  r$  r.  )Úshift)r#  çš™™™™™Ù?r$  r&  )r0  ©r1  r#  r&  r%  )r0  r,  r$  r$  )r0  r(  r*  )gÃõ(\Â@gq=
×£ð(@)r0  )r¦   gÍÌÌÌÌÌì?©g¤p=
×£Àg¤p=
×£@r3  )r0  r/  r$  )gìQ¸…ëÀg
×£p=
@)rv   )r#  r¥   r$  r&  )ry   )r¥   r#  r&  r%  )Úcontrolr"  r$  r$  )r4  r2  ©gÃõ(\Â@gq=
×£p'@r5  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srJ ‚t| ¡ ƒtj|ddksJ ‚d S )	Nr!   Úequalr˜   r—   )rã   r   r§   g{®Gáz”?rØ   )rP   r^   rÃ   r4   rF   rÛ   Ú
set_aspectr®   rŸ   r¯   rx   r   rQ   r   r    r	   rÅ   rß   rà   rá   Útupler¬   r`   r¶   r­   )r   ÚmouseendÚexpectedxlimÚexpectedylimrV   rn   Ú
mousestartÚsstartÚsendrÀ   rÁ   r¹   r   r   r   Útest_interactive_pani  s<   
ÿÿþÿÿþ



"r?  c                  C   s¨   t jttd dtjd< W d   ƒ n1 sw   Y  t ¡ } t| jj	j
jƒ}d| jj	j
jv s2J ‚| jj	j
 d¡ t| jj	j
jƒ|d ksHJ ‚d| jj	j
jvsRJ ‚d S )Nrë   rí   rî   Úforwardr   )r`   ra   rb   rð   rP   rñ   rf   r1   rQ   rS   rí   ÚtoolsÚremove_tool)rV   Úinitial_lenr   r   r   Útest_toolmanager_removeŸ  s   ÿrD  c                  C   s$  t jttd dtjd< W d   ƒ n1 sw   Y  t ¡ } | jjj	 
d¡}t|tƒs/J ‚| jjj	 
|¡|u s;J ‚t jtdd | jjj	 
d¡d u sOJ ‚W d   ƒ n1 sYw   Y  | jjj	j
dddd u slJ ‚t jtdd | jjj	 d¡d u s€J ‚W d   ƒ d S 1 s‹w   Y  d S )	Nrë   rí   rî   Ú
rubberbandz'ToolManager does not control tool 'foo'ru   F)Úwarn)r`   ra   rb   rð   rP   rñ   rf   rQ   rS   rí   Úget_toolrM   r   rô   )rV   rE  r   r   r   Útest_toolmanager_get_toolª  s$   ÿÿþÿ"þrH  c                  C   sø   t jttd dtjd< W d   ƒ n1 sw   Y  t ¡ } d| jjj	 
d¡v s,J ‚t jtdd | jjj	 dd¡ W d   ƒ n1 sGw   Y  | jjj	 
d¡dgksYJ ‚t jtdd | jjj	 d	d¡ W d   ƒ d S 1 suw   Y  d S )
Nrë   rí   rî   Úvr@  z"Key c changed from back to forwardÚcz'foo' not in Toolsru   )r`   ra   rb   rð   rP   rñ   rf   rQ   rS   rí   Úget_tool_keymapÚupdate_keymapÚraisesÚKeyErrorrU   r   r   r   Útest_toolmanager_update_keymap»  s   ÿÿþ"ÿrO  râ   rã   Ú	patch_visTFÚforward_nav)TFÚautoÚt_sÚtwinÚsharec                 C   sð  t  ¡ \}}|jddd}| |¡ |j |¡ |dkr;| d¡}| |¡ | |¡ | d¡}	|	 |¡ |	 |¡ n|dkrG| ¡ }| ¡ }	| 	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 |¢|¢|¡\}}n#| ¡ du r|
}|}n|j ¡ s!| g |¢|¢|¡\}}n|
}|}| ¡  | |¡ | |¡ | |¡ | ¡ tj|ddksFJ ‚| ¡ tj|ddksTJ ‚| ¡ tj|ddksbJ ‚| ¡ tj|ddkspJ ‚| ¡ tj| ¡ ddks€J ‚| ¡ tj|	 ¡ ddksJ ‚d S |j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  | ¡ du rÖ|j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  n5| ¡ du râ|
}|}n)|j ¡ s|j g |¢|‘R Ž  |j!|d g|¢R Ž j" t#¡\}}| $¡  n|
}|}| %¡  | &|¡ | '|¡ | (|¡ | ¡ tj|ddks,J ‚| ¡ tj|ddks:J ‚| ¡ tj|ddksHJ ‚| ¡ tj|ddksVJ ‚| ¡ tj| ¡ ddksfJ ‚| ¡ tj|	 ¡ ddksvJ ‚d S )NéÝ   éc   )ÚzorderrU  éÞ   éß   rT  Úax_t)r   r   r   rˆ   Ú	ax_t_twinÚrÚax_b)r   r   r   rˆ   Ú	ax_b_twinÚb)r   r   )r   r"   r   r"   r—   r§   r«   r   ÚinÚoutTFr×   rØ   ))rP   r^   Úadd_subplotÚset_forward_navigation_eventsÚpatchÚset_visibleÚsharexÚshareyr…   Ú	set_labelÚset_facecolorÚset_xlimÚset_ylimr®   rŸ   r¯   rx   Úinvertedr   rQ   r	   Ú_prepare_view_from_bboxÚget_forward_navigation_eventsÚget_visibler«   rÜ   rÝ   rÞ   r¬   r`   r¶   r­   Ú	start_panÚ_get_pan_pointsÚTÚfloatÚend_panrÅ   rß   rà   rá   )râ   rã   rP  rQ  rS  rV   r^  r[  r\  r_  Ú	init_xlimÚ	init_ylimrn   Úxstart_tÚxstop_tÚystart_tÚystop_tr¾   r¿   Úxstart_bÚystart_bÚxstop_bÚystop_brÀ   rÁ   r¹   Ú	directionÚxlim_tÚylim_tÚxlim_bÚylim_br   r   r   Ú test_interactive_pan_zoom_eventsÈ  s¤   















 $  
 



 $r…  )3r  Ú
matplotlibr   r   Úmatplotlib.backend_basesr   r   r   r   r   r	   r
   Úmatplotlib.backend_toolsr   r  r   Úmatplotlib.testing._markersr   Úmatplotlib.pyplotÚpyplotrP   Únumpyr4   r`   rð   rK   rO   rW   r[   Úmarkrþ   ri   ro   Úparametrizer€   r‡   r¡   rÂ   rÆ   r    rµ   rê   rõ   rý   Úparamr!  r?  rD  rH  rO  r…  r   r   r   r   Ú<module>   st    $ÿ(
	

ÿ
0



ýÿ6ÿÿ
þ
!