U
    \	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dddddgdd Z&dd Z'dd Z(d d! Z)ej%d"d#d$dej*d%ed&gd'd( Z+dS ))    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   G/tmp/pip-unpacked-wheel-wjyw_3jo/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 }	|	|||||}
|rt
j|	t|d}t||
d |
gst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AssertionError)Zmaster_transformpathsZall_transformsoffsets
facecolors
edgecolorsrbZ	raw_pathsgcidsZusesseenr   r   r   check   sD        
          z!test_uses_per_path.<locals>.checkr   )r'   ZAffine2Dr%   r(   ZarangeZreshapeshape)r,   Ztforms_matricesr-   r.   r/   r4   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stdt	|d j
kst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messageZgcf)ZmonkeypatchZrecr   r   r   test_non_gui_warningO   s    rJ   zx, y)*      )NrK   )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stn"|jt|kstt|jtst| d k	r|d k	rt	
d|| |||| |stdd  |_|_t	
d|| |std S )NZ
test_eventz
x={} +y={}c                 S   s   dS )NZfoor   )xr   r   r   <lambda>w       z.test_location_event_position.<locals>.<lambda>zx=foo +y=foo)r<   rC   r   r   rN   r+   intr9   yrematchformatZformat_xdataZformat_ydataZformat_coordZ	fmt_xdataZ	fmt_ydata)rN   rR   rA   axr=   eventr   r   r   test_location_event_positionb   s$    
rX   c                     s   t  } | jddddddd | j  g  | jd fdd td	| jf| jd
t	j
f }| jj|j| t dkstd S )N      ?ZhellocenterT)ZhavaZpickerZ
pick_eventc                    s
     | S r8   )append)rW   Zpicksr   r   rO      rP   ztest_pick.<locals>.<lambda>button_press_event)rY   rY   r   )r<   r:   textr=   drawZmpl_connectr   ZtransFigure	transformr   LEFT	callbacksprocessnamer&   r+   )rA   start_eventr   r]   r   	test_pick{   s    
 
rg   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st|	 |	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st|  | d kst| s| rtd S )NZlogit)ZxscaleZOOM)gư>g?)gwJ?g?r^   Zbutton_release_eventr   g|=)relabs)r<   rC   r)   get_navigate_moder+   r   r=   zoomZget_xlimZget_ylimZ	transDatara   ZastyperQ   r   r   rb   rc   rd   re   ZxdataZydataRIGHTrD   ZapproxZget_autoscalex_onZget_autoscaley_on)rA   rV   tbZxlim0Zylim0Zd0d1s0s1rf   Z
stop_eventr   r   r   test_interactive_zoom   sf    
        rr   c               	   C   s   d} t jt| d dtjd< W 5 Q R X t }| d ks@t|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st|jj	j
jd | d
kst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.)rT   toolmanagerZtoolbarrl   )re   ZtoolZpanZ
rubberbandrh   ZPAN)rD   rE   rF   r<   ZrcParamsZgcark   r+   r:   r=   managerrs   Zadd_toolr	   r
   r   r   r   Ztrigger_tool)Zexpected_warning_regexrV   r   r   r   test_toolbar_zoompan   s,    ru   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rtqt
||
D ]\}}tjj||dd qd S )Nr   r   )FigureCanvaszmatplotlib.backends.backend_T)Zconstrained_layoutr#   c                 S   s   g | ]}|  qS r   get_positionr   rV   r   r   r   r      s     ztest_draw.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   ry   r{   r   r   r   r      s     c                 S   s   g | ]}|  qS r   ry   r{   r   r   r   r      s     g{Gzt?)Zatol)matplotlib.figurer   Zmatplotlib.backends.backend_aggrx   rD   ZimportorskiprC   Zravelr=   r`   zipr(   Zallcloser+   ZtestingZassert_allclose)rv   r   rx   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   ),rS   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(   rD   markZskipifZneeds_xelatexr7   r;   r>   rB   rv   rJ   ZparametrizerX   rg   rr   ru   paramr   r   r   r   r   <module>   s>    )	

 
0 