U
    ÂmœdS  ã                   @   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   úY/home/sam/Atlas/atlas_env/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ƒ}| t	j
d‡f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                       s$   e Zd Z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.keyN)r<   r=   r>   r¤   r©   r   r§   r   r   Ú_EventA  s   rª   ZkeyboardModifiersc                    s   ˆ S r   r   r£   )Úqt_modr   r   rP   F  rQ   z"test_correct_key.<locals>.<lambda>c                    s
   | j ‰ d S r   )r©   )Úevent)Úresultr   r   Úon_key_pressH  s    z&test_correct_key.<locals>.on_key_pressZkey_press_event)rZ   r�   rž   r&   r'   ÚreplaceZ
NoModifierr[   Úsetattrr	   ZQApplicationr   r   r   r]   ZkeyPressEventr   )
r_   r   r¨   Zqt_modsZanswerZmonkeypatchÚ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_ratioa  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_changeR  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©Ú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>3  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÷   J  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WAITÚLEFTÚ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  h  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  m  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_backendsf  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