o
    e/                     @   sr  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w d
Ze	j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g d!d"fd#g 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d,d- Z e	jjdddd.d/ Z!e	jjdddd0d1 Z"e	jjdddd2d3 Z#e	jjdddd4d5 Z$e	jjdddd6d7 Z%e	jjdddd8d9 Z&e	jjd*ddd:d; Z'd<d= Z(e	jjdddd>d? Z)dS )@    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)pytestimportorskipQtCore)request	qt_compatr    r   O/var/www/myenv/lib/python3.10/site-packages/matplotlib/tests/test_backend_qt.pyqt_core   s   
r   QtAggT)skip_on_importerrorc                  C   s4   t  tj} t }|jjj  | tjksJ d S N)	copyr   figspltfigurecanvasmanagerwindowclose)	init_figsfigr   r   r   test_fig_close$   s   r!   zqt_key, qt_mods, answerKey_AShiftModifierAaControlModifierzctrl+a
Key_Aacute   Á   áKey_ControlAltModifierzalt+controlKey_Altzctrl+alt)r&   r+   MetaModifieru   ctrl+alt+meta+áKey_PlayKey_Backspace	backspacezctrl+backspace)shiftlowercontrolunicode_upperunicode_loweralt_controlcontrol_altmodifier_ordernon_unicode_keyr0   backspace_mod)idsbackendQt5Agg)marksc           
         s   ddl mm  tjdkr#|dur#|dd}|dd}|dd}d jjj|D ]}t	 jj|O q,G  fd	d
d
}|
tjdfdd fdd}t j}	|	d| |	|  |kslJ 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   )_to_intr   darwinNctrlcmdr3   metac                       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   selfr   r   r   isAutoRepeat}       z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  jjS r   )getattrQtKeyrD   r   r?   qt_keyr   r   key~   s    z$test_correct_key.<locals>._Event.keyN)__name__
__module____qualname__rF   rM   r   rK   r   r   _Event|   s    rQ   keyboardModifiersc                    s    S r   r   rD   )qt_modr   r   <lambda>   rG   z"test_correct_key.<locals>.<lambda>c                    s
   | j  d S r   )rM   )event)resultr   r   on_key_press   s   
z&test_correct_key.<locals>.on_key_presskey_press_event)matplotlib.backends.qt_compatr?   r   sysplatformreplacerI   KeyboardModifier
NoModifierrH   setattrr	   QApplicationr   r   r   mpl_connectkeyPressEvent)
r<   r   rL   qt_modsanswermonkeypatchmodrQ   rW   	qt_canvasr   )r   r?   rL   rS   rV   r   test_correct_key6   s$   ;



rh   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sEJ jjd
ksMJ | dksUJ | dks]J  dkseJ | dk soJ |d |jdkszJ 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sJ jjdksJ | dksJ | dksJ  dksJ | dk sJ W d   dS 1 sw   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   )figsizedpic                    s4   |  _ jd     j| ksJ d S )N`   )return_valuelogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratioprg   screenr   r   set_device_pixel_ratio   s
   z>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratioih  i  i  X     )r{   r|   rk   i  i  g      ?   i  N)r   patchrp   r   r   r   showr   sizer   windowHandlery   rn   rendererwidthheightget_width_heightget_size_inchesall)propr    rz   r   r   rw   r   test_device_pixel_ratio_change   sF   
"r   c                  C   sP   t  \} }tddd  | jjj  W d    d S 1 s!w   Y  d S )N#matplotlib.backends.qt_compat._execc                 S      d S r   r   objr   r   r   rT      rG   z"test_subplottool.<locals>.<lambda>)r   subplotsr   r~   r   r   toolbar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    d S 1 s=w   Y  d S )N   rk   ri   )cr   c                 S   r   r   r   r   r   r   r   rT      rG   z$test_figureoptions.<locals>.<lambda>)r   r   plotimshowscatterranger   r~   r   r   r   edit_parametersr   r   r   r   test_figureoptions   s   "r   c                  C   sx   t  \} }tddddtddddg}||| tddd  | jjj	  W d    d S 1 s5w   Y  d S )N  r   yearmonthdayrk   r   c                 S   r   r   r   r   r   r   r   rT      rG   z7test_figureoptions_with_datetime_axes.<locals>.<lambda>)
r   r   r   r   r   r~   r   r   r   r   )r    r   xydatar   r   r   %test_figureoptions_with_datetime_axes   s   "r   c                  C   s   t  \} }| j  | jjj}d\}}| || | j |tj	d  ks(J | j
 |tj	d  ks6J | }|
 }| || | |ksLJ |
 |ksTJ d S )N)ri   rk   z
figure.dpi)r   r   r   rs   r   r   set_size_inchesr   
matplotlibrcParamsr   )r    r   r   wh	old_width
old_heightr   r   r   test_double_resize   s   

r   c                     sH   ddl m}  d  fdd}t \}}||_| |}d|_ s"J d S )Nr   )FigureCanvasQTAggFc                    s   | j   d d S )NT)r   	draw_idle)r    stalecalledr   r   crashing_callback  s   
z-test_canvas_reinit.<locals>.crashing_callbackT)!matplotlib.backends.backend_qtaggr   r   r   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s:J d S )	Nr   )_create_qAppzDatetime fieldr   ri      r   z
Date field)matplotlib.backends.backend_qtr   r   r   r
   
FormWidgetsetupget)r   formwidgetvaluesr   r   r   2test_form_widget_get_with_datetime_and_date_fields  s   
r   c                  C   s   g } dd dD D ]S\}}d }dd |D }t jdkr"t s"d}n|r-dd|}n|d	 d
kr;tjdr;d}g }|rO|	t
jjd| d| d | 	t
j||t|d q	| S )Nc                 S   s   g | ]
}|gd |dfqS )qtagg)
MPLBACKENDQT_APIr   ).0qt_apir   r   r   
<listcomp>.  s    z-_get_testable_qt_backends.<locals>.<listcomp>)PyQt6PySide6PyQt5PySide2c                 S   s   g | ]
}t j|s|qS r   )	importlibutil	find_spec)r   depr   r   r   r   3  s    linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedz, r   macosxTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because )reason)r>   id)rZ   r[   r   display_is_validformatjoinosenvironr   appendr   markskipparamstr)envsdepsenvr   missingr>   r   r   r   _get_testable_qt_backends,  s*   

r   c              
      s   ddl m} t  d   fdd}jd| ttj}dd }ttj| zLt	j
jj   |ks9J ttj|ksCJ tjtjfD ]$}jd| ttj| |   |kscJ ttj|ksmJ qIW ttj| d S ttj| w )Nr   )_BackendQT5c                      s   t t j j  d S r   )signal	getsignalSIGINTQCoreApplicationexitr   event_loop_handlerr   r   r   fire_signal_and_quitM  s   z6test_fig_sigint_override.<locals>.fire_signal_and_quitc                 S   r   r   r   )signumframer   r   r   custom_handler\  s   z0test_fig_sigint_override.<locals>.custom_handler)matplotlib.backends.backend_qt5r   r   r   QTimer
singleShotr   r   r   r   backends
backend_qt
_BackendQTmainloopSIG_DFLSIG_IGN)r   r   r   original_handlerr   r   r   r   test_fig_sigint_overrideC  s(   	"r   )*r   r   r   r   rZ   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   rY   r   r	   matplotlib.backends.qt_editorr
   ImportErrorr   r   
pytestmark_test_timeoutfixturer   r<   r!   parametrizer   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    





+	#
H

	



