U
    d»{j¯R  ã                   @   sd  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k
rÈ   ej d	¡ZY nX 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/d-d3d7gd8fd9g dfd:g d;fd:d-gd<fgd=d>d?d@dAdBdCdDdEd;dFgdG�ej #dHej*d%ejjd%dd�dI�ej*dejjddd�dI�g¡dJdK„ ƒƒZ+ejjddd�dLdM„ ƒZ,ejjddd�dNdO„ ƒZ-ejjddd�dPdQ„ ƒZ.ejjddd�dRdS„ ƒZ/ejjddd�dTdU„ ƒZ0ejjddd�dVdW„ ƒZ1ejjd%dd�dXdY„ ƒZ2dZd[„ Z3d\d]„ Z4ej #d^e4ƒ ¡d_d`„ ƒZ5dS )aé    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   ú_/var/www/html/bwave/python/venv/lib/python3.8/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s0t	‚d S ©N)
Úcopyr   ZfigsÚpltÚfigureÚcanvasÚmanagerÚwindowÚcloseÚAssertionError)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                    s@   t jdkrtj|d< tƒ j||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   r1   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 |Ž W n  tk
r¼   td
dd� Y nX 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)rB   rC   )r+   r&   r   r   Úinterrupter\   s
    
z&_test_sigint_impl.<locals>.interrupterr4   Ú
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   ©ÚstartrO   ©Útimerr   r   rP   m   rQ   ÚSUCCESSTrK   )r&   Úmatplotlib.pyplotr   r+   Ú	threadingÚswitch_backendÚmatplotlib.backends.qt_compatr   ÚgetattrÚTimerr   r   Úmpl_connectÚKeyboardInterruptrN   )	ÚbackendÚtarget_namer0   r   rX   r   rG   Útargetr   r   )r+   r&   rU   r   Ú_test_sigint_implS   s,    

þ
þrb   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X t|ƒ d|ksŒt‚d S )Nú-cz
_test_sigint_impl(ú, ú)rJ   ©ÚtimeoutrV   )r   Úget_backendr   r&   Ú
executableÚinspectÚ	getsourcerb   r;   ÚcommunicateÚ_test_timeoutrD   rN   r   ©ra   r0   r_   Úprocr$   Ú_r   r   r   Útest_sigintu   s"    ÿÿÿ
rv   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 |Ž W n  tk
rº   tddd
� Y nX d S )Nr   rA   rH   c                  W   s   t ddd�S rI   rM   rO   r   r   r   rP   •   rQ   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r4   )rf   TÚSIGUSR1rK   c                    s   ˆ   ¡  d S r   rR   ©ÚsignumÚframerT   r   r   Úcustom_signal_handler›   s    zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerrV   )rC   rW   r   rY   rZ   r   r[   r   r   r]   Z	new_timerZsingle_shotZadd_callbackrN   rw   r^   )	r_   r`   r0   rC   r   r   ra   r   r{   r   rT   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X t|ƒ d|ks¶t‚t  ¡  d S )	Nrh   z'
_test_other_signal_before_sigint_impl(ri   rj   rJ   rw   rk   rV   )r   rm   r   r&   rn   ro   rp   r|   r;   r+   rD   ÚpidrC   rw   rF   rq   rr   rN   r   r   rs   r   r   r   Útest_other_signal_before_sigint¥   s*    ÿÿÿ

r€   ZQt5Aggc              
      sô   ddl m} t ¡  d ‰ ‡ ‡fdd„}ˆj d|¡ t tj¡}dd„ }t tj|¡ zˆt	j
jj ¡  ˆ |ksrt‚t tj¡|ks†t‚tjtjfD ]H}ˆj d|¡ t tj|¡ | ¡  ˆ |ksÆt‚t tj¡|ks’t‚q’W 5 t tj|¡ X d S )Nr   )Ú_BackendQT5c                      s   t  t j¡‰ ˆj ¡  d S r   )rC   Ú	getsignalrF   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   rx   r   r   r   Úcustom_handlerÛ   s    z0test_fig_sigint_override.<locals>.custom_handler)Zmatplotlib.backends.backend_qt5r�   r   r   ZQTimerZ
singleShotrC   r‚   rF   Ú
matplotlibÚbackendsZ
backend_qtZ
_BackendQTZmainloopr   Ú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Ú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_keyZbackspace_mod)Zidsr_   )Úmarksc           	         sÆ   ddl m‰ m‰ tjdkrF|dk	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sÂt‚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  rQ   z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   ˆt ˆ dƒˆƒƒS )NúQtCore.Qt.Key©r[   r£   )r�   rž   Úqt_keyr   r   ÚkeyC  rQ   z$test_correct_key.<locals>._Event.keyc                    s   ˆ S r   r   r£   )Úqt_modr   r   Ú	modifiersD  rQ   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)rZ   r�   rž   r&   r'   ÚreplaceZ
NoModifierr[   r   r   r   r]   ZkeyPressEventr   )	r_   r   r§   Zqt_modsZ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|t‚ˆjjd	ksŒt‚ˆjjd
ksœt‚| ¡ dks¬t‚| ¡ dks¼t‚ˆ ¡ dksÌt‚| ¡ dk ¡ sàt‚|dƒ |jdksöt‚ˆ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�s�t‚ˆjjdk�s¢t‚| ¡ dk�s´t‚| ¡ dk�sÆt‚ˆ ¡ dk�sØt‚| ¡ dk ¡ �sît‚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 logical size.
    z?matplotlib.backends.backend_qt.FigureCanvasQT.devicePixelRatioFé   )é   é   éx   )ZfigsizeÚdpic                    s4   | ˆ _ ˆj d¡ ˆ ¡  ˆ ¡  ˆj| ks0t‚d S )Né`   )Úreturn_valueZlogicalDotsPerInchChangedÚemitÚdrawZflush_eventsZdevice_pixel_ratior   )Ú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   rc   r   Úsizer   ZwindowHandler¿   r·   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   s:   t  ¡ \} }t ddd„ ¡� | jjj ¡  W 5 Q R X d S )Nú#matplotlib.backends.qt_compat._execc                 S   s   d S r   r   ©Úobjr   r   r   rP   œ  rQ   z"test_subplottool.<locals>.<lambda>)r   Úsubplotsr   rÄ   r   r   ÚtoolbarZconfigure_subplots©r   Úaxr   r   r   Útest_subplottool™  s    rÓ   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 )Nr4   rµ   r³   )r:   rÌ   c                 S   s   d S r   r   rÍ   r   r   r   rP   ¦  rQ   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   sb   t  ¡ \} }tdddd�tdddd�g}| ||¡ t ddd„ ¡� | jjj 	¡  W 5 Q R X d S )Néå  r4   ©ÚyearÚmonthÚdayrµ   rÌ   c                 S   s   d S r   r   rÍ   r   r   r   rP   ²  rQ   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sPt
‚| j ¡ |tj	d  kslt
‚| ¡ }| ¡ }|  ||¡ | ¡ |ks˜t
‚| ¡ |ks¨t
‚d S )N)r³   rµ   z
figure.dpi)r   rÏ   r   r»   r   r   Zset_size_inchesrÇ   r‡   ZrcParamsr   rÈ   )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|_ˆ sDt‚d S )Nr   )ÚFigureCanvasQTAggFc                    s   | j  ¡  d‰ d S )NT)r   Z	draw_idle)r   Ústale©Z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ã   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stt‚d S )	Nr   )Ú_create_qAppzDatetime fieldrØ   r³   é   rÙ   z
Date field)	Zmatplotlib.backends.backend_qtræ   r   r   r
   Z
FormWidgetÚsetupÚgetr   )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r¾dnd fd!| jdkrÒd"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_Pausere   )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&   rZ   r�   rž   Zmatplotlib.backend_basesrí   rî   Z
Acceptablerï   rð   ZApplyr[   ZFormat_ARGB32_Premultipliedr'   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITZLEFTZRIGHTZMIDDLEZBACKZ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  s      Úlinuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedri   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)Z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tjddi| –t	dt j
dd�}d S )Nrh   z
_test_enums_impl()r"   r    T)r#   rl   Úcheckr$   r%   )r(   Úrunr&   rn   ro   rp   r  r+   r,   rr   r-   )r#   rt   r   r   r   Útest_enums_available{  s    ÿ  ûr  )6r   r	  ro   r+   rC   r(   r&   r   r   Zunittestr   r   r‡   r   r   Zmatplotlib._pylab_helpersr   r   rZ   r   r	   Zmatplotlib.backends.qt_editorr
   ÚImportErrorr  r  Z
pytestmarkrr   Zfixturer   r_   r   ÚPopenr   rb   Zparametrizerv   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