o
    :a,                  
   @   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 || qk| | ||g | | | |||g  | | ||g g  | | |||dd | d S )Nc                 S   s   g | ]}t j|qS  )pathZPathZunit_regular_polygon.0ir   r   E/usr/lib/python3/dist-packages/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             )
      ZredZgreenc                 S   s   t  }t|| ||}| }dd ||| |tt||t| ||g g dgg dD }	|	|||||}
|rOt
j|	t|d}t||
d |
gsQJ d S 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>FZ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_pathsZ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-   r0   nr   r   r   test_uses_per_path   s(   r5   c                   C   s   t t jts	J d S N)
isinstancer   figurer   r   r   r   r   test_canvas_ctor>   s   r9   c                   C   s   t  j dksJ d S )Nz	image.png)pltr8   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 r6   )r:   r8   r   closeZfignum_existsZnumber)figr;   r   r   r   test_canvas_changeF   s   
r?   Z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 )NZDISPLAYz:999r   z=Matplotlib is currently using pdf, which is a non-GUI backendr   )r:   subplotsZsetenvpytestwarnsUserWarningZshowr%   strmessageZgcf)ZmonkeypatchZrecr   r   r   test_non_gui_warningO   s    

"rF   zx, y))*      )NrG   )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t	d
|| |||| |siJ dd  |_|_t	d|| |sJ d S d S d S )NZ
test_eventz
x={} +y={}c                 S   s   dS )NZfoor   )xr   r   r   <lambda>w   s    z.test_location_event_position.<locals>.<lambda>zx=foo +y=foo)r:   r@   r   r   rJ   intr7   yrematchformatZformat_xdataZformat_ydataZformat_coordZ	fmt_xdataZ	fmt_ydata)rJ   rM   r>   axr;   eventr   r   r   test_location_event_positionb   s(   
rS   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sCJ d S )N      ?ZhellocenterT)ZhaZvaZpickerZ
pick_eventc                    s
     | S r6   )append)rR   Zpicksr   r   rK      s   
 ztest_pick.<locals>.<lambda>button_press_event)rT   rT   r   )r:   r8   textr;   drawZmpl_connectr   ZtransFigure	transformr   LEFT	callbacksprocessnamer%   )r>   start_eventr   rW   r   	test_pick{   s   

ra   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sJ 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sJ | tj|dd	d
ksJ |  | d u sJ | s| rJ d S )NZlogit)ZxscaleZOOM)gư>g?)gwJ?g?rX   button_release_eventr   g|=)Zrelabs)r:   r@   r(   get_navigate_moder   r;   zoomZget_xlimZget_ylim	transDatar[   astyperL   r   r   r\   r]   r^   r_   ZxdataZydataRIGHTrA   approxZget_autoscalex_onZget_autoscaley_on)r>   rQ   tbZxlim0Zylim0d0d1s0s1r`   
stop_eventr   r   r   test_interactive_zoom   sf   
rq   	plot_funcZimshowcontourforientationverticalZ
horizontalztool,button,expectedrf         )i   pan)   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sJ d S )N   )rw   r   )r   r!   )vminvmax)rQ   rt   rs   rv   rT   ru   rX   rc   rf   g333333?)rd   )r:   r@   r'   r1   r2   getattrZcolorbarrQ   Zget_navigaterg   r[   rh   rL   r   r;   r   rf   Z
press_zoomZ	drag_zoomZrelease_zoomrz   Z	press_panZdrag_panZrelease_panr~   r   rA   rj   )rr   rt   toolZbuttonZexpectedr>   rQ   dataZvmin0Zvmax0Zcollcbr~   r   rl   rm   rn   ro   r`   rp   rk   r   r   r   test_interactive_colorbar   sT   





"r   c                  C   s   d} t jt| d dtjd< W d    n1 sw   Y  t }| d u s*J |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sgJ |jjj	j
d | d
ksxJ d S )NzTreat the new Tool classes introduced in v[0-9]*.[0-9]* as experimental for now; the API and rcParam may change in future versions.)rO   toolmanagerZtoolbarrf   )r_   r   rz   Z
rubberbandrb   ZPAN)rA   rB   rC   r:   ZrcParamsZgcare   r8   r;   Zmanagerr   Zadd_toolr	   r
   r   r   r   Ztrigger_tool)Zexpected_warning_regexrQ   r   r   r   test_toolbar_zoompan   s.   r   backendZ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rmJ q_t
||
D ]\}}tjj||dd qsd S )Nr   r   )FigureCanvaszmatplotlib.backends.backend_T)Zconstrained_layoutr"   c                 S      g | ]}|  qS r   Zget_positionr   rQ   r   r   r   r         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{Gzt?)Zatol)matplotlib.figurer   Zmatplotlib.backends.backend_aggr   rA   Zimportorskipr@   Zravelr;   rZ   zipr'   ZallcloseZ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_aggZinitZplacedreftestr   r   r   	test_draw  s,   



r   )/rN   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pyplotr:   Zmatplotlib.transformsr&   Zmatplotlib.pathr   Znumpyr'   rA   ZmarkZskipifZneeds_xelatexr5   r9   r<   r?   r   rF   ZparametrizerS   ra   rq   r\   ri   r   r   Zparamr   r   r   r   r   <module>   sN     )
	

0


6