U
    ccC                     @   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}dd~dgdd 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!"ddddg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   W/var/www/html/project/venv/lib/python3.8/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|}W 5 Q R X t	|ddddd t	|ddddd t	|d	d
d
dd |
dd dkrt|jdddddgdddddgg|jd |  |j\\}}}|jdkst|jdkst|jdkst|jdkst|i kstd S )NspecZreturn_valuematchpressd   r   xdataydatar   onmove   release   r   )r   r         Y@)err_msg)r   Mockr   pytestwarnsr   r   widgetsRectangleSelectorr	   getr   geometryassert_called_once	call_argsr&   AssertionErrorr'   )r   kwargsZwarning_msgonselecttoolepressereleaser   r   r   test_rectangle_selector   s.    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rxt	|
  t|	ddd |	jst	|  |  t|	||f||fd |	jrt	|  |j\\}
}}|
j|kst	|
j|kst	|j|ks
t	|j|kst	|i ks(t	d S )	Nr   r   r   r   T)interactiver   r   r   startend   rG      rI   )r   r.   r   	transData	transformr1   r2   r   _selection_completedr7   assert_not_calledr5   
reset_mockr6   r&   r'   )r   r   r   x1r   y1r9   Zx0Zy0r:   r;   r<   r8   r   r   r   test_rectangle_minspan>   s6    
 


rQ   c              	   C   sL   t | dd }| sttjtdd d|_W 5 Q R X | rHt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_visibler7   r/   r0   r   visibler   r:   r   r   r   +test_deprecation_selector_visible_attributed   s    rY   zdrag_from_anywhere, new_center)<   K   rI   rG   c                 C   sj   t j| td|d}t|ddd |jdks.tt|ddd |j|ksJtt|d	d
d |jdksftd S )NT)r9   rB   drag_from_anywherer   r   r$   x   rC   )2   A         #   rd         rj      )      )r1   r2   r   r   centerr7   )r   r]   Z
new_centerr:   r   r   r   test_rectangle_dragp   s    
rp   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sPt	|j
ddd | tjdddksxt	|jD ]$}| dkst	| dks~t	q~|jddd |jD ]$}| dkst	| dkst	qd S )NTb皙?Z	facecoloralpha      ?rt   )r9   rB   r   handle_propsr^   r_   rC   r333333?black)markeredgecolorrt   )r1   r2   r   dictr   _selection_artistget_facecolormcolorsto_rgbar7   	set_props_handles_artistsget_markeredgecolor	get_alphaset_handle_propsr   r:   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,t|j}|d |d  }}|d	 |d
  }}t|||f||fd |j|d ||d |fkst|j}|d |d |d |d  d   }}|d	 | }}t|||f||fd |j|d ||d |d fk st|j}|d |d |d |d  d   }}|d | }}t|||f||fd |j||d |d |d fksrt|j}|d |d  }}|d |d  }}t|||f||fd |j||d ||d fkstd S )NTr9   rB   r^   r_   rC   )        r,         $@      ^@r      r      r      re   rG   rd   )r1   r2   r   r   extentsr7   )r   r:   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 5 Q R X tt |d W 5 Q R X |d |d	 |d
 d S )NTr   F   rb   }      rC   unsupported_stateclearmovesquarero   )r1   r2   r   r   r/   raises
ValueError	add_staterX   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,t|r@|d d }nd}|j}|d	 |d
  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d | |	|d | |
fkst|j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d | |	|d |d
 fks2t|j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d | |	|d |d
 fkst|j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 | |d |d
 fks.t|j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 | |d |d
 fkst|j}|d |d  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|	|d	 | |
|d
 | fkstd S )NTr   r   r   rC   )     Q@     @_@     @P@g     @`@ro   controlr   r   r   r   rD   rE   keyr   r   r   re   rG   rd   r1   r2   r   r   r   r7   r   r   r   r:   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,t|r@|d d }nd}|j}|d	 |d
  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d |	|d |d
 | fkst|j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d |	|d |d
 | fks2t|j}|d	 |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|d |	|d |d
 | fkst|j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 |d |d
 | fks.t|j}|d |d |d
 |d  d   }}d}|| | }	}
t|||f|	|
f|d |j|	|d	 |d |d
 | fkst|j}|d |d  }}d\}}|| ||  }	}
t|||f|	|
f|d |j|d | |d	 |
|d
 fkstd S )NTr   r   r`   s   rC   r   r   r   g     \@r   shiftr   r   r   r   r   r   r   r   re   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   rC   r   ro   r   r   r   r   r   r   r   r   r   r   r   )r1   r2   r   r   r   r   r   )	r   r:   r   r&   r'   r   r   r   r   r   r   r   #test_rectangle_resize_square_centerc  sv    


 
&
 
&
 
&
 
&
 
 
r   selector_classc              	   C   sF  || t dd}t|ddd |jdks*tt|jdks<tt|dd	d
 |jtdgks^tt|jdksptt|ddd t|dd	d
 t|jdkst|jdkstt|j	ddd d|_	|j	dkstt|j
tddddgddddggdd t|ddd t|jddd |tjkrBtt d|j_W 5 Q R X d S )NTr   r$   r$   r      rC   r$   r   r$   r   r   on_key_pressrx   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   r7   len_stater	   setr   Zrotationcornersnparrayr1   r2   r/   r   r   r}   Zrotation_point)r   r   r:   r   r   r   test_rectangle_rotate  s2    
r   c                 C   s   t j| tdd}t|ddd |jdks,tt|jdks>tdD ]<}|| t|jd	ksbt|	| t|jdksBtqBd S )
NTr   r   r   rC   r   r   )r   r   ro   r   )
r1   r2   r   r   r   r7   r   r   r   Zremove_state)r   r:   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s8t|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)r9   rB   r   r   r   rC   r   r   ro   r   r   r   r   r   g      G@g     `@)
Z
set_aspectr1   r2   r   r   r   r7   r   r   Z_aspect_ratio_correction)r   r   r:   r   r&   r'   widthr   Zycenterr   r   Zychanger   r   r   *test_rectangle_resize_square_center_aspect  s:    



$"  r   c                 C   s   t j| tddd}d|_t|ddd |jdks4tt|d	dd
d |jdksRtt|dddd dd |jD }|ddddgkstt|d	ddd dd |jD }|ddddgkst|jjdkstt|jdddf ddg dS )z'For ellipse, test out the key modifiersr   T)r9   
grab_rangerB   r$      r$   r   r   r   )r   r   rC   )r`      r`   r   r   r   r   )r[   r   r[   r   rA   )rg   rI   r   c                 S   s   g | ]}t |qS r   int.0er   r   r   
<listcomp>  s     z test_ellipse.<locals>.<listcomp>rg   r   z
ctrl+shiftc                 S   s   g | ]}t |qS r   r   r   r   r   r   r   	  s     r   r   )r   I   Nr   r   r$   )	r1   EllipseSelectorr   r   r   r7   r4   shaper   )r   r:   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:tt|jd	 |jdksTtt|d
dd |jdksptt|ddd |jdkstt|dd
d |jdkstt	
|jjd  dstt	
|jjd  dstd S )Nr   Trx   rq   )Zmarkerfacecolorr{   )r9   r   rB   rw   r   ))r$   r   r   r$   )r$   r$   r   r   ))r$   r   r   r   )r   r$   r   r   r   )r`   r`   rC   )r`   r   r`   r   )   r   )l      r   r   rA   )r   r$   r   r$   r   )r1   r2   r   r   r   r   r7   Zedge_centersr   r   Z
same_colorZ_corner_handlesartistsZget_markerfacecolorr   rX   r   r   r   test_rectangle_handles  s8      r   rB   c                 C   sd   t jtd d}tj| ||d}t|ddd |  |jdksBt|	  t|ddd |  d S )Nr   rB   r$   r   r   r`   rC   r,        b@g     [@r   r   r$   )
r   r.   r   r1   r2   r   r5   r   r7   rN   r   rB   r9   r:   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sBt|	  t|ddd |rt|
  |jdkstn|  |jd	kstd S )
Nr   )r   r   r   rC   r   r   r   r   r   )r         d@r   r   )r   r.   r   r1   r2   r   r5   r   r7   rN   rM   )r   r   r9   r:   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|}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   r8   r9   r(   r:   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sDt|	  t|ddd |  d S )	Nr   r   r   r   )r   r$   rC   )r$   r   r   )
r   r.   r   r1   r   r   r5   r   r7   rN   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\t|	  |	  t|dd	d |r|
  |
  |jdkstn|  |  |jd
kstd S )Nr   r   )r   r   r   r   rC   )r$   r   r   r   )r   r   )r   r.   r   r1   r   r   r5   r   r7   rN   rM   )r   r   r9   r(   r:   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s0tt|dd	d |rR|jd
ks`tn|jdks`tt|ddd |jdks|td S )Nr   T)r9   	directionrB   r]   rA   r_   rC   r   rc   rf   )rG   r   )rd   rg   rh   rk   )r1   r   r   r   r   r7   )r   r]   r:   r   r   r   test_span_selector_drag  s    
r   c              	   C   s   t j| tddd}|jdks t|jjdks0ttt t j| tdd}W 5 Q R X d|_|jdksjt|jjdkszttt d|_W 5 Q R X d S )Nr   T)r9   r   rB   Zinvalid_direction)r9   r   r   Zinvalid_string)	r1   r   r   r   r7   _edge_handlesr/   r   r   rX   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sRt	|j
ddd | tjdddkszt	|jD ]$}| dkst	| dkst	q|jddd |jD ]$}| dkst	| dkst	qd S )Nr   Trq   rr   rs   ru   rv   )r9   r   rB   r   rw   r^   r_   rC   rx   ry   colorrt   )r1   r   r   r|   r   r}   r~   r   r   r7   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 |}t|ddd t|d	d	d |jr\td|d
< |f |}|jsxtt|ddd t|d	d	d |jstt	|ddd |jrtd S )NT)r   r9   rB   r  r   r   rA   r_   rC   )r   r   r   r   escaper   )
r|   r   r1   r   r2   r   rL   r7   r   r	   )r   r  r8   ZSelectorr:   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sFt| sRt|dkrh|jd	ksht|	  |jrzt| rtt|dd
d |jst| st|dkr|jdkstd S )Nr  r   T)r9   r   rB   r   r   rA   r_   rC   r   )ra   r`   )r   ra   )
r1   r   r   r2   r   rL   r7   rV   r   r   )r   r  r:   r   r   r   test_selector_clear_method  s&    



r  c              	   C   s   t j| tddd}tt |d W 5 Q R X tt |d W 5 Q R X tt |d W 5 Q R X |d d S )Nr   Tr   r   ro   r   r   )r1   r   r   r/   r   r   r   rX   r   r   r   test_span_selector_add_state  s    
r  c                 C   s   dddg}t j| |ddd}|jD ]}| r2t| r"tq"|d |d |jD ]}| sjt| sZtqZ|j|kstd S )NrG   rI   ra   r   F)r   T)	r1   ZToolLineHandlesr   Zget_animatedr7   rV   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sbt| |ksrt| dkr~|n|}|jjt|kstdd	g}d
dg}|}	t|||d | |kst| |kst| dkrdnd}
||
 |	|
 g}|jj|ks
td S )Nr   r   rG   rI   Tr   r   r?   g      '@r@      rC   r   )pltsubplotsplotfigurecanvasZdrawZ
get_xboundZ
get_yboundr1   r   printr7   r   r  listr   )r   figr   Zx_boundZy_boundr:   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st|jdkst jst  dkst|   jdks2tddg}ddg}ddg}t|d|d |d dd t|d|d |d dd |jdkst jst  dkstt|d|d |d dd  jdkst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   rB   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_artistsr7   stale	get_ydataupdate)r  r   lnr  r  r  r  r  r   r   r   ,test_span_selector_animated_artists_callbackS  sL    



 r,  c                 C   s   dd }t j| |dd}|j}tddd}tdd	d
dddddddg
}tddddddddddg
}|||}t|| d S )Nc                  W   s   d S r   r   rR   r   r   r   r9     s    z4test_snapping_values_span_selector.<locals>.onselectr   )r   r   r   r@   gr  rr   ru   333333?ffffff??g
ףp=
@      @      @r         ?)r1   r   Z_snapr   r$  r   r   )r   r9   r:   Zsnap_functionsnap_valuesr!  expectr   r   r   "test_snapping_values_span_selector  s    
r5  c                    sl    fdd}t dd }tj |d|d}d|_|jdks@td |_|jd ksTtd|_|jdkshtd S )	Nc                    s
   d _ d S )NT)Z_got_onselect)r  r  r   r   r   r9     s    z)test_span_selector_snap.<locals>.onselectra   r#  r   )r   r3  )   rg   )   $   )r   Zaranger1   r   r   r7   r3  )r   r9   r3  r:   r   r6  r   test_span_selector_snap  s    
r:  r8   red)r   )r   r   c                 C   sh   t jtd d}tj| |f|}t|ddddd t|ddddd t|dd	d	dd |d
ddg d S )Nr   r#   r$   r   r%   r(   r   r*   r   r   r   r   )r   r.   r   r1   ZLassoSelectorr	   r   )r   r8   r9   r:   r   r   r   test_lasso_selector  s    r<  c                 C   s`   t | dd}| dddgks$t|d | dddgksDt|dd }|| d S )N)arq   c)TFTTFr   c                   S   s   d S r   r   r   r   r   r   rT     rU   z#test_CheckButtons.<locals>.<lambda>)r1   CheckButtonsZ
get_statusr7   Z
set_activeZ
on_clickedZ
disconnect)r   checkZcidr   r   r   test_CheckButtons  s    
rA  toolbarZtoolbar2Ztoolmanagerc                 C   s   t tjd| tjtd d}tjtd d}t| d}|	| |
| |jdksZtt|d |d |jdks|t|jdkst||j |  |jdkstt|d t|dd	d
 t|ddd
 |jdkstd S )NrB  r    Z_clickzx**2r   r   Z	_keypress+r   5r   )r|   __setitem__r  rcParamsr   r.   r   r1   ZTextBoxZ	on_submitZon_text_changetextr7   r	   set_val
call_countZbegin_typingZstop_typing)r   rB  Zsubmit_eventZtext_change_eventr:   r   r   r   test_TextBox  s$    




rK  zcheck_radio_buttons.pngZmpl20)styleZremove_textc                  C   s^   t  } dtjd< tjdd tddddg}tddddg}t|d	 t|d
d d S )N   ztext.kerning_factorry   )left皙?r.  333333?rr   )zRadio 1zRadio 2zRadio 3)zCheck 1zCheck 2zCheck 3)FTT)r
   r  rG  Zsubplots_adjustaxesr1   RadioButtonsr?  )r   Zrax1Zrax2r   r   r   test_check_radio_buttons_image  s    
rS  z check_bunch_of_radio_buttons.pngc                  C   s"   t ddddg} t| d d S )NrO  r  rP  r.  )ZB1ZB2ZB3ZB4ZB5ZB6ZB7ZB8ZB9ZB10ZB11ZB12ZB13ZB14ZB15)r  rQ  r1   rR  )Zraxr   r   r   !test_check_bunch_of_radio_buttons  s    rT  c               	   C   sd   t  \} }tt tj|ddddd W 5 Q R X tt tj|ddddd W 5 Q R X d S )NrC  r         8@r   )r   labelvalminvalmax	slidermin)r   rV  rW  rX  	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sFttj|dddd|d	}|j|jksltd S )
NrC  r   rU  r0  r   rV  rW  rX  valinitr2  )r   rV  rW  rX  r^  rY  r   )r   rV  rW  rX  r^  rZ  r  r  r1   r[  valr7   )r  r   Zslider_sliderr   r   r   test_slider_slidermin_slidermax  s      rb  c                  C   sX   t  \} }tj|ddddd}|j|jks0ttj|ddddd}|j|jksTtd S )NrC  r   rU  g      $r]  g      9@)r  r  r1   r[  r`  rW  r7   rX  r  r   ra  r   r   r   test_slider_valmin_valmax  s    rd  c               
   C   s`   t  \} }tj|dddddd}|jdks0ttj|ddddddd	d
gd}|jd	ks\td S )NrC  r   rU  g&@r   )r   rV  rW  rX  r^  Zvalstepr@   r   r1  g333333@r_  rc  r   r   r   test_slider_valstep_snapping   s      
re  c                  C   s   t  \} }tj|dddddd}|d |jdks:t|j 	|j
 }t|jddd	d
g t  \} }tj|dddddd}|d |jdkst|j 	|j
 }t|jddd
d	g d S )NrC  r         r   )r   rV  rW  rX  r^  r   r         ?g?ru   r   )r  r  r1   r[  rI  r`  r7   polyget_extentstransformed	transAxesinvertedr   Zbounds)r  r   ra  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@td S )NrC  r   r   ru   r]        ?)r  r  r1   r[  rI  resetr`  r7   rc  r   r   r   test_slider_reset?  s
    
rr  r   c                    sZ   dkrddddg}nddddg}t  \}}tj|ddd d	d
gd}|j |j }t	|
  | d	dd
dg t	|jd  fdd}|d t	|jd t	||d |j |j }t	|
  | ddddg |d t	|jd t	||d |d t	|jd t	||d |  t	|jd t	||d d S )Nr   r   r   r   r   rC  r   r2  r  (\?r   rV  rW  rX  r   r^  rh  rp  )r  rs  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   \  s     z?test_range_slider.<locals>.handle_positions.<locals>.<listcomp>c                 S   s   g | ]}|  d  qS ru  )	get_xdatarv  r   r   r   r   ^  s     )Z_handles)ra  r   r   r   r  Z  s    z+test_range_slider.<locals>.handle_positions)rr   r-  rr   r-  )rr   r  )r  rr   )r   )r   r   )r  r  r1   RangeSliderri  rj  rk  rl  rm  r   
get_pointsflattenr`  rI  rq  )r   idxr  r   ra  rn  r  r   ry  r   test_range_sliderG  s<        


r  c                 C   s   | dkrddddg}nddddg}t  \}}tj|ddd| ddgd	}|j |j }t	|
  | dd
ddg d S )Nr   r   r   r   r   rC  r   r2  rt  rh  rp  )r  r  r1   r{  ri  rj  rk  rl  rm  r   r|  r}  )r   r~  r  r   ra  rn  r   r   r   "test_range_slider_same_init_valuest  s        r  c           	      K   sf   t  }tjtdd}tj||f|}| D ]\}}t||f| q(|j|ksNt|j	|fi fksbt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	   rJ  r7   r6   )	event_sequenceexpected_resultZselections_countr8   r   r9   r:   etype
event_argsr   r   r   check_polygon_selector  s    r  c                 C   s.   dt | |dfdt | |dfdt | |dfgS )Nr(   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}dddg}tddtddtddtdd}|||d dd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ftddtdd}|||d dd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ftddtdd}|||d dd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f}|||d dd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f}|||d dddg}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ftddtddtddtdd}|||d dddg}tddtddd	tddfdtddfftddtddtddtdd}|||d d S )Nr  ra   ra   r   ra   ra   r   ra   r   r   )r[   ra   r   r   r   r(   r  r#   r[   r*   Zon_key_release)ra   r[   )r   r[   r   r$   r   r   )r[   r[   )ri   r[   )r[   ri   r+   r  )	functoolspartialr  r  r|   )r  Zcheck_selectorr  r  r   r   r   test_polygon_selector  s     

	
	





r  c                 C   s"  t j| ttdddtdd|d}tddtddtddtdd}|D ]\}}t||f| qJ|j}| dksxt|	 dkst|j
d	d
d | d	kst|	 d
kst|jD ]$}| dkst|	 dkstq|jd	d
d |jD ]&}| d	kst|	 d
kstqd S )Nrq   rr   r   ru   rv   )r9   r   rw   r  ra   r   rx   ry   )r1   r  r   r|   r  r	   r}   r   r7   r   r   r   r   )r   r  r:   r  r  r  r   r   r   r   ,test_polygon_selector_set_props_handle_props%  s2    


r  c                 C   s.   |   }|  }tj|tddid}d|_d S )NrW   F)r9   r   )rr   r   ry   r.  )r  r1   r2   r   r   )fig_testfig_refax_test_r:   r   r   r   test_rect_visibilityF  s    r  r~  r   r   c                 C   sv   dddg}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      r  )r  insertappendr  sumr  )r~  r  vertsr  r   r   r   test_polygon_selector_removeR  s    





r  c                 C   s\   dd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   r   r   (test_polygon_selector_remove_first_pointe  s    





r  c              	   C   s   dddg}t |d  t |d  t |d  t |d  t|d  t|d  t |d  }tj| t|d}|D ]\}}t||f| qh|j|dd kstd S )Nr  r  r  r   r   r   r9   r  )r  r  r1   r  r   r	   r  r7   )r   r  r  r  r:   r  r  r   r   r   test_polygon_selector_redraws  s    







r  Zpng)
extensionsc                 C   s   dddg}|   }tj|t|d}||_|j|ks6t|  }tj|t|d}t|d  t|d  t|d  t|d  }|D ]\}	}
t||	f|
 q~d S )N)r  g?)ru   r/  )ry   rr   r  r   r   r   )Zadd_subplotr1   r  r   r  r7   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  ddddg}t |d  t |d  t |d  t |d  t |d  }tj| td	d
}|D ]\}}t||f| qV| j}| jj}td|f|	dd 
  td|f|	d 
  td|f|	dd 
  tj|jddddg td|f|	dd 
  td|f|	d 
  td|f|	dd 
  tj|jddddg tj|jjd td|f|	dd  
  td|f|	dd! 
  tj|jdddg tj|jjd d S )"N)rG   r   )r   rG   )rG   (   )r  rG   r   r   r   r   Tr  Zbutton_press_event)r  r  Zmotion_notify_eventrF   Zbutton_release_event)r   r   r^   )r   rG   )rG   r   rA   rH   r\   )rG   rI   )rI   r  )r  rI   )      4@      D@r  r  )r  r  g      >@r  )r   )r   )r   )r   )r   )r   )r  r1   r  r   r	   rJ   r  r  r   rK   Z_processr   testingr   r  _boxr   )r   r  r  r:   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sTtt|j| rddndksntt	|ddd	}|
| |jD ]}| d
kstq|jD ]}| dkstqt	|ddd	}|
| |jD ]}| d
kstq|jD ]}| dkstqd S )Nr   T)ZsharexF)r   r  r  r   ru   rh  r  )ru   ru   )rh  rh  rp  )r  r  r  r1   ZMultiCursorr   Zvlinesr7   Zhlinesr   r(   rx  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=   rQ   rY   rp   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,  r5  r:  r<  rA  rK  rS  rT  r\  rb  rd  re  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