o
    iP?                     @   s   d dl mZ d dlmZ d dlmZ d dl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d*d+ Zd,d- ZdS ).    N)image_comparison)do_eventget_ax)assert_allclosec                     s   t    fdd}tj |fi | }t|ddddd t|ddddd t|d	d
d
dd | dd dvrEt|jg dg dg|jd  jsJJ d S )Nc                    sB   d _ | jdks
J | jdksJ |jdksJ |jdksJ d S )NTd      )_got_onselectxdataydataepressereleaseax X/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/tests/test_widgets.pyonselect   s
   z!check_rectangle.<locals>.onselectpressr      r	   r
   buttononmover   release   drawtype)linenone)g      Y@r   r   r   r   )r   r   r   r   r   )err_msg)r   widgetsRectangleSelectorr   getr   geometryr   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minspanypixels)r)   r*   
spancoordsfill	rectprops)r%   dictr   r   r   r   test_rectangle_selector%   s   r2   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s6J 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slJ 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 }|g dksJ 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 }|g dksJ |jjdksJ t|jd d d!f d"dg d S )#z'For ellipse, test out the key modifiersc                 S      d S Nr   r   r   r   r   r   2      ztest_ellipse.<locals>.onselectr(   Tr   maxdistinteractiver      r   r:   r   r    )r	   r
   r   keyr      r   r   )x      r>   r?   on_key_pressr   control}   on_key_release)K   rB   rD   rB   shift#   c                 S      g | ]}t |qS r   int.0er   r   r   
<listcomp>S       z test_ellipse.<locals>.<listcomp>)r(   rF   r(   "   z
ctrl+shift   c                 S   rG   r   rH   rJ   r   r   r   rM   ^   rN   )F      rQ   rP   )   I   Nr   g     Q@)r   r   EllipseSelectorextentsr   r!   shaper   )r   r   r$   rV   r   r   r   test_ellipse.   s\    rX   c                  C   s  t  } dd }tj| |ddd}d|_|jdksJ |jdks!J |jdks(J |jdks/J t|d	d
d
d t|dddd t|dddd |jdksNJ t|d	ddd t|dddd t|dddd |jdksmJ t|d	ddd t|dd
d
d t|dd
d
d |jdksJ d S )Nc                 S   r3   r4   r   r   r   r   r   r   h   r5   z(test_rectangle_handles.<locals>.onselectr(   Tr6   r9   ))r   r:   r:   r   )r   r   r:   r:   ))r        @_@r:   rY   )rY   r   rY   r:   r   r   r	   r
   r   r>   r   )r>   r:   r>   r:      )l      r\   r]   )r(   r   r(   r   )r   r   r   rV   cornersedge_centersr   )r   r   r$   r   r   r   test_rectangle_handlese   s,   r`   c                     s   t    fdd} fdd}d|v r||d< tj |g| R i |}t|ddddd	 t|d
dddd	 t|ddddd	  jsDJ d|v rM jsOJ d S d S )Nc                    s"   d _ | dks	J |dksJ d S )NTr   r:   r   vminvmaxr   r   r   r      s   zcheck_span.<locals>.onselectc                    s"   | dksJ |dksJ d _ d S )Nr   rB   T)_got_on_moverb   r   r   r   r      s   
zcheck_span.<locals>.onmoveonmove_callbackr   r   r   r   r   rB   r   r:   )r   r   SpanSelectorr   r   re   )argsr#   r   r   r$   r   r   r   
check_span   s   

ri   c                   C   s2   t dddd t dddd t dtddd	 d S )
N
horizontalr(   T)minspanr&   verticalr   )rf   r   r-   r/   )ri   r1   r   r   r   r   test_span_selector   s   rm   c                     sj   t    fdd}tj |fi | }t|ddddd t|ddddd t|d	d
d
dd  js3J d S )Nc                    s   d _ | g dksJ d S )NT))r   r   )rB   rB   )r:   r:   ra   )vertsr   r   r   r      s   z&check_lasso_selector.<locals>.onselectr   r   r   r   r   rB   r   r:   )r   r   LassoSelectorr   r   r"   r   r   r   check_lasso_selector   s   rp   c                   C   s(   t   t dtddd t ddd d S )NFred)color)r&   	linepropsTr   r'   )rp   r1   r   r   r   r   test_lasso_selector   s   rt   c                  C   sb   t  } t| dd}| g dksJ |d | g dks#J |dd }|| d S )N)abc)TFTr   )FFTc                   S   r3   r4   r   r   r   r   r   <lambda>   s    z#test_CheckButtons.<locals>.<lambda>)r   r   CheckButtons
get_status
set_active
on_clicked
disconnect)r   checkcidr   r   r   test_CheckButtons   s   
r   zcheck_radio_buttons.pngmpl20T)styleremove_textc                  C   sV   dt jd< t  t jdd t g d} t g d}t| d t|dd	 d S )
N   ztext.kerning_factorg333333?)left)皙?ffffff?333333?r   )r   g?r   r   )zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)pltrcParamsr   subplots_adjustaxesr   RadioButtonsry   )rax1rax2r   r   r   test_check_radio_buttons_image   s   
r   z check_bunch_of_radio_buttons.pngc                  C   s   t g d} t| d d S )N)r   g?r   r   )B1B2B3B4B5B6B7B8B9B10B11B12B13B14B15)r   r   r   r   )raxr   r   r   !test_check_bunch_of_radio_buttons   s   r   c                  C   s   t  \} }tt tj|ddddd W d    n1 s w   Y  tt tj|ddddd W d    d S 1 s@w   Y  d S )N               8@      $@)r   labelvalminvalmax	slidermin)r   r   r   r   	slidermax)r   subplotspytest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s#J tj|dddd|d	}|j|jks6J d S )
Nr   r   r   g      @r   r   r   r   valinitg      ?)r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   val)r   r   slider_sliderr   r   r   test_slider_slidermin_slidermax   s   r   c                  C   sX   t  \} }tj|ddddd}|j|jksJ tj|ddddd}|j|jks*J d S )Nr   r   r   g      $r   g      9@)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}|d |jdksJ |j |j	
 }t|jg d t  \} }tj|ddddd	d}|d |jdksMJ |j |j	
 }t|jg d
 d S )Nr   r         rj   )r   r   r   r   r   orientationr(   )r   r   竪?r   rl   )r   r   r   r   )r   r   r   r   set_valr   polyget_extentstransformed	transAxesinvertedr   bounds)r   r   r   boxr   r   r   test_slider_horizontal_vertical  s    

r   c                    sd   t   d _ fdd}t |}| D ]\}}t||fi | q j|ks)J  j|ks0J 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)verticesr   r   r   r   /  s   
z(check_polygon_selector.<locals>.onselectN)r   r   r   PolygonSelectorr   r   )event_sequenceexpected_resultselections_countr   r$   etype
event_argsr   r   r   check_polygon_selector  s   r   c                 C   s.   dt | |dfdt | |dfdt | |dfgS )Nr   rZ   r   r   )r1   rZ   r   r   r   polygon_place_vertex<  s   r   c                  C   s  g d} t ddt dd t dd t dd }t|| d g 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 t dd }t|| d g 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 t dd }t|| d g d} 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 g d} 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 g 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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 g d} 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   r:   r   r   r:   r   r:   r   ))rD   r   r   r   r@   rA   )r<   r   rZ   r   rD   r   rC   ))r   rD   )r:   rD   r   rE   r   rB   rS   ))rD   rD   )   rD   )rD   r   r   escape)r   r   r1   )r   r   r   r   r   test_polygon_selectorB  s   	
	

r   )matplotlib.widgetsr   matplotlib.pyplotpyplotr   matplotlib.testing.decoratorsr   matplotlib.testing.widgetsr   r   numpy.testingr   r   r%   r2   rX   r`   ri   rm   rp   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s8    	7$

#