U
    \	a[K                     @   sJ  d dl mZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlZdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Ze	dgddddd Ze	dgddddd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z ej!"d*d+d,gd-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&ej!"d5d6d7d8gd9d: Z'dS );    N)image_comparison)do_eventget_ax
mock_event)assert_allclosec                     s   t    fdd}tj |f| }t|ddddd t|ddddd t|d	d
d
dd | dd dkrt|jdddddgdddddgg|jd  jstd S )Nc                    sB   d _ | jdkst| jdks"t|jdks0t|jdks>td S )NTd      )_got_onselectxdataAssertionErrorydataZepressZereleaseax A/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_widgets.pyonselect   s
    z!check_rectangle.<locals>.onselectpressr      r
   r   buttononmover   release   drawtype)linenoneg      Y@)err_msg)	r   widgetsRectangleSelectorr   getr   geometryr	   r   kwargsr   toolr   r   r   check_rectangle   s    r%   c                   C   sN   t   t ddd t ddd t dddd	 t ddd
d t tddd d S )Nr   F)r   useblitTr   r&   r   r   
   )r   minspanxminspanyZpixels)r)   r*   Z
spancoordsfillZ	rectprops)r%   dictr   r   r   r   test_rectangle_selector&   s    r/   c                  C   s  t  } dd }tj| |ddd}d|_t|ddddd	d
 t|ddddd t|ddddd |jdksltt|dddddd
 t|ddddd t|ddddd t|ddddd t|dddddd
 |jdkstt|dddddd
 t|ddddd t|ddddd t|ddddd t|dddddd
 dd |jD }|ddddgks\tt|dddddd
 t|ddddd t|ddddd t|ddddd t|dddddd
 dd |jD }|ddddgkst|jjd kstt|jd!d!d"f d#dg d!S )$z'For ellipse, test out the key modifiersc                 S   s   d S Nr   r   r   r   r   r   3   s    ztest_ellipse.<locals>.onselectr(   T)r   maxdistinteractiver      r   r4   r   r    )r
   r   r   keyr      r   r   )x      r8   r9   on_key_pressr   control}   on_key_release)K   r<   r>   r<   shift#   c                 S   s   g | ]}t |qS r   int.0er   r   r   
<listcomp>T   s     z test_ellipse.<locals>.<listcomp>"   z
ctrl+shift   c                 S   s   g | ]}t |qS r   rA   rC   r   r   r   rF   _   s     F      )   I   Nr   g     Q@)	r   r   ZEllipseSelectorextentsr   r   r!   shaper   )r   r   r$   rM   r   r   r   test_ellipse/   s^     rO   c                  C   sZ  t  } dd }tj| |dddddd}d	|_|jd
ks<t|jd	ksJt|jdksXt|jd	ksftt|dddd t|dddd t|dddd |jdkstt|dddd t|dddd t|dddd |jdkstt|dddd t|dddd t|dddd |jdks"tt	|j
j ds<tt	|j
j dsVtd S )Nc                 S   s   d S r0   r   r   r   r   r   r   i   s    z(test_rectangle_handles.<locals>.onselectr(   Trb)ZmarkerfacecolorZmarkeredgecolor)r   r1   r2   Zmarker_propsr3   ))r   r4   r4   r   )r   r   r4   r4   ))r        @_@r4   rR   )rR   r   rR   r4   r   r   r
   r   r   r8   r   )r8   r4   r8   r4      )l      rU   rV   )r(   r   r(   r   )r   r   r   rM   Zcornersr   Zedge_centersr   mcolorsZ
same_colorZ_corner_handlesZartistZget_markerfacecolorZget_markeredgecolor)r   r   r$   r   r   r   test_rectangle_handlesf   sD     
 

 rX   c                     s   t    fdd} fdd}d|kr.||d< tj |f| |}t|ddddd	 t|d
dddd	 t|ddddd	  jstd|kr jstd S )Nc                    s"   d _ | dkst|dkstd S )NTr   r4   r	   r   ZvminZvmaxr   r   r   r      s    zcheck_span.<locals>.onselectc                    s"   | dkst |dkst d _d S )Nr   r<   T)r   _got_on_moverZ   r   r   r   r      s    zcheck_span.<locals>.onmoveonmove_callbackr   r   r   r   r   r<   r   r4   )r   r   ZSpanSelectorr   r	   r   r[   )argsr#   r   r   r$   r   r   r   
check_span   s    
r^   c                   C   s2   t dddd t dddd t dtddd	 d S )
N
horizontalr(   T)Zminspanr&   verticalr   )r\   r   r+   r-   )r^   r.   r   r   r   r   test_span_selector   s    ra   c                     sf   t    fdd}tj |f| }t|ddddd t|ddddd t|d	d
d
dd  jsbtd S )Nc                    s   d _ | dddgkstd S )NT)r   r   )r<   r<   )r4   r4   rY   )Zvertsr   r   r   r      s    z&check_lasso_selector.<locals>.onselectr   r   r   r   r   r<   r   r4   )r   r   ZLassoSelectorr   r	   r   r"   r   r   r   check_lasso_selector   s    rb   c                   C   s(   t   t dtddd t ddd d S )NFZred)color)r&   Z	linepropsTr   r'   )rb   r.   r   r   r   r   test_lasso_selector   s    rd   c                  C   sf   t  } t| dd}| dddgks*t|d | dddgksJt|dd }|| d S )N)arQ   c)TFTTFr   c                   S   s   d S r0   r   r   r   r   r   <lambda>       z#test_CheckButtons.<locals>.<lambda>)r   r   CheckButtonsZ
get_statusr   Z
set_activeZ
on_clickedZ
disconnect)r   checkZcidr   r   r   test_CheckButtons   s    
rk   zcheck_radio_buttons.pngZmpl20T)styleZremove_textc                  C   s^   dt jd< t  t jdd t ddddg} t ddddg}t| d	 t|d
d d S )N   ztext.kerning_factorg333333?)left皙?ffffff?333333?皙?)zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)pltZrcParamsr   Zsubplots_adjustaxesr   RadioButtonsri   )Zrax1Zrax2r   r   r   test_check_radio_buttons_image   s    
rv   z check_bunch_of_radio_buttons.pngc                  C   s"   t ddddg} t| d d S )Nro   皙?rq   rp   )ZB1ZB2ZB3ZB4ZB5ZB6ZB7ZB8ZB9ZB10ZB11ZB12ZB13ZB14ZB15)rs   rt   r   ru   )Zraxr   r   r   !test_check_bunch_of_radio_buttons   s    rx   c               	   C   sd   t  \} }tt tj|ddddd W 5 Q R X tt tj|ddddd W 5 Q R X d S )N               8@      $@)r   labelvalminvalmax	slidermin)r   r}   r~   r   	slidermax)rs   subplotspytestZraises
ValueErrorr   Slider)figr   r   r   r   'test_slider_slidermin_slidermax_invalid   s    r   c                  C   sp   t  \} }tj|ddddd}tj|dddd|d}|j|jksFttj|dddd|d	}|j|jksltd S )
Nry   rz   r{   g      @r   r}   r~   r   valinit      ?)r   r}   r~   r   r   r   r|   )r   r}   r~   r   r   r   rs   r   r   r   valr   )r   r   Zslider_sliderr   r   r   test_slider_slidermin_slidermax   s      r   c                  C   sX   t  \} }tj|ddddd}|j|jks0ttj|ddddd}|j|jksTtd S )Nry   rz   r{   g      $r   g      9@)rs   r   r   r   r   r~   r   r   r   r   r   r   r   r   test_slider_valmin_valmax  s    r   c               
   C   s`   t  \} }tj|dddddd}|jdks0ttj|ddddddd	d
gd}|jd	ks\td S )Nry   rz   r{   g&@r   )r   r}   r~   r   r   Zvalstep   r   g      @g333333@r   r   r   r   r   test_slider_valstep_snapping  s      
r   c                  C   s   t  \} }tj|dddddd}|d |jdks:t|j 	|j
 }t|jdddd	g t  \} }tj|ddddd
d}|d |jdkst|j 	|j
 }t|jddd	dg d S )Nry   r         r_   )r   r}   r~   r   r   orientationr(   g?r   r`   )rs   r   r   r   set_valr   r   polyget_extentstransformed	transAxesinvertedr   Zbounds)r   r   r   boxr   r   r   test_slider_horizontal_vertical  s$     
 
r   r   r_   r`   c                 C   s  | dkrddddg}nddddg}t  \}}tj|ddd| d	d
gd}|j |j }t	|
  | d	dd
dg t	|jd |d t	|jd |j |j }t	|
  | ddddg |d t	|jd |d t	|jd d S )Nr`   r   r      rK   ry   rz   r   rw   (\?)r   r}   r~   r   r   r   )rw   r   )rr   333333?rr   r   )rr   rw   )rw   rr   )r(   )r   r   )rs   r   r   ZRangeSliderr   r   r   r   r   r   Z
get_pointsflattenr   r   )r   idxr   r   r   r   r   r   r   test_range_slider-  s.        


r   c                    s`   t   d _ fdd}t |}| D ]\}}t||f| q( j|ksNt j|ks\tdS )a  
    Helper function to test Polygon Selector.

    Parameters
    ----------
    event_sequence : list of tuples (etype, dict())
        A sequence of events to perform. The sequence is a list of tuples
        where the first element of the tuple is an etype (e.g., 'onmove',
        'press', etc.), and the second element of the tuple is a dictionary of
         the arguments for the event (e.g., xdata=5, key='shift', etc.).
    expected_result : list of vertices (xdata, ydata)
        The list of vertices that are expected to result from the event
        sequence.
    selections_count : int
        Wait for the tool to call its `onselect` function `selections_count`
        times, before comparing the result to the `expected_result`
    r   c                    s     j d7  _ |  _d S )Nr   )_selections_count_current_result)Zverticesr   r   r   r   b  s    z(check_polygon_selector.<locals>.onselectN)r   r   r   ZPolygonSelectorr   r   r   )event_sequenceexpected_resultZselections_countr   r$   etypeZ
event_argsr   r   r   check_polygon_selectorL  s    r   c                 C   s.   dt | |dfdt | |dfdt | |dfgS )Nr   rS   r   r   )r.   rS   r   r   r   polygon_place_vertexo  s    r   c                  C   s  dddg} t ddt dd t dd t dd }t|| d dddg} t ddt dd dtd	d
fdtdddfdtdddfdtdddfdtdddfdtd	d
fg t dd t dd }t|| d dddg} t ddt dd dtdd
fdtdddfdtdddfdtdddfdtdddfdtdd
fg t dd t dd }t|| d dddg} t ddt dd t dd t dd dtdddfdtdddfdtdddfdtdddfg }t|| d dddg} t ddt dd t dd t dd dtdd
fdtdddfdtdddfdtdddfdtdddfdtdd
fg }t|| d dddg} dtd	d
fdtdddfdtdddfdtdddfdtdddfdtd	d
fdtdd
fdtdddfdtdddfdtdddfdtdddfdtdd
fgt dd t dd t dd t dd }t|| d dddg} t ddt dd dtdd
fdtdd
fg t dd t dd t dd t dd }t|| d d S )N)2   r   )r4   r   )r   r4   r   r4   r   )r>   r   r:   r;   )r6   r   rS   r   r>   r   r=   )r   r>   )r4   r>   r?   r   r<   rK   )r>   r>   )   r>   )r>   r   r   escape)r   r   r.   )r   r   r   r   r   test_polygon_selectoru  s    

	

	





r   zhorizOn, vertOn)TT)TF)FTc           	      C   s  t jddd\}\}}}tj|j||fd| |d}|rHt|jdksHt| r^t|jdks^tt	|ddd	}|
| |jD ]}| d
ks|tq||jD ]}| dkstqt	|ddd	}|
| |jD ]}| d
kstq|jD ]}| dkstqd S )Nr   T)ZsharexF)r&   horizOnvertOnrK         ?      ?rS   )r   r   )r   r   g      ?)rs   r   r   ZMultiCursorZcanvaslenZvlinesr   Zhlinesr   r   Z	get_xdataZ	get_ydata)	r   r   r   Zax1Zax2Zax3Zmultieventlr   r   r   test_MultiCursor  s0        





r   )(Zmatplotlib.colorscolorsrW   Zmatplotlib.widgetsr   Zmatplotlib.pyplotZpyplotrs   Zmatplotlib.testing.decoratorsr   Zmatplotlib.testing.widgetsr   r   r   Znumpy.testingr   r   r%   r/   rO   rX   r^   ra   rb   rd   rk   rv   rx   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   <module>   sJ   	7,
 

#`