o
    :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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ZepressZereleaseax ?/usr/lib/python3/dist-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 sw   Y  t ddd tjtd	d t d
ddd W d    n1 s?w   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r(t | 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s2J t|ddddd	 t|d
dddd	 t|ddddd	 |j|ksTJ t|ddddd	 t|d
dddd	 t|ddddd	 |jdksvJ d S )Nc                 S      d S Nr   r   r   r   r   r   M      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)rG   Z
new_centerr   r   r'   r   r   r   test_rectangle_dragG   s"   
rT   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sCJ |j	ddd | tjdddksWJ |j
D ]}| dksdJ | dkslJ qZ|jddd |j
D ]}| dksJ | dksJ qwd S )Nc                 S   rB   rC   r   r   r   r   r   r   m   rD   z@test_rectangle_selector_set_props_handle_props.<locals>.onselectTb皙?Z	facecoloralpha      ?rX   rF   r2   handle_propsr   r   r,   r   r   r   r
   rH   r   r333333?Zblack)markeredgecolorrX   )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*   



rk   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sJJ |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sJ |j}|d |d }}|d |d }}t||||| |j||d
 ||d fksJ d S )Nc                 S   rB   rC   r   r   r   r   r   r      rD   z'test_rectangle_resize.<locals>.onselectTrF   r   r,   r
   rH   )        r         $@      ^@r            rL   rA   rK   )r   r!   r"   r=   extents)r   r   r'   rs   r   r   r:   r;   r   r   r   test_rectangle_resize   s2   &"&""rt   use_default_statec                 C   s  t  }dd }tj||dd}t|dddd |jd	ksJ | r)|jd
 d }nd}|j}|d |d }}d\}}	|| ||	 }
}t||||
|| |j|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 |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sNJ |j}|d |d }}d\}}	|| ||	 }
}t||||
|| |j|
|d | ||d |	 fksJ d S )Nc                 S   rB   rC   r   r   r   r   r   r      rD   z.test_rectangle_resize_center.<locals>.onselectTrl   F   rJ   }      )     Q@     @_@     @P@g     @`@rS   controlr   rp   r,   rq   r   rr   r,   rL   rA   rK   r   r!   r"   r=   rs   _default_stateaddru   r   r   r'   r<   rs   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 | r)|jd
 d }nd}|j}|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 |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sNJ |j}|d |d }}d\}}	|| ||	 }
}t||||
|| |j|d |	 |d ||d fksJ d S )Nc                 S   rB   rC   r   r   r   r   r   r      rD   z.test_rectangle_resize_square.<locals>.onselectTrl   rv   rJ   rH   s   ry   ro   r{   g     \@squareshiftr   rp   r}   r   rr   r,   r~   rL   r   r   r   r   r   r   r   test_rectangle_resize_square   sr   
&
&
&&r   c            
      C   s.  t  } dd }tj| |dd}t|dddd |jd	 |jd
 |jdks*J |j}|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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s\J |j}|d |d }}d\}}|| || }}	t|||||	 |j|d | |d | |	|d | fksJ d S )Nc                 S   rB   rC   r   r   r   r   r   r   C  rD   z5test_rectangle_resize_square_center.<locals>.onselectTrl   rv   rJ   rH   r   r   rS   r   r   rp   r}   r   rr   r,   r~   rq   r   r   )r   r!   r"   r=   r   r   rs   )
r   r   r'   rs   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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   rB   rC   r   r   r   r   r   r     rD   ztest_ellipse.<locals>.onselectr,   T)r   
grab_rangerF   r
      r
   r   r   r    )r   r   r   r8   r   r@   r   r   )rH      rH   r   r6   r
   r|   rw   r9   )r?   rw   r?   rw   r   rM   c                 S      g | ]}t |qS r   int.0er   r   r   
<listcomp>      z test_ellipse.<locals>.<listcomp>)r,   rM   r,   "   z
ctrl+shiftrx   c                 S   r   r   r   r   r   r   r   r     r   )rv      rv   rx   )rr   I   Nr   ry   )r   r!   ZEllipseSelectorrs   r   r$   shaper   )r   r   r'   rs   r   r   r   test_ellipse  s\    r   c                  C   s\  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  dsJ t|j	j
d  dsJ d S )Nc                 S   rB   rC   r   r   r   r   r   r     rD   z(test_rectangle_handles.<locals>.onselectr,   Tr]   rU   )Zmarkerfacecolorr_   )r   r   rF   r\   r   ))r
   r   r   r
   )r
   r
   r   r   ))r
   rz   r   rz   )rz   r
   rz   r   r   r
   r   r   r   rH   r   )rH   r   rH   r      )l      r   r   )r,   r
   r,   r
   r   )r   r!   r"   rs   ZcornersZedge_centersr   rb   Z
same_colorZ_corner_handlesartistsZget_markerfacecolorrf   r   r   r'   r   r   r   test_rectangle_handles  s@   r   rF   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s2J |jdks9J d|j_t|ddddd t|ddddd |jjsUJ d S )Nc                    
   d _ d S NTr   ZvminZvmaxr   r   r   r        
z2test_rectangle_selector_onselect.<locals>.onselectrl   r   r
   n   r   r   r   r   rH   r   r        b@g     [@ro   Fr,   r   r!   r"   r   r   r   rs   rF   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s2J |jdks9J d _t|dd
d
dd t|d	dddd t|ddddd | rg jr^J |jdkseJ d S  jslJ |jdkssJ d S )Nc                    r   r   r   r   r   r   r   r     r   z8test_rectangle_selector_ignore_outside.<locals>.onselect)r   r   r
   r   r   r   r   r   rH   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sDJ d|v rM jsOJ d S 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   rl   )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s3J |jdks:J d|j_t|ddddd t|ddddd |jjsVJ d S )Nc                    r   r   r   r   r   r   r   r   I  r   z-test_span_selector_onselect.<locals>.onselectr   rl   r   r
   r   r   r   r   r   )r
   r   Fr,   )r   r!   r   r   r   r   rs   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s9J  js>J |jdksEJ d _d _t|dddd	d
 t|dddd	d
 t|dddd	d
 | r{ jrmJ  jrrJ |jdksyJ d S  jsJ  jsJ |jdksJ d S )Nc                    r   r   r   r   r   r   r   r   b  r   z3test_span_selector_ignore_outside.<locals>.onselectc                    r   r   r   r   r   r   r   r   e  r   z1test_span_selector_ignore_outside.<locals>.onmover   )r   r   r   r
   r   r   r   rw   r   )r
   rw   Fr   r   )r   r   )r   r!   r   r   r   r   rs   )r   r   r   r'   r   r   r   !test_span_selector_ignore_outside_  s2   






r   rG   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s3J t|ddddd	 t|d
dddd	 t|ddddd	 | rX|jdksWJ n|jdks_J 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                  W   rB   rC   r   r   r   r   r   r     rD   z)test_span_selector_drag.<locals>.onselectr   TrE   r   r,   r   r   r   r
   rH   r   r,   r
   rK   rL   rM   )rA   r   )rK   rM   rN   rO   rP   )rN   rO   )r   r!   r   r   rs   )rG   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 s6w   Y  d|_|jdksEJ |jjdksMJ tt d|_W d    d S 1 saw   Y  d S )	Nc                  W   rB   rC   r   r   r   r   r   r     rD   z.test_span_selector_direction.<locals>.onselectr   Trl   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sDJ |j	ddd | tjddd	ksXJ |j
D ]}| dkseJ | dksmJ q[|jddd |j
D ]}| dksJ | dksJ qxd S )Nc                 S   rB   rC   r   r   r   r   r   r     rD   z;test_span_selector_set_props_handle_props.<locals>.onselectr   TrU   rV   rW   rY   rZ   r[   r   r   r,   r   r   r   r
   rH   r   r]   r^   colorrX   )r   r!   r   r4   r   r`   ra   rb   rc   rd   re   	get_colorrg   rh   ri   r   r   r   )test_span_selector_set_props_handle_props  s*   


r   selectorspanZ	rectanglec                 C   sR  t  }dd }t||dd}| dkrtj}d|d< ntj}|d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rVJ t  }d|d< |di |}|jsiJ 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sJ t|ddd |jrJ d S )Nc                  W   rB   rC   r   r   r   r   r   r     rD   z%test_selector_clear.<locals>.onselectT)r   r   rF   r   r   r   r   r,   r   r   r   r
   rH   r   rx   r   r6   escaper7   r   )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sCJ | dkrN|jdksNJ |  |jrWJ |jr\J 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 d S d S )Nc                  W   rB   rC   r   r   r   r   r   r     rD   z,test_selector_clear_method.<locals>.onselectr   r   T)rF   r   rl   r   r,   r   r   r   r
   rH   r   r   rI   )r,   rI   )	r   r!   r   r"   r   r   visiblers   clear)r   r   r   r'   r   r   r   test_selector_clear_method  s6   






r   c                  C   s   t  } g d}tj| |ddd}|jD ]}| rJ | r!J q|d |d |jD ]}| s7J | s=J q/|j|ksEJ d S )N)rA   r@   rI   r   F)r*   T)	r   r!   ZToolLineHandlesr   Zget_animatedZget_visibleZset_visibleZset_animated	positions)r   r   Ztool_line_handlerj   r   r   r   test_tool_line_handle&  s   




r   r   )r   r   c                 C   s2  t dd\}}|ddgddg |jj  | }| }tj	|t
| dd}| |ks1J | |ks9J | dkr?|n|}|jjt|ksKJ dd	g}d
dg}|}	t|d|d |d dd t|d|d |d dd | |kswJ | |ksJ | dkrdnd}
||
 |	|
 g}|jj|ksJ d S )Nr   r,   rA   r@   Trl   r   g      %@g      '@      r   r   r   r   )pltsubplotsZplotZfigurecanvasZdrawZ
get_xboundZ
get_yboundr!   r   printr   r   listr   )r   figr   Zx_boundZy_boundr'   Z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s3J d S )Nc                    s   d _ | g dksJ d S )NT))r
   r
   )rw   rw   )r   r   r   vertsr   r   r   r   \  s   z&check_lasso_selector.<locals>.onselectr   r
   r   r   r   rw   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 )NFZ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s#J |dd }|| d S )N)arU   c)TFTr   )FFTc                   S   rB   rC   r   r   r   r   r   <lambda>u  s    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sFJ ||j |  |jdksWJ t|d t|d	d
d t|d	dd |jdksqJ d S )Nr   r   )Mock Z_clickzx**2r   rr   Z	_keypress+r7   5rp   )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)Z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   rV   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 w   Y  tt tj|ddddd W d    d S 1 s@w   Y  d S )Nr   rm         8@rn   )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s#J tj|dddd|d	}|j|jks6J d S )
Nr   rm   r   g      @r   r   r  r  valinit      ?)r   r   r  r  r  r  rn   )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sJ tj|ddddd}|j|jks*J d S )Nr   rm   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   rm   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sMJ |j |j	
 }t|jg d
 d S )Nr   r         r   )r   r   r  r  r  orientationr,   )r         ?竪?rY   r   )r  r   rY   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   rY   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   rp   rr   )r   r   rr   rp   r   rm   r	  r   (\?)r   r   r  r  r  r  )r   r  r!  r  )r   r!  )rV   333333?)rV   r  r"  r  )rV   r   )r   rV   )r,   )r   r   )r   r   r!   ZRangeSliderr  r  r  r  r  r   Z
get_pointsZ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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                         j d7  _ |  _d S Nr   _selections_count_current_resultZverticesr   r   r   r   5     
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   r2  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   r4  c                 C   s2   dt | |dfdt | |ddfdt | |ddfgS )Nr   r   r   rp   r   r   r3  r   r   r   r   polygon_remove_vertexH  s   r5  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)rI   rI   r   rI   rI   r   rI   r   r   ))r?   rI   r7  r8  r6   r|   r7   r   r   r   r?   r   r9   ))rI   r?   )r   r?   r8  r   r
   rw   rr   ))r?   r?   )rN   r?   )r?   rN   r   r   )r4  r2  r4   )r/  r.  r   r   r   test_polygon_selectorN  s   	
	

r9  c                     s>  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 | q2|j}| dksKJ |	 dksSJ |j
ddd | dksbJ |	 dksjJ |jD ]}| dkswJ |	 dksJ qm|jddd |jD ]}| dksJ |	 dksJ qd S )Nr   c                    r&  r'  r(  r+  r   r   r   r     r,  z>test_polygon_selector_set_props_handle_props.<locals>.onselectrU   rV   r   rY   rZ   )r2   r\   rI   r   r]   r^   )r   r)  r!   r-  r4   r4  r   r`   r   rg   rd   re   rh   )r   r'   r.  r0  r1  rj   r   r   r   ,test_polygon_selector_set_props_handle_props  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 )Nrp   T)ZsharexF)r*   horizOnvertOnrr   rY   r  r   )rY   rY   )r  r  r  )r   r   r!   ZMultiCursorr   lenZvlinesZhlinesr   r   Z	get_xdataZ	get_ydata)	r;  r<  r   Zax1Zax2Zax3ZmultiZeventlr   r   r   test_MultiCursor  s*   





r?  c                 C   s6   |   }|  }dd }tj||ddid}d|_d S )Nc                 S   rB   rC   r   r   r   r   r   r     rD   z&test_rect_visibility.<locals>.onselectr   Fr1   )rV   g?r^   r   )r   r!   r"   rs   )Zfig_testZfig_refZax_test_r   r'   r   r   r   test_rect_visibility  s   
rA  r$  )r   rr   rp   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 )Nr6  r   r   rr      )r4  insertappendr5  sumr2  )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 )Nr6  r   r   rr   )r4  r5  r2  )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 | q=|j| dd ksVJ d S )Nr6  r   r   rr   c                 S   rB   rC   r   r+  r   r   r   r   4  rD   z.test_polygon_selector_redraw.<locals>.onselect)r4  r5  r   r!   r-  r   r   )r   r.  r   r   r'   r0  r1  r   r   r   test_polygon_selector_redraw%  s(   






	rH  rC   )EZmatplotlib._api.deprecationr   Zmatplotlib.colorsZcolorsrb   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=   ZmarkZparametrizerT   rk   rt   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%  r2  r4  r5  r9  r:  r?  rA  rF  rG  rH  r   r   r   r   <module>   s    

 (
H
HD7-



%
#
(
"

!


!#`%
$


