a
    ضaR                     @   s  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 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
dZejdddgddggdd Zdd Zdd Zejdddgdd Zejdddgdd Zdd Zdd Zd d! Z ejd"ddgd#d$ Z!ejd%ddgd&d' Z"d(d) Z#d*d+ Z$ejd"ddgd,d- Z%ejd%ddgd.d/ Z&ejd0ddgd1d2 Z'd3d4 Z(d5d6 Z)ejd7d8d9gd:d; Z*ejd7d8d9gd<d= Z+d>d? Z,ejd@dAdBdC Z-dDdE Z.dFdG Z/dHdI Z0ejdJg dKdLdM Z1edNgdOddPdQdR Z2edSgdOddPdTdU Z3dVdW Z4dXdY Z5dZd[ Z6d\d] Z7d^d_ Z8d`da Z9ejdbdcddgdedf Z:dgdh Z;didj Z<dkdl Z=dmdn Z>dodp Z?ejdqg drdsdt Z@e dudv ZAejdwg dxdydz ZBd{d| ZCd}d~ ZDdS )    )MatplotlibDeprecationWarningN)check_figures_equal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rt|jg dg dg|jd  jsJ d S )Nc                    sB   d _ | jdksJ | jdks"J |jdks0J |jdks>J d S NTd      )_got_onselectxdataydataZepressZereleaseax m/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/matplotlib/tests/test_widgets.pyonselect   s
    z!check_rectangle.<locals>.onselectpressr
      r   r   buttononmover   release   drawtype)linenone)      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   s   t   tjtdd t ddd W d    n1 s60    Y  t ddd tjtd	d t d
ddd W d    n1 s~0    Y  t dddd t tddd d S )Nz)Support for drawtype='line' is deprecated)matchr   F)r   useblitTr   r*   r   z)Support for drawtype='none' is deprecatedr   
   )r   minspanxminspanyZpixels)r-   r.   Z
spancoordsfillprops)r(   pytestZwarnsr   dictr   r   r   r   test_rectangle_selector'   s    *,r5   c                 C   sf   t | d||dd |d ur(t | d|d t | d||dd |d urPt | d|d t | d||dd | S )	Nr   r   r   on_key_presskeyr   on_key_releaser   )r   )r'   r   r   	xdata_new	ydata_newuse_keyr   r   r   _resize_rectangle:   s    r=   zdrag_from_anywhere, new_centerT)<   K   F)      c                 C   s   t  }dd }tj||d| d}t|ddddd	 t|d
dddd	 t|ddddd	 |jdksdJ t|ddddd	 t|d
dddd	 t|ddddd	 |j|ksJ t|ddddd	 t|d
dddd	 t|ddddd	 |jdksJ d S )Nc                 S   s   d S Nr   r   r   r   r   r   M   s    z%test_rectangle_drag.<locals>.onselectTinteractivedrag_from_anywherer   r   r,   r   r   r   r
   x   r   )2   A         #            )      )r   r!   r"   r   center)rE   Z
new_centerr   r   r'   r   r   r   test_rectangle_dragG   s"    
rR   c                  C   s  t  } dd }tj| |dtdddtddd	}t|d
dddd t|ddddd t|ddddd |j}| tjdddksJ |j	ddd | tjdddksJ |j
D ]$}| dksJ | dksJ q|jddd |j
D ]&}| dksJ | dksJ qd S )Nc                 S   s   d S rB   r   r   r   r   r   r   m   s    z@test_rectangle_selector_set_props_handle_props.<locals>.onselectTb皙?Z	facecoloralpha      ?rV   rD   r2   handle_propsr   r   r,   r   r   r   r
   rF   r   r333333?black)markeredgecolorrV   )r   r!   r"   r4   r   _selection_artistget_facecolormcolorsto_rgba	set_props_handles_artistsget_markeredgecolor	get_alphaset_handle_propsr   r   r'   artistr   r   r   .test_rectangle_selector_set_props_handle_propsj   s(    



rj   c                  C   s  t  } dd }tj| |dd}t|dddd |jd	ks<J |j}|d
 |d  }}|d |d  }}t||||| |j|d ||d |fksJ |j}|d
 |d |d |d  d   }}|d | }}t||||| |j|d ||d |d fksJ |j}|d |d |d |d  d   }}|d | }}t||||| |j||d
 |d |d fkspJ |j}|d |d  }}|d |d  }}t||||| |j||d
 ||d fksJ d S )Nc                 S   s   d S rB   r   r   r   r   r   r      s    z'test_rectangle_resize.<locals>.onselectTrD   r   r,   r
   rF   )        r         $@      ^@r            rJ   rA   rI   )r   r!   r"   r=   extents)r   r   r'   rr   r   r   r:   r;   r   r   r   test_rectangle_resize   s2    &$&$rs   use_default_statec                 C   s  t  }dd }tj||dd}t|dddd |jd	ks<J | rR|jd
 d }nd}|j}|d |d  }}d\}}	|| ||	  }
}t||||
|| |j|d | |
|d |	 |fksJ |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|d | |
|d |d fks8J |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|d | |
|d |d fksJ |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|
|d | |d |d fks(J |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|
|d | |d |d fksJ |j}|d |d  }}d\}}	|| ||	  }
}t||||
|| |j|
|d | ||d |	 fksJ d S )Nc                 S   s   d S rB   r   r   r   r   r   r      s    z.test_rectangle_resize_center.<locals>.onselectTrk   F   rH   }      )     Q@     @_@     @P@g     @`@rQ   controlr   ro   r,   rp   r   rq   r,   rJ   rA   rI   r   r!   r"   r=   rr   _default_stateaddrt   r   r   r'   r<   rr   r   r   xdiffydiffr:   r;   r   r   r   test_rectangle_resize_center   sr    
&&&&r   c                 C   s  t  }dd }tj||dd}t|dddd |jd	ks<J | rR|jd
 d }nd}|j}|d |d  }}d\}}	|| ||	  }
}t||||
|| |j|d |
|d |d | fksJ |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|d |
|d |d | fks8J |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|d |
|d |d | fksJ |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|
|d |d |d | fks(J |j}|d |d |d |d  d   }}d}|| | }
}t||||
|| |j|
|d |d |d | fksJ |j}|d |d  }}d\}}	|| ||	  }
}t||||
|| |j|d |	 |d ||d fksJ d S )Nc                 S   s   d S rB   r   r   r   r   r   r      s    z.test_rectangle_resize_square.<locals>.onselectTrk   ru   rH   rF   s   rx   rn   rz   g     \@squareshiftr   ro   r|   r   rq   r,   r}   rJ   r~   r   r   r   r   r   r   test_rectangle_resize_square   sr    
&&&&r   c            
      C   s2  t  } dd }tj| |dd}t|dddd |jd	 |jd
 |jdksTJ |j}|d |d  }}d\}}|| ||  }}	t|||||	 |j|d | ||d | |d | fksJ |j}|d |d |d |d  d   }}d}|| | }}	t|||||	 |j|d | ||d | |d | fksBJ |j}|d |d |d |d  d   }}d}|| | }}	t|||||	 |j|d | ||d | |d | fksJ |j}|d |d |d |d  d   }}d}|| | }}	t|||||	 |j||d | |d | |d | fks>J |j}|d |d |d |d  d   }}d}|| | }}	t|||||	 |j||d | |d | |d | fksJ |j}|d |d  }}d\}}|| ||  }}	t|||||	 |j|d | |d | |	|d | fks.J d S )Nc                 S   s   d S rB   r   r   r   r   r   r   C  s    z5test_rectangle_resize_square_center.<locals>.onselectTrk   ru   rH   rF   r   r   rQ   r   r   ro   r|   r   rq   r,   r}   rp   r~   r   )r   r!   r"   r=   r   r   rr   )
r   r   r'   rr   r   r   r   r   r:   r;   r   r   r   #test_rectangle_resize_square_center@  sn    
&&&&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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
 |j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sXJ 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   s   d S rB   r   r   r   r   r   r     s    ztest_ellipse.<locals>.onselectr,   T)r   
grab_rangerD   r
      r
   r   r   r    )r   r   r   r8   r   r@   r   r   )rF      rF   r   r6   r
   r{   rv   r9   )r?   rv   r?   rv   r   rK   c                 S   s   g | ]}t |qS r   int.0er   r   r   
<listcomp>      z test_ellipse.<locals>.<listcomp>)r,   rK   r,   "   z
ctrl+shiftrw   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     r   )ru      ru   rw   )rq   I   Nr   rx   )r   r!   ZEllipseSelectorrr   r   r$   shaper   )r   r   r'   rr   r   r   r   test_ellipse  s\    r   c                  C   sb  t  } dd }tj| |dddddd}d	|_|jd
ks<J |jd	ksJJ |jdksXJ |jd	ksfJ t|dddd t|dddd t|dddd |jdksJ t|dddd t|dddd t|dddd |jdksJ t|dddd t|dddd t|dddd |jdks"J t|j	j
d  ds@J t|j	j
d  ds^J d S )Nc                 S   s   d S rB   r   r   r   r   r   r     s    z(test_rectangle_handles.<locals>.onselectr,   Tr[   rS   )Zmarkerfacecolorr^   )r   r   rD   rZ   r   ))r
   r   r   r
   )r
   r
   r   r   ))r
   ry   r   ry   )ry   r
   ry   r   r   r
   r   r   r   rF   r   )rF   r   rF   r      )l      r   r   )r,   r
   r,   r
   r   )r   r!   r"   rr   ZcornersZedge_centersr   ra   Z
same_colorZ_corner_handlesartistsZget_markerfacecolorre   r   r   r'   r   r   r   test_rectangle_handles  s@    
r   rD   c                    s   t    fdd}tj || d}t|ddddd t|d	d
ddd t|dd
ddd |jjsdJ |jdksrJ d|j_t|ddddd t|ddddd |jjsJ d S )Nc                    s
   d _ d S NTr   ZvminZvmaxr   r   r   r     s    z2test_rectangle_selector_onselect.<locals>.onselectrk   r   r
   n   r   r   r   r   rF   r   r        b@g     [@rn   Fr,   r   r!   r"   r   r   r   rr   rD   r   r'   r   r   r    test_rectangle_selector_onselect  s    r   ignore_event_outsidec                    s   t    fdd}tj || d}t|ddddd t|d	d
ddd t|dd
ddd |jjsdJ |jdksrJ d _t|dd
d
dd t|d	dddd t|ddddd | r̈ jrJ |jdksJ n jsJ |jdksJ d S )Nc                    s
   d _ d S r   r   r   r   r   r   r     s    z8test_rectangle_selector_ignore_outside.<locals>.onselect)r   r   r
   r   r   r   r   r   rF   r   r   F   )r         d@r   r   r   )r   r   r'   r   r   r   &test_rectangle_selector_ignore_outside  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sJ d|v r jsJ d S )Nc                    s"   d _ | dksJ |dksJ d S r	   r   r   r   r   r   r   $  s    zcheck_span.<locals>.onselectc                    s"   | dksJ |dksJ d _ d S )Nr
   r   T_got_on_mover   r   r   r   r   )  s    zcheck_span.<locals>.onmoveonmove_callbackr   r
   r   r   r   r   r   r   )r   r!   SpanSelectorr   r   r   )argsr&   r   r   r'   r   r   r   
check_span!  s    
r   c                   C   s>   t dddd t dddd t dtddd	 t ddd
 d S )N
horizontalr,   T)Zminspanr*   verticalr   )r   r   r/   r1   rk   )r   r4   r   r   r   r   test_span_selector=  s    r   c                    s   t    fdd}tj |d| d}t|ddddd t|d	d
ddd t|dd
ddd |jjsfJ |jdkstJ d|j_t|ddddd t|ddddd |jjsJ d S )Nc                    s
   d _ d S r   r   r   r   r   r   r   I  s    z-test_span_selector_onselect.<locals>.onselectr   rk   r   r
   r   r   r   r   r   )r
   r   Fr,   )r   r!   r   r   r   r   rr   r   r   r   r   test_span_selector_onselectD  s    
r   c                    s  t    fdd} fdd}tj |d|| d}t|dddd	d
 t|dddd	d
 t|dddd	d
  jsrJ  js|J |jdksJ d _d _t|dddd	d
 t|dddd	d
 t|dddd	d
 | r jrJ  jrJ |jdksJ n& jsJ  js
J |jdksJ d S )Nc                    s
   d _ d S r   r   r   r   r   r   r   b  s    z3test_span_selector_ignore_outside.<locals>.onselectc                    s
   d _ d S r   r   r   r   r   r   r   e  s    z1test_span_selector_ignore_outside.<locals>.onmover   )r   r   r   r
   r   r   r   rv   r   )r
   rv   Fr   r   )r   r   )r   r!   r   r   r   r   rr   )r   r   r   r'   r   r   r   !test_span_selector_ignore_outside_  s2    





r   rE   c                 C   s  t  }dd }tj||dd| d}t|ddddd	 t|d
dddd	 t|ddddd	 |jdksfJ t|ddddd	 t|d
dddd	 t|ddddd	 | r|jdksJ n|jdksJ t|ddddd	 t|d
dddd	 t|ddddd	 |jdksJ d S )Nc                  W   s   d S rB   r   r   r   r   r   r     s    z)test_span_selector_drag.<locals>.onselectr   TrC   r   r,   r   r   r   r
   rF   r   r,   r
   rI   rJ   rK   )rA   r   )rI   rK   rL   rM   rN   )rL   rM   )r   r!   r   r   rr   )rE   r   r   r'   r   r   r   test_span_selector_drag  s&    r   c                  C   s   t  } dd }tj| |ddd}|jdks.J |jjdks>J tt t| |d}W d    n1 sl0    Y  d|_|jdksJ |jjdksJ tt d|_W d    n1 s0    Y  d S )	Nc                  W   s   d S rB   r   r   r   r   r   r     s    z.test_span_selector_direction.<locals>.onselectr   Trk   Zinvalid_directionr   Zinvalid_string)r   r!   r   	direction_edge_handlesr3   raises
ValueErrorr   r   r   r   test_span_selector_direction  s    ,r   c               	   C   s  t  } dd }tj| |ddtdddtdd	d
}t|ddddd t|ddddd t|ddddd |j}| tjddd	ksJ |j	ddd | tjddd	ksJ |j
D ]$}| dksJ | dksJ q|jddd |j
D ]&}| dksJ | dksJ qd S )Nc                 S   s   d S rB   r   r   r   r   r   r     s    z;test_span_selector_set_props_handle_props.<locals>.onselectr   TrS   rT   rU   rW   rX   rY   r   r   r,   r   r   r   r
   rF   r   r[   r\   colorrV   )r   r!   r   r4   r   r_   r`   ra   rb   rc   rd   	get_colorrf   rg   rh   r   r   r   )test_span_selector_set_props_handle_props  s(    


r   selectorspanZ	rectanglec                 C   sV  t  }dd }t||dd}| dkr4tj}d|d< ntj}|f i |}t|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 |jrJ t  }d|d< |f i |}|jsJ t|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 |js8J t|ddd |jrRJ d S )Nc                  W   s   d S rB   r   r   r   r   r   r     s    z%test_selector_clear.<locals>.onselectT)r   r   rD   r   r   r   r   r,   r   r   r   r
   rF   r   rw   r   r6   escaper7   )r   r4   r!   r   r"   r   _selection_completedr   )r   r   r   r&   ZSelectorr'   r   r   r   test_selector_clear  s4    


r   c                 C   s"  t  }dd }| dkr,tj||dddd}ntj||dd}t|dd	d	d
d t|dddd
d t|dddd
d |js|J |jsJ | dkr|jdksJ |  |jrJ |jrJ t|dd	d	d
d t|dddd
d t|dddd
d |jsJ |jsJ | dkr|jdksJ d S )Nc                  W   s   d S rB   r   r   r   r   r   r     s    z,test_selector_clear_method.<locals>.onselectr   r   T)rD   r   rk   r   r,   r   r   r   r
   rF   r   r   rG   )r,   rG   )	r   r!   r   r"   r   r   visiblerr   clear)r   r   r   r'   r   r   r   test_selector_clear_method  s2    






r   c                  C   s   t  } g d}tj| |ddd}|jD ]}| r6J | r&J q&|d |d |jD ]}| snJ | s^J q^|j|ksJ d S )N)rA   r@   rG   r   F)r*   T)	r   r!   ZToolLineHandlesr   Zget_animatedZget_visibleZset_visibleZset_animated	positions)r   r   Ztool_line_handleri   r   r   r   test_tool_line_handle&  s    




r   r   )r   r   c                 C   s6  t dd\}}|ddgddg |jj  | }| }tj	|t
| dd}| |ksbJ | |ksrJ | dkr~|n|}|jjt|ksJ dd	g}d
dg}|}	t|d|d |d dd t|d|d |d dd | |ksJ | |ksJ | dkrdnd}
||
 |	|
 g}|jj|ks2J d S )Nr   r,   rA   r@   Trk   r   g      %@g      '@      r   r   r   r   )pltsubplotsZplotfigurecanvasZdrawZ
get_xboundZ
get_yboundr!   r   printr   r   listr   )r   figr   Zx_boundZy_boundr'   boundZ
press_dataZ	move_dataZrelease_dataindexZhandle_positionsr   r   r   test_span_selector_bound<  s(    r   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sfJ d S )Nc                    s   d _ | g dksJ d S )NT))r
   r
   )rv   rv   )r   r   r   vertsr   r   r   r   \  s    z&check_lasso_selector.<locals>.onselectr   r
   r   r   r   rv   r   r   )r   r!   ZLassoSelectorr   r   r%   r   r   r   check_lasso_selectorY  s    r   c                   C   s(   t   t dtddd t ddd d S )NFred)r   )r*   r2   Tr   r+   )r   r4   r   r   r   r   test_lasso_selectorh  s    r   c                  C   sb   t  } t| dd}| g dks(J |d | g dksFJ |dd }|| d S )N)arS   c)TFTr   )FFTc                   S   s   d S rB   r   r   r   r   r   <lambda>u  r   z#test_CheckButtons.<locals>.<lambda>)r   r!   CheckButtonsZ
get_statusZ
set_activeZ
on_clickedZ
disconnect)r   checkZcidr   r   r   test_CheckButtonsn  s    
r   toolbar)r   Ztoolbar2Ztoolmanagerc                 C   s   t tjd|  ddlm} | }| }t }t|d}|	| |
| |jdks\J t|d |d |jdks~J |jdksJ ||j |  |jdksJ t|d t|d	d
d t|d	dd |jdksJ d S )Nr   r   )Mock Z_clickzx**2r   rq   Z	_keypress+r7   5ro   )r4   __setitem__r   rcParamsZunittest.mockr   r   r!   ZTextBoxZ	on_submitZon_text_changetextr   set_valZ
call_countZbegin_typingZstop_typing)r   r   Zsubmit_eventZtext_change_eventr   r'   r   r   r   test_TextBoxy  s(    




r   zcheck_radio_buttons.pngZmpl20)styleZ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_factorr\   )left)皙?ffffff?333333?r   )r   rT   r   r   )zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)r   r   r   Zsubplots_adjustaxesr!   RadioButtonsr   )Zrax1Z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   )ZB1ZB2ZB3ZB4ZB5ZB6ZB7ZB8ZB9ZB10ZB11ZB12ZB13ZB14ZB15)r   r   r!   r   )Z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@0    Y  tt$ tj|ddddd W d    n1 s~0    Y  d S )Nr   rl         8@rm   )r   labelvalminvalmax	slidermin)r   r   r  r  	slidermax)r   r   r3   r   r   r!   Slider)r   r   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sFJ tj|dddd|d	}|j|jkslJ d S )
Nr   rl   r   g      @r   r   r  r  valinit      ?)r   r   r  r  r  r  rm   )r   r   r  r  r  r  r   r   r!   r  val)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s0J tj|ddddd}|j|jksTJ d S )Nr   rl   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s0J tj|ddddg dd}|jd	ksXJ d S )
Nr   rl   r   g&@r   )r   r   r  r  r  Zvalstepr   )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sJ |j |j	
 }t|jg d
 d S )Nr   r         r   )r   r   r  r  r  orientationr,   )r         ?竪?rW   r   )r  r   rW   r  )r   r   r!   r  r   r  polyget_extentstransformed	transAxesinvertedr   Zbounds)r   r   r  boxr   r   r   test_slider_horizontal_vertical  s     

r  c                  C   sD   t  \} }tj|ddddd}|d |  |jdks@J d S )Nr   r   r   rW   r        ?)r   r   r!   r  r   resetr  r  r   r   r   test_slider_reset  s
    
r   r  r   r   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 |  t	|jddg d S )Nr   )r   r   ro   rq   )r   r   rq   ro   r   rl   r	  r   (\?)r   r   r  r  r  r  )r   r  r!  r  )r   r!  )rT   333333?)rT   r  r"  r  )rT   r   )r   rT   )r,   )r   r   )r   r   r!   ZRangeSliderr  r  r  r  r  r   Z
get_pointsflattenr  r   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sRJ  j|ks`J 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   5  s    z(check_polygon_selector.<locals>.onselectN)r   r)  r!   PolygonSelectorr   r*  )event_sequenceexpected_resultZselections_countr   r'   etype
event_argsr   r   r   check_polygon_selector  s    r1  c                 C   s.   dt | |dfdt | |dfdt | |dfgS )Nr   r   r   r   r4   r   r   r   r   polygon_place_vertexB  s    r3  c                 C   s2   dt | |dfdt | |ddfdt | |ddfgS )Nr   r   r   ro   r   r   r2  r   r   r   r   polygon_remove_vertexH  s    r4  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)rG   rG   r   rG   rG   r   rG   r   r   ))r?   rG   r6  r7  r6   r{   r7   r   r   r   r?   r   r9   ))rG   r?   )r   r?   r7  r   r
   rv   rq   ))r?   r?   )rL   r?   )r?   rL   r   r   )r3  r1  r4   )r.  r-  r   r   r   test_polygon_selectorN  s    	
	

r8  c                     sD  t   d _ fdd} tj | tdddtddd	}td
d
tdd
 td
d td
d
 }|D ]\}}t||fi | qd|j}| dksJ |	 dksJ |j
ddd | dksJ |	 dksJ |jD ]$}| dksJ |	 dksJ q|jddd |jD ]*}| dks*J |	 dksJ qd S )Nr   c                    s     j d7  _ |  _d S r'  r(  r+  r   r   r   r     s    z>test_polygon_selector_set_props_handle_props.<locals>.onselectrS   rT   r   rW   rX   )r2   rZ   rG   r   r[   r\   )r   r)  r!   r,  r4   r3  r   r_   r   rf   rc   rd   rg   )r   r'   r-  r/  r0  ri   r   r   r   ,test_polygon_selector_set_props_handle_props  s:    


r9  zhorizOn, vertOn))TT)TF)FTc           	      C   s  t jddd\}\}}}tj|j||fd| |d}|rHt|jdksHJ | r^t|jdks^J t|ddd	}|	| |jD ]}|
 d
ks|J q||jD ]}| dksJ qt|ddd	}|	| |jD ]}|
 d
ksJ q|jD ]}| dksJ qd S )Nro   T)ZsharexF)r*   horizOnvertOnrq   rW   r  r   )rW   rW   )r  r  r  )r   r   r!   ZMultiCursorr   lenZvlinesZhlinesr   r   Z	get_xdataZ	get_ydata)	r:  r;  r   Zax1Zax2Zax3Zmultieventlr   r   r   test_MultiCursor  s(    





r?  c                 C   s6   |   }|  }dd }tj||ddid}d|_d S )Nc                 S   s   d S rB   r   r   r   r   r   r     s    z&test_rect_visibility.<locals>.onselectr   Fr1   )rT   g?r\   r   )r   r!   r"   rr   )Zfig_testZfig_refZax_test_r   r'   r   r   r   test_rect_visibility  s    rA  r%  )r   rq   ro   c                 C   sp   g d}t |d  t |d  t |d  t |d  g}|| t dd |tdd t|g }t||d d S )Nr5  r   r   rq      )r3  insertappendr4  sumr1  )r%  r   r-  r   r   r   test_polygon_selector_remove
  s    




rF  c                  C   s\   g d} t | d  t | d   t | d   t | d   t| d   }t|| dd  d d S )Nr5  r   r   rq   )r3  r4  r1  )r   r-  r   r   r   (test_polygon_selector_remove_first_point  s    




rG  c                  C   s   g d} t | d  t | d   t | d   t | d   t| d   t| d   t | d   }t }dd }t||}|D ]\}}t||fi | qz|j| dd ksJ d S )Nr5  r   r   rq   c                 S   s   d S rB   r   r+  r   r   r   r   4  s    z.test_polygon_selector_redraw.<locals>.onselect)r3  r4  r   r!   r,  r   r   )r   r-  r   r   r'   r/  r0  r   r   r   test_polygon_selector_redraw%  s(    





	
rH  )N)EZmatplotlib._api.deprecationr   Zmatplotlib.colorscolorsra   Zmatplotlib.widgetsr!   Zmatplotlib.pyplotZpyplotr   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing.widgetsr   r   r   Znumpy.testingr   r3   r(   r5   r=   markZparametrizerR   rj   rs   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  r  r  r  r   r&  r1  r3  r4  r8  r9  r?  rA  rF  rG  rH  r   r   r   r   <module>   s    

 (
H
HD7-



%
#
(
"

!


!#`%
$


