U
    \	a$                     @   s6  d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	Z	zd dl
mZ W n  ek
rt   e	jdZY nX e	jdd Ze	jd	e	jd
e	jjd
ddde	jde	jjddddgdd Ze	jjddddd Ze	jjdddgdfdg dfddgdfddgdfdg dfddgdfd dgd!fdddd"gd#fd$g dfd%g d&fd%dgd'fgd(d)d*d+d,d-d.d/d0d&d1gd2e	jd	e	jd
e	jjd
ddde	jde	jjddddgd3d4 Ze	jjdddd5d6 Ze	jjdddd7d8 Ze	jjdddd9d: Ze	jjdddd;d< Ze	jjdddd=d> ZdS )?    N)mock)pyplot)Gcf)QtGuizNo usable Qt5 bindingsc                 C   sv   | j dj\}td}|j}|dkrrzt|jdd }W n t	k
r^   |j
d }Y nX |dkrrtd |S )Nbackendzmatplotlib.backends.qt_compatQt4Agg.r      zQt4 is not available)nodeZget_closest_markerargspytestZimportorskipQtCoreintZPYQT_VERSION_STRsplitAttributeError__version_info__skip)requestr   Z	qt_compatr   Z	py_qt_ver r   D/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_backend_qt.pyqt_core   s    

r   r   r   T)Zskip_on_importerror)ZmarksZQt5Aggc                 C   s4   t  tj}t }|jjj  |tjks0t	d S N)
copyr   ZfigspltfigurecanvasmanagerwindowcloseAssertionError)r   Z	init_figsfigr   r   r   test_fig_close#   s    r!   c                    s   t   d   fdd}jd| ttj}dd }ttj| tjj	j
   tjksft|ttjksztttj| d S )Nc                      s   t t j j  d S r   )signal	getsignalSIGINTZQCoreApplicationexitr   Zevent_loop_signalr   r   r   fire_signal_and_quitE   s    z.test_fig_signals.<locals>.fire_signal_and_quitr   c                 S   s   d S r   r   )signumframer   r   r   CustomHandlerT   s    z'test_fig_signals.<locals>.CustomHandler)r   r   ZQTimerZ
singleShotr"   r#   r$   
matplotlibbackendsZbackend_qt5Z_BackendQT5ZmainloopSIG_DFLr   )r   r'   Zoriginal_signalr*   r   r&   r   test_fig_signals<   s    	r.   zqt_key, qt_mods, answerZKey_AZShiftModifierAaZControlModifierzctrl+aZ
Key_Aacute   Á   áZKey_ControlZAltModifierzalt+controlZKey_Altzctrl+altZMetaModifieru   ctrl+alt+super+áZKey_PlayZKey_BackspaceZ	backspacezctrl+backspaceshiftlowercontrolZunicode_upperZunicode_lowerZalt_controlZcontrol_altZmodifier_orderZnon_unicode_keyZbackspace_mod)idsc           	         sj   j j|D ]}tj |O qG fddd} fdd}t j}|d| ||  dS )z
    Make a figure.
    Send a key_press_event event (using non-public, qtX backend specific api).
    Catch the event.
    Assert sent and caught keys are the same.
    c                       s.   e Zd Zdd Z fddZfddZdS )z test_correct_key.<locals>._Eventc                 S   s   dS )NFr   selfr   r   r   isAutoRepeat       z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  jS r   )getattrQtr7   )r   qt_keyr   r   key   r:   z$test_correct_key.<locals>._Event.keyc                    s    S r   r   r7   )qt_modr   r   	modifiers   r:   z*test_correct_key.<locals>._Event.modifiersN)__name__
__module____qualname__r9   r>   r@   r   )r   r=   r?   r   r   _Event   s   rD   c                    s   | j  kstd S r   )r>   r   )event)answerr   r   on_key_press   s    z&test_correct_key.<locals>.on_key_pressZkey_press_eventN)r<   Z
NoModifierr;   r   r   r   Zmpl_connectZkeyPressEvent)	r   r   r=   Zqt_modsrF   modrD   rG   	qt_canvasr   )rF   r   r=   r?   r   test_correct_keyg   s    0
rJ   c               	      s  d} t |  d _tjddd}|j   fdd}j   }	 
  |d |jdks|tjjd	kstjjd
kst| dkst| dkst dkst| dk st|d |jdkstjjdkstjjdkst| dks,t| dks>t dksPt| dk sft|d |jdks~tjjdkstjjdkst| dkst| dkst dkst| dk stW 5 Q R X dS )z~
    Make sure that if the pixel ratio changes, the figure dpi changes but the
    widget remains the same physical size.
    z@matplotlib.backends.backend_qt5.FigureCanvasQT.devicePixelRatioF   )      x   )Zfigsizedpic                    s4   |  _ j| kstjd     d S )N`   )return_valueZ
_dpi_ratior   ZlogicalDotsPerInchChangedemitdrawZflush_events)ZratioprI   screenr   r   set_pixel_ratio   s
    z0test_pixel_ratio_change.<locals>.set_pixel_ratioih  i  i  X     )rX   rY   rM   i  i  g      ?   i  N)r   patchrQ   r   r   r   showr   sizer   ZwindowHandlerV   rO   r   ZrendererwidthheightZget_width_heightZget_size_inchesall)propr    rW   r]   r   rT   r   test_pixel_ratio_change   sD    
rb   c               	   C   s:   t  \} }tddd  | jjj  W 5 Q R X d S )Nz3matplotlib.backends.backend_qt5.SubplotToolQt.exec_c                 S   s   d S r   r   r7   r   r   r   <lambda>   r:   z"test_subplottool.<locals>.<lambda>)r   subplotsr   r[   r   r   toolbarZconfigure_subplotsr    axr   r   r   test_subplottool   s    rh   c               	   C   sr   t  \} }|ddg |dgg |jtdtdtdd tddd  | jj	j
  W 5 Q R X d S )N   rM   rK   )cz:matplotlib.backends.qt_editor._formlayout.FormDialog.exec_c                 S   s   d S r   r   r7   r   r   r   rc     r:   z$test_figureoptions.<locals>.<lambda>)r   rd   ZplotZimshowZscatterranger   r[   r   r   re   Zedit_parametersrf   r   r   r   test_figureoptions   s    rl   c                  C   s   t  \} }| j  | jjj}d\}}| || | j |tj	d  ksPt
| j |tj	d  kslt
| }| }| || | |kst
| |kst
d S )N)rK   rM   z
figure.dpi)r   rd   r   rS   r   r   Zset_size_inchesr^   r+   ZrcParamsr   r_   )r    rg   r   whZ	old_widthZ
old_heightr   r   r   test_double_resize  s    

ro   c                     sH   ddl m}  d  fdd}t \}}||_| |}d|_ sDtd S )Nr   )FigureCanvasQTAggFc                    s   | j   d d S )NT)r   Z	draw_idle)r    stalecalledr   r   crashing_callback  s    
z-test_canvas_reinit.<locals>.crashing_callbackT)Z"matplotlib.backends.backend_qt5aggrp   r   rd   Zstale_callbackrq   r   )rp   rt   r    rg   r   r   rr   r   test_canvas_reinit  s    ru   )r   r"   Zunittestr   r+   r   r   Zmatplotlib._pylab_helpersr   r   Zmatplotlib.backends.qt_compatr   ImportErrormarkr   Z
pytestmarkZfixturer   Zparametrizeparamr   r!   r.   rJ   rb   rh   rl   ro   ru   r   r   r   r   <module>   s   
	

*





 	
G


