a
    s=icC                     @   s  d dl mZ d dlZ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 d dlmZ d dlmZmZ d dlmZmZmZmZmZ d dlZd dlmZ d dlZejd	d
 Z ej!"de# dfe#ddddfe#ddddfe#dddddfe#dddddfe#e#ddddfgdd Z$ej!"dddgej!"dd dgdd gdd!ggej!"d"d dgdd gdd!ggd#d$ Z%d%d& Z&ej!"d'dd(gdd)ggd*d+ Z'd,d- Z(d.d/ Z)d0d1 Z*ej!"d2ddgd3d4 Z+ej!"d2ddgd5d6 Z,d7d8 Z-ej!"d9ej.ej/gd:d; Z0d<d= Z1ej!"d>ddgd?d@ Z2dAdB Z3dCdD Z4ej!"dEddgdFdG Z5ej!"dHddgdIdJ Z6ej!"dKdLde#dddMfdNde#ddOfdLde#e#dddfdLde#ddPfgdQdR Z7ej!"dEddgdSdT Z8ej!"dHddgdUdV Z9ej!"dWddgdXdY Z:dZd[ Z;d\d] Z<ej!"d^d_d`gdadb Z=ej!"d^d_d`gdcdd Z>dedf Z?dgdh Z@ej!"didjdkdl ZAej!jBdmddndodp ZCdqdr ZDdsdt ZEej!"due# e#de#dvdwdxe#dddgdydz ZFd{d| ZGej!"d}g d~dd ZHedgddddd ZIedgddddd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPej!"ddLdNgdd ZQej!"ddLdNgdd ZRdd ZSdd ZTdd ZUej!"dddgdd ZVej!"dddgdd ZWe dd ZXej!"dg dej!"dddgdd ZYej!"dddgdd ZZej!"dddgdd Z[ej!"dddgedgddd Z\dd Z]ej!"dddgej!"dddgdd Z^dS )    )nullcontextN)mock)MatplotlibDeprecationWarning)
MouseEvent)check_figures_equalimage_comparison)click_and_dragdo_eventget_ax
mock_eventnoop)assert_allclosec                   C   s   t  S N)r
    r   r   n/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/tests/test_widgets.pyax   s    r   zkwargs, warning_msglineF)drawtypeuseblitz)Support for drawtype='line' is deprecatedT   )r   buttonnone
   )r   minspanxminspanyz)Support for drawtype='none' is deprecatedpixels)r   r   
spancoords)fill)propsc                 C   s   t jtd d}|r tjt|dnt $ tj| |fi |}W d    n1 sP0    Y  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\\}}}|jdksJ |jdksJ |jdksJ |jdksJ |i ksJ d S )NspecZreturn_valuematchpressd   r   xdataydatar   onmove   release   r   )r   r   )      Y@r$   r)   r)   r$   )r$   r)   r)   r$   r$   )err_msg)r   Mockr   pytestwarnsr   r   widgetsRectangleSelectorr	   getr   geometryassert_called_once	call_argsr&   r'   )r   kwargsZwarning_msgonselecttoolepressereleaser   r   r   test_rectangle_selector   s.    2r<   r   datazminspanx, x1      %@   zminspany, y1c                 C   s,  t jtd d}d\}}|dkrB| j||f| j||f \}}tj| |d|||d}	t|	||f||fd |	jrxJ |	  t|	ddd |	jsJ |
  |  t|	||f||fd |	jrJ |
  |j\\}
}}|
j|ksJ |
j|ksJ |j|ks
J |j|ksJ |i ks(J d S )	Nr   r   r   r   T)interactiver   r   r   startend   rF      rH   )r   r.   r   	transData	transformr1   r2   r   _selection_completedassert_not_calledr5   
reset_mockr6   r&   r'   )r   r   r   x1r   y1r8   Zx0Zy0r9   r:   r;   r7   r   r   r   test_rectangle_minspan>   s4    



rP   c                 C   s`   t | dd }| sJ tjtdd d|_W d    n1 sF0    Y  | r\J d S )Nc                  W   s   d S r   r   argsr   r   r   <lambda>e       z=test_deprecation_selector_visible_attribute.<locals>.<lambda>z was deprecated in Matplotlib 3.6r!   F)r1   r2   get_visibler/   r0   r   visibler   r9   r   r   r   +test_deprecation_selector_visible_attributed   s    $rX   zdrag_from_anywhere, new_center)<   K   rH   rF   c                 C   sj   t j| td|d}t|ddd |jdks.J t|ddd |j|ksJJ t|d	d
d |jdksfJ d S )NT)r8   rA   drag_from_anywherer   r   r$   x   rB   )2   A         #   rc         ri      )      )r1   r2   r   r   center)r   r\   Z
new_centerr9   r   r   r   test_rectangle_dragp   s    
ro   c                 C   s   t j| tdtdddtddd}t|dd	d
 |j}| tjdddksPJ |j	ddd | tjdddksxJ |j
D ]$}| dksJ | dks~J q~|jddd |j
D ]$}| dksJ | dksJ qd S )NTb皙?Z	facecoloralpha      ?rs   )r8   rA   r   handle_propsr]   r^   rB   r333333?black)markeredgecolorrs   )r1   r2   r   dictr   _selection_artistget_facecolormcolorsto_rgba	set_props_handles_artistsget_markeredgecolor	get_alphaset_handle_propsr   r9   artistr   r   r   .test_rectangle_selector_set_props_handle_props   s     



r   c                 C   s  t j| tdd}t|ddd |jdks,J |j}|d |d  }}|d	 |d
  }}t|||f||fd |j|d ||d |fksJ |j}|d |d |d |d  d   }}|d	 | }}t|||f||fd |j|d ||d |d fk sJ |j}|d |d |d |d  d   }}|d | }}t|||f||fd |j||d |d |d fksrJ |j}|d |d  }}|d |d  }}t|||f||fd |j||d ||d fksJ d S )NTr8   rA   r]   r^   rB   )        r,         $@      ^@r      r      r      rd   rF   rc   )r1   r2   r   r   extents)r   r9   r   r&   r'   	xdata_new	ydata_newr   r   r   test_rectangle_resize   s.    &$&$r   c                 C   s   t j| tdd}t|ddd tt |d W d    n1 sH0    Y  tt |d W d    n1 s|0    Y  |d |d	 |d
 d S )NTr   F   ra   }      rB   unsupported_stateclearmovesquarern   )r1   r2   r   r   r/   raises
ValueError	add_staterW   r   r   r   test_rectangle_add_state   s    ((

r   r   c                 C   s"  t j| tdd}t|ddd |jdks,J |r@|d d }nd}|j}|d	 |d
  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d | |	|d | |
fksJ |j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d | |	|d |d
 fks2J |j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d | |	|d |d
 fksJ |j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 | |d |d
 fks.J |j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 | |d |d
 fksJ |j}|d |d  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|	|d	 | |
|d
 | fksJ d S )NTr   r   r   rB   )     Q@     @_@     @P@g     @`@rn   controlr   r   r   r   rC   rD   keyr   r   r   rd   rF   rc   r1   r2   r   r   r   r   r   r   r9   Zuse_keyr   r&   r'   xdiffydiffr   r   r   r   r   test_rectangle_resize_center   s    

&&&&r   c                 C   s"  t j| tdd}t|ddd |jdks,J |r@|d d }nd}|j}|d	 |d
  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d |	|d |d
 | fksJ |j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d |	|d |d
 | fks2J |j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d |	|d |d
 | fksJ |j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 |d |d
 | fks.J |j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 |d |d
 | fksJ |j}|d |d  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d | |d	 |
|d
 fksJ d S )NTr   r   r_   s   rB   r   r   r   g     \@r   shiftr   r   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   test_rectangle_resize_square  s    

&&&&r   c           	      C   s*  t j| tdd}t|ddd |d |d t|jd |j}|d	 |d
  }}d\}}|| ||  }}t|||f||fd t|j|d | ||d | |d
 | f |j}|d	 |d |d
 |d  d   }}d}|| | }}t|||f||fd t|j|d | ||d | |d
 | f |j}|d	 |d |d
 |d  d   }}d}|| | }}t|||f||fd t|j|d | ||d | |d
 | f |j}|d |d |d
 |d  d   }}d}|| | }}t|||f||fd t|j||d	 | |d | |d
 | f |j}|d |d |d
 |d  d   }}d}|| | }}t|||f||fd t|j||d	 | |d | |d
 | f |j}|d |d  }}d\}}|| ||  }}t|||f||fd t|j|d | |d	 | ||d
 | f d S )NTr   r   r   rB   r   rn   r   r   r   r   r   r   r   r   r   r   r   )r1   r2   r   r   r   r   r   )	r   r9   r   r&   r'   r   r   r   r   r   r   r   #test_rectangle_resize_square_centerc  sj    

&&&&r   selector_classc                 C   sT  || t dd}t|ddd |jdks*J t|jdks<J t|dd	d
 |jtdgks^J t|jdkspJ t|ddd t|dd	d
 t|jdksJ |jdksJ t|jddd d|_|jdksJ t|j	t
g dg dgdd t|ddd t|jddd |tjkrPtt d|j_W d    n1 sF0    Y  d S )NTr   r$   r$   r      rB   r$   r   r$   r   r   on_key_pressrw   r   rotater   )r_      g(\9@g{Gz?)Zatol-   )gR]@     xa@g=
ףp[@g     V@)g     W@g=
ףp]@g     b@g(\^@)n   r   )r      )r$   r   r$   g
ףp=b@Zunvalid_value)r   r   r   len_stater	   setr   Zrotationcornersnparrayr1   r2   r/   r   r   r|   Zrotation_point)r   r   r9   r   r   r   test_rectangle_rotate  s2    
r   c                 C   s   t j| tdd}t|ddd |jdks,J t|jdks>J dD ]<}|| t|jd	ksbJ || t|jdksBJ qBd S )
NTr   r   r   rB   r   r   )r   r   rn   r   )	r1   r2   r   r   r   r   r   r   Zremove_state)r   r9   stater   r   r   test_rectangle_add_remove_set  s    

r   use_data_coordinatesc                 C   s`  |  d tj| td|d}t|ddd |jdks8J |d |d	 |r|j}|d
 |d |d
 |d    }}}d|d |d |d  d   }}|| | }	}
|d | }t|||f|	|
fd t|j|d | |	|| || g nj|j}|d
 |d  }}d}|| | }	}
|d
 |j }t|||f|	|
fd t|j|d | |	ddg d S )N皙?T)r8   rA   r   r   r   rB   r   r   rn   r   r   r   r   r   g      G@g     `@)	Z
set_aspectr1   r2   r   r   r   r   r   Z_aspect_ratio_correction)r   r   r9   r   r&   r'   widthr   Zycenterr   r   Zychanger   r   r   *test_rectangle_resize_square_center_aspect  s6    



$"r   c                 C   s   t j| tddd}d|_t|ddd |jdks4J t|d	dd
d |jdksRJ t|dddd dd |jD }|g dksJ t|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 modifiersr   T)r8   
grab_rangerA   r$      r$   r   r   r   )r   r   rB   )r_      r_   r   r   r   r   )rZ   r   rZ   r   r@   )rf   rH   r   c                 S   s   g | ]}t |qS r   int.0er   r   r   
<listcomp>  rT   z test_ellipse.<locals>.<listcomp>)r   rf   r   rf   r   z
ctrl+shiftc                 S   s   g | ]}t |qS r   r   r   r   r   r   r   	  rT   )r   r   r   r   )r   I   Nr   r   r$   )r1   EllipseSelectorr   r   r   r4   shaper   )r   r9   r   r   r   r   test_ellipse  s     r   c                 C   s   t j| tdddddd}d|_t|jd |jdks:J t|jd	 |jdksTJ t|d
dd |jdkspJ t|ddd |jdksJ t|dd
d |jdksJ t	|j
jd  dsJ t	|j
jd  dsJ d S )Nr   Trw   rp   )Zmarkerfacecolorrz   )r8   r   rA   rv   r   ))r$   r   r   r$   )r$   r$   r   r   ))r$   r   r   r   )r   r$   r   r   r   )r_   r_   rB   )r_   r   r_   r   )   r   )l      r   r   r@   )r   r$   r   r$   r   )r1   r2   r   r   r   r   Zedge_centersr   r~   Z
same_colorZ_corner_handlesartistsZget_markerfacecolorr   rW   r   r   r   test_rectangle_handles  s4    r   rA   c                 C   sd   t jtd d}tj| ||d}t|ddd |  |jdksBJ |  t|ddd |  d S )Nr   rA   r$   r   r   r_   rB   r,        b@g     [@r   r   r$   )	r   r.   r   r1   r2   r   r5   r   rM   r   rA   r8   r9   r   r   r    test_rectangle_selector_onselect1  s    r   ignore_event_outsidec                 C   s   t jtd d}tj| ||d}t|ddd |  |jdksBJ |  t|ddd |rt|	  |jdksJ n|  |jd	ksJ d S )
Nr   )r   r   r   rB   r   r   r   r   r   )r         d@r   r   )
r   r.   r   r1   r2   r   r5   r   rM   rL   )r   r   r8   r9   r   r   r   &test_rectangle_selector_ignore_outsideB  s    r   z$orientation, onmove_callback, kwargs
horizontal)Zminspanr   vertical)r   r   c                 C   s   t jtd d}t jtd d}|r(||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 |r|dd d S )Nr   onmove_callbackr#   r$   r   r%   r(   r)   r*   r+   )r   r.   r   r1   SpanSelectorr	   assert_called_once_with)r   orientationr   r7   r8   r(   r9   r   r   r   test_span_selectorY  s    r   c                 C   sf   t jtd d}tj| |d|d}t|ddd |  |jdksDJ |  t|ddd |  d S )	Nr   r   r   r   )r   r$   rB   )r$   r   r   )	r   r.   r   r1   r   r   r5   r   rM   r   r   r   r   test_span_selector_onselectp  s    
r   c                 C   s   t jtd d}t jtd d}tj| |d||d}t|ddd |  |  |jdks\J |  |  t|dd	d |r|	  |	  |jdksJ n|  |  |jd
ksJ d S )Nr   r   )r   r   r   r   rB   )r$   r   r   r   )r   r   )
r   r.   r   r1   r   r   r5   r   rM   rL   )r   r   r8   r(   r9   r   r   r   !test_span_selector_ignore_outside  s(    
r   r\   c                 C   s   t j| tdd|d}t|ddd |jdks0J t|dd	d |rR|jd
ks`J n|jdks`J t|ddd |jdks|J d S )Nr   T)r8   	directionrA   r\   r@   r^   rB   r   rb   re   )rF   r   )rc   rf   rg   rj   )r1   r   r   r   r   )r   r\   r9   r   r   r   test_span_selector_drag  s    
r   c                 C   s   t j| tddd}|jdks J |jjdks0J tt  t j| tdd}W d    n1 s`0    Y  d|_|jdks~J |jjdksJ tt d|_W d    n1 s0    Y  d S )Nr   T)r8   r   rA   Zinvalid_direction)r8   r   r   Zinvalid_string)r1   r   r   r   _edge_handlesr/   r   r   rW   r   r   r   test_span_selector_direction  s    
$r   c              	   C   s   t j| tddtdddtddd}t|d	d
d |j}| tjdddksRJ |j	ddd | tjdddkszJ |j
D ]$}| dksJ | dksJ q|jddd |j
D ]$}| dksJ | dksJ qd S )Nr   Trp   rq   rr   rt   ru   )r8   r   rA   r   rv   r]   r^   rB   rw   rx   colorrs   )r1   r   r   r{   r   r|   r}   r~   r   r   r   	get_colorr   r   r   r   r   r   )test_span_selector_set_props_handle_props  s"    



r   selectorspanZ	rectanglec                 C   s   t | tdd}|dkr&tj}d|d< ntj}|f i |}t|ddd t|d	d	d |jr`J d|d
< |f i |}|jsJ t|ddd t|d	d	d |jsJ t|ddd |jrJ d S )NT)r   r8   rA   r  r   r   r@   r^   rB   )r   r   r   r   escaper   )	r{   r   r1   r   r2   r   rK   r   r	   )r   r  r7   ZSelectorr9   r   r   r   test_selector_clear  s"    



r  c                 C   s   |dkrt j| tdddd}nt j| tdd}t|ddd |jsFJ | sRJ |dkrh|jd	kshJ |  |jrzJ | rJ t|dd
d |jsJ | sJ |dkr|jdksJ d S )Nr  r   T)r8   r   rA   r   r   r@   r^   rB   r   )r`   r_   )r   r`   )	r1   r   r   r2   r   rK   rU   r   r   )r   r  r9   r   r   r   test_selector_clear_method  s&    



r  c                 C   s   t j| tddd}tt |d W d    n1 s<0    Y  tt |d W d    n1 sp0    Y  tt |d W d    n1 s0    Y  |d d S )Nr   Tr   r   rn   r   r   )r1   r   r   r/   r   r   r   rW   r   r   r   test_span_selector_add_state  s    
(((r  c                 C   s   g d}t j| |ddd}|jD ]}| r0J | r J q |d |d |jD ]}| shJ | sXJ qX|j|ksJ d S )N)rF   rH   r`   r   F)r   T)r1   ZToolLineHandlesr   Zget_animatedrU   Zset_visibleZset_animated	positions)r   r  Ztool_line_handler   r   r   r   test_tool_line_handle$  s    




r  r   )r   r   c                 C   s  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 | |ksJ | |ksJ | dkrdnd}
||
 |	|
 g}|jj|ks
J d S )Nr   r   rF   rH   Tr   r   r>   g      '@r?      rB   r   )pltsubplotsplotfigurecanvasZdrawZ
get_xboundZ
get_yboundr1   r   printr   r  listr   )r   figr   Zx_boundZy_boundr9   bound
press_data	move_datarelease_dataindexhandle_positionsr   r   r   test_span_selector_bound7  s&    r  ZQtAgg)Zskip_on_importerrorc               	      s  t ddt j dt t \} }|jdd\}|jg dd\ td || | j	
| j  fdd}tj||d	|dddd
}ddg}ddg}t|d|d |d dd t|d|d |d dd | | fksJ |jdu sJ  jsJ   dksJ |   jdu s2J ddg}ddg}ddg}t|d|d |d dd t|d|d |d dd |jdu sJ  jsJ   dksJ t|d|d |d dd  jdu sJ dS )zACheck that the animated artists changed in callbacks are updated.r   r   r$   T)Zanimated皙?c                    s4   t | |f\}}||  } | d S r   )r   Zsearchsortedmeanset_data)vminvmaxZindminZindmaxvZln2valuesxr   r   r  d  s    z:test_span_selector_animated_artists_callback.<locals>.meanr   )r   r   rA   r\   r   r   r#   r%   r(   FgSG-?   r   gȄC(r*   N)r   linspacepisinr
  r  r  pauseZdraw_artistr  ZblitZbboxr1   r   r	   Z_get_animated_artistsstale	get_ydataupdate)r  r   lnr  r  r  r  r  r   r  r   ,test_span_selector_animated_artists_callbackS  sJ    



r+  c                 C   s`   dd }t j| |dd}|j}tddd}tg d}tg d	}|||}t|| d S )
Nc                  W   s   d S r   r   rQ   r   r   r   r8     s    z4test_snapping_values_span_selector.<locals>.onselectr   )r   r   r   r?   )
gr  rq   rt   333333?ffffff??g
ףp=
@      @      @)
r   r   r   rt   rt   rt         ?r/  r/  r/  )r1   r   Z_snapr   r#  r   r   )r   r8   r9   Zsnap_functionsnap_valuesr   expectr   r   r   "test_snapping_values_span_selector  s    
r4  c                    sl    fdd}t dd }tj |d|d}d|_|jdks@J d |_|jd u sTJ d|_|jdkshJ d S )	Nc                    s
   d _ d S )NT)Z_got_onselect)r  r  r   r   r   r8     s    z)test_span_selector_snap.<locals>.onselectr`   r"  r   )r   r2  )   rf   )   $   )r   Zaranger1   r   r   r2  )r   r8   r2  r9   r   r5  r   test_span_selector_snap  s    
r9  r7   red)r   )r   r   c                 C   sj   t jtd d}tj| |fi |}t|ddddd t|ddddd t|dd	d	dd |g d
 d S )Nr   r#   r$   r   r%   r(   r   r*   r   )r   r   r   )r   r.   r   r1   ZLassoSelectorr	   r   )r   r7   r8   r9   r   r   r   test_lasso_selector  s    r;  c                 C   s\   t | dd}| g dks"J |d | g dks@J |dd }|| d S )N)arp   c)TFTr   )FFTc                   S   s   d S r   r   r   r   r   r   rS     rT   z#test_CheckButtons.<locals>.<lambda>)r1   CheckButtonsZ
get_statusZ
set_activeZ
on_clickedZ
disconnect)r   checkZcidr   r   r   test_CheckButtons  s    
r@  toolbar)r   Ztoolbar2Ztoolmanagerc                 C   s   t tjd| tjtd d}tjtd d}t| d}|	| |
| |jdksZJ 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 )NrA  r    Z_clickzx**2r   r   Z	_keypress+r   5r   )r{   __setitem__r
  rcParamsr   r.   r   r1   ZTextBoxZ	on_submitZon_text_changetextr	   set_val
call_countZbegin_typingZstop_typing)r   rA  Zsubmit_eventZtext_change_eventr9   r   r   r   test_TextBox  s$    




rJ  zcheck_radio_buttons.pngZmpl20)styleZremove_textc                  C   sV   t  } dtjd< tjdd tg d}tg d}t|d t|dd	 d S )
N   ztext.kerning_factorrx   )left)皙?r-  333333?rO  )rN  rq   rO  rO  )zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)r
   r
  rF  Zsubplots_adjustaxesr1   RadioButtonsr>  )r   Zrax1Zrax2r   r   r   test_check_radio_buttons_image  s    
rR  z check_bunch_of_radio_buttons.pngc                  C   s   t g d} t| d d S )N)rN  r  rO  r-  )ZB1ZB2ZB3ZB4ZB5ZB6ZB7ZB8ZB9ZB10ZB11ZB12ZB13ZB14ZB15)r
  rP  r1   rQ  )Zraxr   r   r   !test_check_bunch_of_radio_buttons  s    rS  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 )NrB  r         8@r   )r   labelvalminvalmax	slidermin)r   rU  rV  rW  	slidermax)r
  r  r/   r   r   r1   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 )
NrB  r   rT  r/  r   rU  rV  rW  valinitr1  )r   rU  rV  rW  r]  rX  r   )r   rU  rV  rW  r]  rY  r
  r  r1   rZ  val)r  r   Zslider_sliderr   r   r   test_slider_slidermin_slidermax  s    ra  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 )NrB  r   rT  g      $r\  g      9@)r
  r  r1   rZ  r_  rV  rW  r  r   r`  r   r   r   test_slider_valmin_valmax  s    rc  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 )
NrB  r   rT  g&@r   )r   rU  rV  rW  r]  Zvalstepr?   )r   r   r0  g333333@r0  r^  rb  r   r   r   test_slider_valstep_snapping   s    rd  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 )NrB  r         r   )r   rU  rV  rW  r]  r   r   )r         ?竪?rt   r   )rg  r   rt   rh  )r
  r  r1   rZ  rH  r_  polyget_extentstransformed	transAxesinvertedr   Zbounds)r  r   r`  boxr   r   r   test_slider_horizontal_vertical+  s     

ro  c                  C   sD   t  \} }tj|ddddd}|d |  |jdks@J d S )NrB  r   r   rt   r\        ?)r
  r  r1   rZ  rH  resetr_  rb  r   r   r   test_slider_reset?  s
    
rr  r   c                    sJ   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  fdd}|d t	|jd t	||d |j |j }t	|
  | g d |d t	|jd t	||d |d t	|jd t	||d |  t	|jd t	||d d S )Nr   r   r   r   r   r   r   r   r   rB  r   r1  r  (\?r   rU  rV  rW  r   r]  )r  rg  ru  rp  )r  ru  c                    s,    dkrdd | j D S dd | j D S d S )Nr   c                 S   s   g | ]}|  d  qS r   )r(  r   hr   r   r   r   \  rT   z?test_range_slider.<locals>.handle_positions.<locals>.<listcomp>c                 S   s   g | ]}|  d  qS rw  )	get_xdatarx  r   r   r   r   ^  rT   )Z_handles)r`  r   r   r   r  Z  s    z+test_range_slider.<locals>.handle_positions)rq   r,  )rq   rg  r,  rp  )rq   r  )r  rq   )r   )r   r   )r
  r  r1   RangeSliderri  rj  rk  rl  rm  r   
get_pointsflattenr_  rH  rq  )r   idxr  r   r`  rn  r  r   r{  r   test_range_sliderG  s4    




r  c                 C   st   | dkrg d}ng d}t  \}}tj|ddd| ddgd}|j |j }t	|
  | g d	 d S )
Nr   rs  rt  rB  r   r1  r   rv  )r   rg  r   rp  )r
  r  r1   r}  ri  rj  rk  rl  rm  r   r~  r  )r   r  r  r   r`  rn  r   r   r   "test_range_slider_same_init_valuest  s    

r  c           	      K   sn   t  }tjtdd}tj||fi |}| D ]\}}t||fi | q,|j|ksVJ |j|fi fksjJ dS )a4  
    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`
    **kwargs
        Keyword arguments are passed to PolygonSelector.
    Nr   )	r
   r   r.   r   r1   PolygonSelectorr	   rI  r6   )	event_sequenceexpected_resultZselections_countr7   r   r8   r9   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(   r&   r'   r#   r*   r{   r  r   r   r   polygon_place_vertex  s    r  c                 C   s2   dt | |dfdt | |ddfdt | |ddfgS )Nr(   r  r#   r   r%   r*   r  r  r   r   r   polygon_remove_vertex  s    r  draw_bounding_boxc                 C   s  t jt| d}g d}g tddtddtddtdd}|||d g 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tddtdd}|||d g 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tddtdd}|||d g 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}|||d g 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}|||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}|||d g d}g tddtdddtdd	fdtdd	ftddtddtddtdd}|||d d S )Nr  )r`   r`   r   r`   r`   r   r`   r   r   ))rZ   r`   r  r  r   r   r   r(   r  r#   rZ   r*   Zon_key_release))r`   rZ   )r   rZ   r  r   r$   r   r   ))rZ   rZ   )rh   rZ   )rZ   rh   r+   r  )	functoolspartialr  r  r{   )r  Zcheck_selectorr  r  r   r   r   test_polygon_selector  s    	
	

	

r  c                 C   s2  t j| ttdddtdd|d}g tddtddtddtdd}|D ]\}}t||fi | qR|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 )Nrp   rq   r   rt   ru   )r8   r   rv   r  r`   r   rw   rx   )r1   r  r   r{   r  r	   r|   r   r   r   r   r   )r   r  r9   r  r  r  r   r   r   r   ,test_polygon_selector_set_props_handle_props%  s:    


r  c                 C   s.   |   }|  }tj|tddid}d|_d S )NrV   F)r8   r   )rq   r   rx   r-  )r  r1   r2   r   r   )fig_testfig_refax_test_r9   r   r   r   test_rect_visibilityF  s    r  r  )r   r   r   c                 C   st   g d}t |d  t |d  t |d  t |d  g}|| t dd |tdd t|g }t||d|d d S )Nr  r   r   r      r  )r  insertappendr  sumr  )r  r  vertsr  r   r   r   test_polygon_selector_removeR  s    




r  c                 C   sd   g d}g t |d  t |d  t |d  t |d  t|d  }t||dd  d| d d S )Nr  r   r   r   r  )r  r  r  )r  r  r  r   r   r   (test_polygon_selector_remove_first_pointe  s    




r  c                 C   s   g d}g t |d  t |d  t |d  t |d  t|d  t|d  t |d  }tj| t|d}|D ]\}}t||fi | qt|j|dd ksJ d S )Nr  r   r   r   r8   r  )r  r  r1   r  r   r	   r  )r   r  r  r  r9   r  r  r   r   r   test_polygon_selector_redraws  s,    





	
r  Zpng)
extensionsc                 C   s   g d}|   }tj|t|d}||_|j|ks4J |  }tj|t|d}g t|d  t|d  t|d  t|d  }|D ]\}	}
t||	fi |
 qd S )N))r  g?)rt   r.  )rx   rq   r  r   r   r   )Zadd_subplotr1   r  r   r  r  r	   )r  r  r  r  r  Z	tool_testZax_refZtool_refr  r  r  r   r   r   "test_polygon_selector_verts_setter  s,    



r  c                 C   s  g d}g t |d  t |d  t |d  t |d  t |d  }tj| tdd}|D ]\}}t||fi | q\| j}| jj}td|g|	d	dR  
  td
|g|	dR  
  td|g|	ddR  
  tj|jg d td|g|	ddR  
  td
|g|	dR  
  td|g|	ddR  
  tj|jg d tj|jjd td|g|	ddR  
  td|g|	ddR  
  tj|jg d tj|jjd d S )N))rF   r   )r   rF   )rF   (   )r  rF   r   r   r   r   Tr  Zbutton_press_event)r  r  Zmotion_notify_eventrE   Zbutton_release_event))r   r   r]   )r   rF   )rF   r   r@   rG   )r[   rF   rH   rH   r  r  rH   )      4@      D@r  r  r[   )r  r  r  )r  r  g      >@r  )r  r1   r  r   r	   rI   r  r  r   rJ   Z_processr   testingr   r  _boxr   )r   r  r  r9   r  r  tr  r   r   r   test_polygon_selector_box  s    




	


r  horizOnvertOnc                 C   s  t  jddd\}}t   }tjd ||fd| |d}t|j|rJdndksTJ t|j| rddndksnJ t|ddd	}|	| |jD ]}|
 d
ksJ q|jD ]}| dksJ qt|ddd	}|	| |jD ]}|
 d
ksJ q|jD ]}| dksJ qd S )Nr   T)ZsharexF)r   r  r  r   rt   rg  r  )rt   rt   )rg  rg  rp  )r
  r  r  r1   ZMultiCursorr   ZvlinesZhlinesr   r(   rz  r(  )r  r  Zax1Zax3Zax2multieventlr   r   r   test_MultiCursor  s&    





r  )_
contextlibr   r  Zunittestr   Zmatplotlib._api.deprecationr   Zmatplotlib.backend_basesr   Zmatplotlib.colorscolorsr~   Zmatplotlib.widgetsr1   Zmatplotlib.pyplotZpyplotr
  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing.widgetsr   r	   r
   r   r   numpyr   Znumpy.testingr   r/   Zfixturer   markZparametrizer{   r<   rP   rX   ro   r   r   r   r   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  backendr+  r4  r9  r;  r@  rJ  rR  rS  r[  ra  rc  rd  ro  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s  



#
#
I
I?

!
!!









8






,
"
q
 



7