a
    s=icR                     @   sN  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlZd dlZd dlmZ d dlmZ d dlmZ z d dlmZmZ d dlmZ W n ey   ejd	ZY n0 d
Zejdd Zejjddddd ZG dd dej Z!dd Z"ejjdddej#ddddifdddifgdd Z$dd Z%ejj&ej'd kd!d"ejjdddej#ddddifdddif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d0fd/g d1fd2d3gd4fd5d-gd6fd/g d7d8fd9g dfd:g d;fd:d-gd<fgg d=d>ej#d?ej*d%ejjd%ddd@ej*dejjdddd@gdAdB Z+ejjddddCdD Z,ejjddddEdF Z-ejjddddGdH Z.ejjddddIdJ Z/ejjddddKdL Z0ejjddddMdN Z1ejjd%dddOdP Z2dQdR Z3dSdT Z4ej#dUe4 dVdW Z5dS )X    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui	QtWidgets)_formlayoutzNo usable Qt bindings<   c                 C   s   t d}|j}|S )Nzmatplotlib.backends.qt_compat)pytestZimportorskipQtCore)requestZ	qt_compatr    r   q/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/tests/test_backend_qt.pyqt_core   s    
r   ZQtAggT)Zskip_on_importerrorc                  C   s4   t  tj} t }|jjj  | tjks0J d S N)	copyr   Zfigspltfigurecanvasmanagerwindowclose)Z	init_figsfigr   r   r   test_fig_close&   s    r   c                       s(   e Zd ZdZ fddZdd Z  ZS )WaitForStringPopenzL
    A Popen that passes flags that allow triggering KeyboardInterrupt.
    c                    sH   t jdkrtj|d< t j|i |i tjdddtjdd d S )Nwin32creationflagsZAgg0)
MPLBACKENDSOURCE_DATE_EPOCHT)envstdoutuniversal_newlines)	sysplatform
subprocessZCREATE_NEW_CONSOLEsuper__init__osenvironPIPE)selfargskwargs	__class__r   r   r)   =   s    

zWaitForStringPopen.__init__c                 C   s>   d}| j d}|s"td|||7 }||rdS qdS )z%Read until the terminator is reached.    z)Subprocess died before emitting expected N)r#   readRuntimeErrorendswith)r-   
terminatorbufcr   r   r   wait_forF   s    
zWaitForStringPopen.wait_for)__name__
__module____qualname____doc__r)   r:   __classcell__r   r   r0   r   r   8   s   	r   c           	         s   dd l dd lm} dd l dd l}||  ddlm}  fdd}t||}|	d||
 }|jddd  |jdfd	d z|f i | W n ty   td
dd Y n0 d S )Nr   r   c                     s>   j dkr dd l} | dd ndd l}   |j d S )Nr   r   )r&   win32apiZGenerateConsoleCtrlEventsignalkillgetpidSIGINT)rA   rB   )r*   r%   r   r   interrupter\   s
    
z&_test_sigint_impl.<locals>.interrupterr3   
draw_eventc                  W   s   t dddS NDRAWTflushprintr.   r   r   r   <lambda>i       z#_test_sigint_impl.<locals>.<lambda>c                     s      S r   startrN   timerr   r   rO   m   rP   SUCCESSTrJ   )r%   matplotlib.pyplotr   r*   	threadingswitch_backendmatplotlib.backends.qt_compatr   getattrTimerr   r   mpl_connectKeyboardInterruptrM   )	backendtarget_namer/   r   rW   r   rF   targetr   r   )r*   r%   rT   r   _test_sigint_implS   s,    


ra   ztarget, kwargsshowblockpauseinterval
   c                 C   s   t  }ttjdttd|d| d|d g}z|d |j	t
d\}}W n"   |  |	 \}} Y n0 t| d|v sJ d S )N-cz
_test_sigint_impl(, )rI   timeoutrU   )r   get_backendr   r%   
executableinspect	getsourcera   r:   communicate_test_timeoutrC   rM   r`   r/   r^   procr#   _r   r   r   test_sigintu   s"    
ru   c           	         s   dd l }dd lm} ||  ddlm} t||}| }|j	ddd  |jj
dd d _ jtd	dd
  fdd}| |j| z|f i | W n ty   tddd
 Y n0 d S )Nr   r@   rG   c                  W   s   t dddS rH   rL   rN   r   r   r   rO      rP   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r3   )re   TSIGUSR1rJ   c                    s       d S r   rQ   signumframerS   r   r   custom_signal_handler   s    zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerrU   )rB   rV   r   rX   rY   r   rZ   r   r   r\   Z	new_timerZsingle_shotZadd_callbackrM   rv   r]   )	r^   r_   r/   rB   r   r   r`   r   rz   r   rS   r   %_test_other_signal_before_sigint_impl   s$    

r{   r   z,No other signal available to send on Windowsreasonc                 C   s   t  }ttjdttd|d| d|d g}zH|d t	
|jtj |d t	
|jtj |jtd\}}W n"   |
  | \}} Y n0 t| d|v sJ t   d S )	Nrg   z'
_test_other_signal_before_sigint_impl(rh   ri   rI   rv   rj   rU   )r   rl   r   r%   rm   rn   ro   r{   r:   r*   rC   pidrB   rv   rE   rp   rq   rM   r   rr   r   r   r   test_other_signal_before_sigint   s6    

r   ZQt5Aggc              
      s  ddl m} t  d   fdd}jd| ttj}dd }ttj| zt	j
jj   |ksrJ ttj|ksJ tjtjfD ]H}jd| ttj| |   |ksJ ttj|ksJ qW ttj| nttj| 0 d S )Nr   )_BackendQT5c                      s   t t j j  d S r   )rB   	getsignalrE   ZQCoreApplicationexitr   Zevent_loop_handlerr   r   r   fire_signal_and_quit   s    z6test_fig_sigint_override.<locals>.fire_signal_and_quitc                 S   s   d S r   r   rw   r   r   r   custom_handler   s    z0test_fig_sigint_override.<locals>.custom_handler)Zmatplotlib.backends.backend_qt5r   r   r   ZQTimerZ
singleShotrB   r   rE   
matplotlibbackendsZ
backend_qtZ
_BackendQTZmainloopSIG_DFLSIG_IGN)r   r   r   Zoriginal_handlerr   r   r   r   test_fig_sigint_override   s&    	r   zqt_key, qt_mods, answerZKey_AShiftModifierAaControlModifierzctrl+aZ
Key_Aacute   Á   áKey_ControlAltModifierzalt+controlKey_Altzctrl+alt)r   r   MetaModifieru   ctrl+alt+meta+áZKey_PlayKey_Backspace	backspacezctrl+backspace)shiftlowercontrolZunicode_upperZunicode_lowerZalt_controlZcontrol_altZmodifier_orderZnon_unicode_keyr   Zbackspace_mod)Zidsr^   )marksc           	         s   ddl m m tjdkrF|durF|dd}|dd}|dd}d d	j|D ]}t d	|O qXG  fd
dd}fdd}t	 j
}|d| ||  |ksJ 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.
    r   _enum_to_intdarwinNZctrlcmdr   metaQtCore.Qt.KeyboardModifierc                       s0   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   r-   r   r   r   isAutoRepeatB  rP   z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  dS )NQtCore.Qt.KeyrZ   r   )r   r   qt_keyr   r   keyC  rP   z$test_correct_key.<locals>._Event.keyc                    s    S r   r   r   )qt_modr   r   	modifiersD  rP   z*test_correct_key.<locals>._Event.modifiersN)r;   r<   r=   r   r   r   r   )r   r   r   r   r   r   _EventA  s   r   c                    s
   | j  d S r   )r   )event)resultr   r   on_key_pressF  s    z&test_correct_key.<locals>.on_key_pressZkey_press_event)rY   r   r   r%   r&   replaceZ
NoModifierrZ   r   r   r   r\   ZkeyPressEvent)	r^   r   r   Zqt_modsanswermodr   r   	qt_canvasr   )r   r   r   r   r   r   test_correct_key   s    ;

r   c                     s  d} t |  d _tjddd}|j   fdd}j   }	 
  |d |jdks|J jjd	ksJ jjd
ksJ | dksJ | dksJ  dksJ | dk sJ |d |jdksJ jjdksJ jjdksJ | dks,J | dks>J  dksPJ | dk sfJ |d |jdks~J jjdksJ jjdksJ | dksJ | dksJ  dksJ | dk sJ W d   n1 s0    Y  dS )z}
    Make sure that if the pixel ratio changes, the figure dpi changes but the
    widget remains the same logical size.
    z?matplotlib.backends.backend_qt.FigureCanvasQT.devicePixelRatioF   )      x   )Zfigsizedpic                    s4   |  _ jd     j| ks0J d S )N`   )return_valueZlogicalDotsPerInchChangedemitdrawZflush_eventsZdevice_pixel_ratio)ratiopr   screenr   r   set_device_pixel_ratio_  s
    z>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratioih  i  i  X     )r   r   r   i  i  g      ?   i  N)r   patchr   r   r   r   rb   r   sizer   ZwindowHandler   r   rendererwidthheightZget_width_heightZget_size_inchesall)propr   r   r   r   r   r   test_device_pixel_ratio_changeP  sD    
r   c                  C   sN   t  \} }tddd  | jjj  W d    n1 s@0    Y  d S )N#matplotlib.backends.qt_compat._execc                 S   s   d S r   r   objr   r   r   rO     rP   z"test_subplottool.<locals>.<lambda>)r   subplotsr   r   r   r   toolbarZconfigure_subplotsr   axr   r   r   test_subplottool  s    r   c                  C   s   t  \} }|ddg |dgg |jtdtdtdd tddd  | jj	j
  W d    n1 sx0    Y  d S )Nr3   r   r   )r9   r   c                 S   s   d S r   r   r   r   r   r   rO     rP   z$test_figureoptions.<locals>.<lambda>)r   r   plotZimshowZscatterranger   r   r   r   r   edit_parametersr   r   r   r   test_figureoptions  s    r   c                  C   sv   t  \} }tddddtddddg}||| tddd  | jjj	  W d    n1 sh0    Y  d S )N  r3   yearmonthdayr   r   c                 S   s   d S r   r   r   r   r   r   rO     rP   z7test_figureoptions_with_datetime_axes.<locals>.<lambda>)
r   r   r   r   r   r   r   r   r   r   )r   r   Zxydatar   r   r   %test_figureoptions_with_datetime_axes  s    r   c                  C   s   t  \} }| j  | jjj}d\}}| || | j |tj	d  ksPJ | j
 |tj	d  kslJ | }|
 }| || | |ksJ |
 |ksJ d S )N)r   r   z
figure.dpi)r   r   r   r   r   r   Zset_size_inchesr   r   ZrcParamsr   )r   r   r   whZ	old_widthZ
old_heightr   r   r   test_double_resize  s    

r   c                     sH   ddl m}  d  fdd}t \}}||_| |}d|_ sDJ 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_qtaggr   r   r   Zstale_callbackr   )r   r   r   r   r   r   r   r   test_canvas_reinit  s    r   c                  C   sx   ddl m}  |   dtddddfdtddddfg}t|}|  | }|tddddtddddgkstJ d S )	Nr   )_create_qAppzDatetime fieldr   r      r   z
Date field)Zmatplotlib.backends.backend_qtr   r   r   r
   Z
FormWidgetsetupget)r   formZwidgetvaluesr   r   r   2test_form_widget_get_with_datetime_and_date_fields  s    
r   c               &      s   dd l } ddlm m ddlm}m}  dj  dj  dj	  dj
 dD ]}t d| qT dj  dj  fdd	d
ddddddddddddddddddd| jdkrdnd fd!| jdkrd"ndfd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2f%D } fd3d4d5D } fd6d	|jd7f|jd8f|jd9f|jd:f|jd;ffD } fd<d	d=|jfd>|jfd?|jfd@|jfdA|jffD } dBj  dCj  dDj  dDj  dEj  dEj  dFj  dFj  dGj  dDj  dDj  dEj  dEj  dFj  dFj d S )HNr   r   )cursorsMouseButtonzQtGui.QDoubleValidator.Statez)QtWidgets.QDialogButtonBox.StandardButton)OkCancelzQtGui.QImage.Formatc                    s$   i | ]\}}t  d ||qS )r   r   .0kvr   r   r   
<dictcomp>  s   z$_test_enums_impl.<locals>.<dictcomp>)Z
Key_Escapeescape)ZKey_Tabtab)r   r   )Z
Key_Returnenter)Z	Key_Enterr   )Z
Key_Insertinsert)Z
Key_Deletedelete)Z	Key_Pauserd   )Z
Key_SysReqZsysreq)Z	Key_Clearclear)ZKey_Homehome)ZKey_Endend)ZKey_Leftleft)ZKey_Upup)Z	Key_Rightright)ZKey_DownZdown)Z
Key_PageUpZpageup)ZKey_PageDownZpagedown)	Key_Shiftr   r   r   r   r   Key_Metar   )r   Zalt)ZKey_CapsLockZ	caps_lock)ZKey_F1f1)ZKey_F2f2)ZKey_F3Zf3)ZKey_F4Zf4)ZKey_F5Zf5)ZKey_F6Zf6)ZKey_F7Zf7)ZKey_F8Zf8)ZKey_F9Zf9)Key_F10Zf10)r  Zf11)ZKey_F12Zf12)ZKey_Super_Lr(   )ZKey_Super_Rr(   c                    s4   g | ],\}}t  d |t  d|fqS )r   r   r   )r   r   r   r   r   r   
<listcomp>1  s   z$_test_enums_impl.<locals>.<listcomp>))r   r   )r   r   )r   r  )r   r  c                    s    i | ]\}}|t  d |qS )zQtCore.Qt.CursorShaper   r   r   r   r   r   =  s   ZSizeAllCursorZPointingHandCursorZArrowCursorZCrossCursorZ
WaitCursorc                    s    i | ]\}}t  d ||qS )zQtCore.Qt.MouseButtonr   r   r  r   r   r   H  s   Z
LeftButtonZRightButtonZMiddleButtonZXButton1ZXButton2zQtCore.Qt.WidgetAttributezQtCore.Qt.FocusPolicyzQtCore.Qt.ToolBarAreazQtCore.Qt.AlignmentFlagzQtWidgets.QSizePolicy.PolicyzQtCore.Qt.MaskMode) r%   rY   r   r   Zmatplotlib.backend_basesr   r   Z
Acceptabler   r   ZApplyrZ   ZFormat_ARGB32_Premultipliedr&   ZMOVEZHANDPOINTERZSELECT_REGIONZWAITLEFTRIGHTZMIDDLEBACKFORWARDZWA_OpaquePaintEventZStrongFocusZTopToolBarAreaZ
AlignRightZAlignVCenterZ	ExpandingZIgnoredZMaskOutColor)r%   r   r   Zbtn_typeZSPECIAL_KEYSZ_MODIFIER_KEYSZcursordZbuttondr   r   r   _test_enums_impl  s    





.















r  c                  C   s   g } dd dD D ]\}}d }dd |D }t jdkrDt sDd}n2|rZdd|}n|d	 d
krvtjdrvd}g }|r|	t
jjd| d| d | 	t
j||t|d q| S )Nc                 S   s   g | ]}|gd |dfqS )Zqtagg)r    ZQT_APIr   )r   Zqt_apir   r   r   r  f  s   z-_get_testable_qt_backends.<locals>.<listcomp>)ZPyQt6ZPySide6ZPyQt5ZPySide2c                 S   s   g | ]}t j|s|qS r   )	importlibutil	find_spec)r   depr   r   r   r  k  rP   linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedrh   r    macosxZTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because r|   )r   id)r%   r&   r   Zdisplay_is_validformatjoinr*   r+   r   appendr   markskipparamstr)envsdepsr"   r}   missingr   r   r   r   _get_testable_qt_backendsd  s*    

r   r"   c                 C   s@   t jtjdttd gi tjddi| t	dt j
dd}d S )Nrg   z
_test_enums_impl()r!   r   T)r"   rk   checkr#   r$   )r'   runr%   rm   rn   ro   r  r*   r+   rq   r,   )r"   rs   r   r   r   test_enums_available{  s    r#  )6r   r  rn   r*   rB   r'   r%   r   r   Zunittestr   r   r   r   r   Zmatplotlib._pylab_helpersr   r   rY   r   r	   Zmatplotlib.backends.qt_editorr
   ImportErrorr  r  Z
pytestmarkrq   Zfixturer   r^   r   Popenr   ra   Zparametrizeru   r{   Zskipifr&   r   r   r  r   r   r   r   r   r   r   r   r  r   r#  r   r   r   r   <module>   s   

"




8



+	!
H

	



s