a
    ëÝEbÑR  ã                   @   sJ  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 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$   | j  d¡j\}t d¡}|j}|S )NÚbackendzmatplotlib.backends.qt_compat)ÚnodeZget_closest_markerÚargsÚpytestZimportorskipÚQtCore)Úrequestr   Z	qt_compatr   © r   ú`/home/ja/django-apps/lartica_env/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)Úselfr   Ú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)r0   Ú
terminatorÚbufÚcr   r   r   Úwait_forG   s    ÿ
zWaitForStringPopen.wait_for)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   r<   Ú__classcell__r   r   r2   r   r   9   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)rC   rD   )r-   r(   r   r   Ú
interupter]   s
    
z%_test_sigint_impl.<locals>.interupterr5   Ú
draw_eventc                  W   s   t ddd�S ©NÚDRAWT©Úflush©Úprint©r   r   r   r   Ú<lambda>j   ó    z#_test_sigint_impl.<locals>.<lambda>c                     s   ˆ   ¡ S r   ©ÚstartrP   ©Útimerr   r   rQ   n   rR   ÚSUCCESSTrL   )r(   Úmatplotlib.pyplotr   r-   Ú	threadingÚswitch_backendÚmatplotlib.backends.qt_compatr   ÚgetattrÚTimerr   r   Úmpl_connectÚKeyboardInterruptrO   )	r   Útarget_namer1   r   rY   r   rH   Útargetr   r   )r-   r(   rV   r   Ú_test_sigint_implT   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0 t|ƒ d|v sŒJ ‚d S )Nú-cz
_test_sigint_impl(ú, ú)rK   ©ÚtimeoutrW   )r   Úget_backendr   r(   Ú
executableÚinspectÚ	getsourcerb   r<   ÚcommunicateÚ_test_timeoutrE   rO   ©ra   r1   r   Úprocr&   Ú_r   r   r   Útest_sigintv   s"    ÿÿÿ
rv   c           
         sÊ   dd l }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   rB   rI   c                  W   s   t ddd�S rJ   rN   rP   r   r   r   rQ   —   rR   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r5   )rf   TÚSIGUSR1rL   c                    s   ˆ   ¡  d S r   rS   ©ÚsignumÚframerU   r   r   Úcustom_signal_handler�   s    zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerrW   )rD   r(   rX   r   rZ   r[   r   r\   r   r   r^   Z	new_timerZsingle_shotZadd_callbackrO   rw   r_   )
r   r`   r1   rD   r(   r   r   ra   r   r{   r   rU   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 s¶J ‚t  ¡  d S )	Nrh   z'
_test_other_signal_before_sigint_impl(ri   rj   rK   rw   rk   rW   )r   rm   r   r(   rn   ro   rp   r|   r<   r-   rE   ÚpidrD   rw   rG   rq   rr   rO   r   rs   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|¡ z–t	j
jj ¡  ˆ |ksrJ ‚t tj¡|ks†J ‚tjtjfD ]H}ˆj d|¡ t tj|¡ | ¡  ˆ |ksÆJ ‚t tj¡|ks’J ‚q’W t tj|¡ nt tj|¡ 0 d S )Nr   )Ú_BackendQT5c                      s   t  t j¡‰ ˆj ¡  d S r   )rD   Ú	getsignalrG   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
singleShotrD   r‚   rG   Ú
matplotlibÚbackendsZ
backend_qtZ
_BackendQTZmainloopÚSIG_DFLÚSIG_IGN)r   r�   r…   Ú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)Ú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sÂJ ‚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   ©r0   r   r   r   ÚisAutoRepeatD  rR   z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   ˆt ˆ dƒˆƒƒS )NúQtCore.Qt.Key©r\   r¥   )rŸ   r    Úqt_keyr   r   ÚkeyE  rR   z$test_correct_key.<locals>._Event.keyc                    s   ˆ S r   r   r¥   )Úqt_modr   r   Ú	modifiersF  rR   z*test_correct_key.<locals>._Event.modifiersN)r=   r>   r?   r¦   rª   r¬   r   )rŸ   r    r©   r«   r   r   Ú_EventC  s   r­   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)r[   rŸ   r    r(   r)   ÚreplaceZ
NoModifierr\   r   r   r   r^   ZkeyPressEvent)	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|J ‚ˆjjd	ksŒJ ‚ˆjjd
ksœJ ‚| ¡ dks¬J ‚| ¡ dks¼J ‚ˆ ¡ dksÌJ ‚| ¡ dk ¡ sàJ ‚|dƒ |jdksöJ ‚ˆ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�s�J ‚ˆjjdk�s¢J ‚| ¡ dk�s´J ‚| ¡ dk�sÆJ ‚ˆ ¡ dk�sØJ ‚| ¡ dk ¡ �sîJ ‚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_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¹   Ú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   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   rQ   ž  rR   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 )Nr5   r·   rµ   )r;   rÎ   c                 S   s   d S r   r   rÏ   r   r   r   rQ   ¨  rR   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éå  r5   ©ÚyearÚmonthÚdayr·   rÎ   c                 S   s   d S r   r   rÏ   r   r   r   rQ   ´  rR   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s˜J ‚| 
¡ |ks¨J ‚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‰m} ddlm}m} ˆ dƒj ˆ dƒj	 ˆ dƒj
 ˆ dƒj dD ]}tˆ dƒ|ƒ qXˆ 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Ÿ   r    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(   r[   rŸ   r    r   Zmatplotlib.backend_basesrð   rñ   Z
Acceptablerò   ró   ZApplyr\   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ð   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  rR   Ú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i 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-   rD   r*   r(   r   r   Zunittestr   r   r‡   r   r   Zmatplotlib._pylab_helpersr   r   r[   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