o
    g[K                     @   sH  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!"d5g d6d7d8 Z'dS )9    N)image_comparison)do_eventget_ax
mock_event)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 [/home/ubuntu/cloudmapper/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   r3   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   3      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>T       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   sT  t  } dd }tj| |dddddd}d	|_|jd
ksJ |jd	ks%J |jdks,J |jd	ks3J t|dddd t|dddd t|dddd |jdksRJ t|dddd t|dddd t|dddd |jdksqJ t|dddd t|dddd t|dddd |jdksJ t|j	j
 dsJ t|j	j
 dsJ d S )Nc                 S   r4   r5   r   r   r   r   r   r   i   r6   z(test_rectangle_handles.<locals>.onselectr)   Trb)markerfacecolormarkeredgecolor)r   r7   r8   marker_propsr9   ))r   r:   r:   r   )r   r   r:   r:   ))r        @_@r:   r^   )r^   r   r^   r:   r   r   r
   r   r   r>   r   )r>   r:   r>   r:      )l      ra   rb   )r)   r   r)   r   )r   r   r    rV   cornersedge_centersr   mcolors
same_color_corner_handlesartistget_markerfacecolorget_markeredgecolor)r   r   r%   r   r   r   test_rectangle_handlesf   s>   rk   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_moverm   r   r   r   r      s   
zcheck_span.<locals>.onmoveonmove_callbackr   r   r   r   r   rB   r   r:   )r   r   SpanSelectorr   r	   rp   )argsr$   r   r   r%   r   r   r   
check_span   s   

rt   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   )rq   r   r.   r0   )rt   r2   r   r   r   r   test_span_selector   s   rx   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:   rl   )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   r{   c                   C   s(   t   t dtddd t ddd d S )NFred)color)r'   	linepropsTr   r(   )r{   r2   r   r   r   r   test_lasso_selector   s   r   c                  C   sb   t  } t| dd}| g dksJ |d | g dks#J |dd }|| d S )N)arZ   c)TFTr   )FFTc                   S   r4   r5   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   皙?r   r   )zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)pltrcParamsr   subplots_adjustaxesr   RadioButtonsr   )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   皙?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   valinit      ?)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}|jdksJ tj|ddddg dd}|jd	ks,J d S )
Nr   r   r   g&@r   )r   r   r   r   r   valstep   )r   r         @g333333@r   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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         ru   )r   r   r   r   r   orientationr)   )r   r   竪?r   rw   )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   r   ru   rw   c                 C   s   | dkr	g d}ng d}t  \}}tj|ddd| ddgd	}|j |j }t	|
  | g d
 t	|jd |d t	|jd |j |j }t	|
  | g d |d t	|jd |d t	|jd d S )Nrw   )r   r      rS   )r   r   rS   r   r   r   r   r   (\?)r   r   r   r   r   r   )r   r   r   r   )r   r   )r   333333?)r   r   r   r   )r   r   )r   r   )r)   )r   r   )r   r   r   RangeSliderr   r   r   r   r   r   
get_pointsflattenr   r   )r   idxr   r   r   r   r   r   r   test_range_slider-  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   b  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_selectorL  s   r   c                 C   s.   dt | |dfdt | |dfdt | |dfgS )Nr   r_   r   r   )r2   r_   r   r   r   polygon_place_vertexo  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   r_   r   rD   r   rC   ))r   rD   )r:   rD   r   rE   r   rB   rS   ))rD   rD   )   rD   )rD   r   r   escape)r   r   r2   )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}|r$t|jdks$J | r/t|jdks/J t|ddd	}|	| |jD ]
}|
 d
ksHJ q>|jD ]
}| dksVJ qLt|ddd	}|	| |jD ]
}|
 d
kspJ qf|jD ]
}| dks~J qtd S )Nr   T)sharexF)r'   horizOnvertOnrS         ?      ?r_   )r   r   )r   r   g      ?)r   r   r   MultiCursorcanvaslenvlineshlinesr   r   	get_xdata	get_ydata)	r   r   r   ax1ax2ax3multieventlr   r   r   test_MultiCursor  s*   





r  )(matplotlib.colorscolorsre   matplotlib.widgetsr   matplotlib.pyplotpyplotr   matplotlib.testing.decoratorsr   matplotlib.testing.widgetsr   r   r   numpy.testingr   r   r&   r3   rX   rk   rt   rx   r{   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r  r   r   r   r   <module>   sJ    	7,


#`