
    (?e/                     R   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 	 d dlmZmZ d dlmZ n%# e$ r e	j                            d	          ZY nw xY wd
Ze	j        d             Ze	j                            dd          d             Ze	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%&          e	j                            d' e	j        d(e	j                            d(d          )           e	j        de	j                            dd          )          g          d*                         Z e	j                            dd          d+             Z!e	j                            dd          d,             Z"e	j                            dd          d-             Z#e	j                            dd          d.             Z$e	j                            dd          d/             Z%e	j                            dd          d0             Z&e	j                            d(d          d1             Z'd2 Z(e	j                            dd          d3             Z)dS )4    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui	QtWidgets)_formlayoutzNo usable Qt bindings<   c                 <    t          j        d          }|j        }|S )Nzmatplotlib.backends.qt_compat)pytestimportorskipQtCore)request	qt_compatr   s      @lib/python3.11/site-packages/matplotlib/tests/test_backend_qt.pyqt_corer      s     #$CDDIFM    QtAggT)skip_on_importerrorc                      t          j         t          j                  } t          j                    }|j        j        j                                         | t          j        k    sJ d S N)	copyr   figspltfigurecanvasmanagerwindowclose)	init_figsfigs     r   test_fig_closer$   $   sY     	#(##I *,,C J##%%%       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_keyr3   backspace_mod)idsbackendQt5Agg)marksc                 L  
 ddl mm
 t          j        dk    rD|B|                    dd          }|                    dd          }|                    dd          }d
j        j        j        |D ]}t          
j        j        |          z    G 
fd	d
          }|
                    t          j        dfd           fd}t          j                    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   )_to_intr   darwinNctrlcmdr6   metac                   $    e Zd Zd Z fdZdS ) test_correct_key.<locals>._Eventc                     dS )NF )selfs    r   isAutoRepeatz-test_correct_key.<locals>._Event.isAutoRepeat}   s    uur   c                 J     t          j        j                            S r   )getattrQtKey)rL   r   rC   qt_keys    r   keyz$test_correct_key.<locals>._Event.key~   s     gggfimV&D&DEEEr   N)__name__
__module____qualname__rM   rS   )r   rC   rR   s   r   _EventrI   |   s/        ,,,EEEEEEEEEr   rW   keyboardModifiersc                     S r   rK   )rL   qt_mods    r   <lambda>z"test_correct_key.<locals>.<lambda>   s    V r   c                     | j         d S r   )rS   )eventresults    r   on_key_pressz&test_correct_key.<locals>.on_key_press   s    r   key_press_event)matplotlib.backends.qt_compatrC   r   sysplatformreplacerP   KeyboardModifier
NoModifierrO   setattrr
   QApplicationr   r   r   mpl_connectkeyPressEvent)r?   r   rR   qt_modsanswermonkeypatchmodrW   r_   	qt_canvasr   rC   rZ   r^   s     `       @@@@r   test_correct_keyrp   6   s   v >=======
|xF$6..	511//FY'2F ; ;'&)4c:::F F F F F F F F F F F F 	.0C++++- - -     
#I+\:::FFHH%%%Vr   c                     d} t          j        |           5 d_        t          j        dd          }|j                                         f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    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    sJ |                                dk                                    sJ 	 ddd           dS # 1 swxY w 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                     | _         j                            d                                                                             j        | k    sJ d S )N`   )return_valuelogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratiopro   screens    r   set_device_pixel_ratioz>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio   sa    "AN ,11"555NN""$$$ /5888888r   ih  i  i  X     )r   r   rt   i  i  g      ?   i  N)r   patchrz   r   r   r   showr   sizer    windowHandler   rw   rendererwidthheightget_width_heightget_size_inchesall)propr#   r   r   r   ro   r   s       @@@r   test_device_pixel_ratio_changer      s    MD	D		 >7QjS111J		9 	9 	9 	9 	9 	9 	9 	   ~~!!##002299;;q!!! w#~~~~!'4////!(C//// zz||s""""{{}}####))++z9999##%%/4466666q!!! w#~~~~!'4////!(C//// zz||s""""{{}}####))++z9999##%%/4466666s### w#~~~~!'3....!(C//// zz||s""""{{}}####))++z9999##%%/44666666}>7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7s   KK//K36K3c                      t          j                    \  } }t          j        dd           5  | j        j        j                                         d d d            d S # 1 swxY w Y   d S )N#matplotlib.backends.qt_compat._execc                     d S r   rK   objs    r   r[   z"test_subplottool.<locals>.<lambda>       t r   )r   subplotsr   r   r   r   toolbarconfigure_subplotsr#   axs     r   test_subplottoolr      s    lnnGC	9;K;K	L	L 8 8
"557778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   $AA"%A"c                     t          j                    \  } }|                    ddg           |                    dgg           |                    t          d          t          d          t          d                     t          j        dd           5  | j        j	        j
                                         d d d            d S # 1 swxY w Y   d S )N   rt   rr   )cr   c                     d S r   rK   r   s    r   r[   z$test_figureoptions.<locals>.<lambda>   r   r   )r   r   plotimshowscatterranger   r   r   r   r   edit_parametersr   s     r   test_figureoptionsr      s    lnnGCGGQFOOOIIseJJuQxxqU1XXJ...	9;K;K	L	L 5 5
"224445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   $CCCc                  J   t          j                    \  } }t          ddd          t          ddd          g}|                    ||           t	          j        dd           5  | j        j        j        	                                 d d d            d S # 1 swxY w Y   d S )N  r   yearmonthdayrt   r   c                     d S r   rK   r   s    r   r[   z7test_figureoptions_with_datetime_axes.<locals>.<lambda>   r   r   )
r   r   r   r   r   r   r   r   r   r   )r#   r   xydatas      r   %test_figureoptions_with_datetime_axesr      s    lnnGCd!+++d!+++F GGFF	9;K;K	L	L 5 5
"224445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   '$BBBc                  h   t          j                    \  } }| j                                         | j        j        j        }d\  }}|                     ||           | j                                        |t          j	        d         z  k    sJ | j        
                                |t          j	        d         z  k    sJ |                                }|
                                }|                     ||           |                                |k    sJ |
                                |k    sJ d S )N)rr   rt   z
figure.dpi)r   r   r   r}   r   r    set_size_inchesr   
matplotlibrcParamsr   )r#   r   r    wh	old_width
old_heights          r   test_double_resizer      s    lnnGCJOOZ&FDAq1:Z%8%F!FFFFF:!j&9,&G"GGGGGIJ1<<>>Y&&&&==??j((((((r   c                      ddl m}  dfd}t          j                    \  }}||_         | |          }d|_        sJ d S )Nr   )FigureCanvasQTAggFc                 >    | j                                          dd S )NT)r   	draw_idle)r#   stalecalleds     r   crashing_callbackz-test_canvas_reinit.<locals>.crashing_callback  s     
r   T)!matplotlib.backends.backend_qtaggr   r   r   stale_callbackr   )r   r   r#   r   r   r   s        @r   test_canvas_reinitr     sp    CCCCCCF    
 lnnGC*Cs##FCIMMMMMr   c                  B   ddl m}   |              dt          ddd          fdt          ddd          fg}t	          j        |          }|                                 |                                }|t          ddd          t          ddd          gk    sJ d S )	Nr   )_create_qAppzDatetime fieldr   rr      r   z
Date field)matplotlib.backends.backend_qtr   r   r   r   
FormWidgetsetupget)r   formwidgetvaluess       r   2test_form_widget_get_with_datetime_and_date_fieldsr     s    ;;;;;;LNNN 
8QB???@	tQB7778D #D))F
LLNNNZZ\\Fd!,,,$aR(((      r   c            
      2   g } d dD             D ]\  }}d }d |D             }t           j        dk    rt          j                    sd}nX|r)d                    d                    |                    }n-|d         d	k    r!t          j                            d
          rd}g }|r9|	                    t          j                            d| d|                      | 	                    t          j        ||t          |                               | S )Nc                     g | ]
}|gd |dfS )qtagg)
MPLBACKENDQT_APIrK   ).0qt_apis     r   
<listcomp>z-_get_testable_qt_backends.<locals>.<listcomp>.  s7        Xg@@A  r   )PyQt6PySide6PyQt5PySide2c                 P    g | ]#}t           j                            |          !|$S rK   )	importlibutil	find_spec)r   deps     r   r   z-_get_testable_qt_backends.<locals>.<listcomp>3  s-    LLL3in.F.Fs.K.KL3LLLr   linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedz, r   macosxTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because )reason)rA   id)rb   rc   r   display_is_validformatjoinosenvironr   appendr   markskipparamstr)envsdepsenvr   missingrA   s         r   _get_testable_qt_backendsr   ,  sE   D B   A A	c LL$LLLLG##%688 $>FF 	5,33DIIg4F4FGGFF(**rz~~j/I/I*4F 	<LL))939999 * ; ; < < <FLEc#hh???@@@@Kr   c                 ^    ddl m} t          j                     d  fd} j                            d|           t          j        t          j                  }d }t          j        t          j        |           	 t          j
        j        j                                         |k    sJ t          j        t          j                  |k    sJ t          j        t          j        fD ]|} j                            d|           t          j        t          j        |           |                                 |k    sJ t          j        t          j                  |k    sJ }	 t          j        t          j        |           d S # t          j        t          j        |           w xY w)Nr   )_BackendQT5c                  v    t          j        t           j                   j                                         d S r   )signal	getsignalSIGINTQCoreApplicationexit)event_loop_handlerr   s   r   fire_signal_and_quitz6test_fig_sigint_override.<locals>.fire_signal_and_quitM  s5     $-fm<< 	 %%'''''r   c                     d S r   rK   )signumframes     r   custom_handlerz0test_fig_sigint_override.<locals>.custom_handler\  s    r   )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   s   `    @r   test_fig_sigint_overrider  C  s   ;;;;;;JLLL ( ( ( ( ( ( Na!5666 '66   M&-0007 	&1::<<< "^3333 ...@@@@  &~v~> 	E 	ENN%%a)=>>>M&-888  """%7777#FM22nDDDDD	E 	fm%566666fm%56666s    C)F !F,)*r   r   r   r   rb   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   ra   r	   r
   matplotlib.backends.qt_editorr   ImportErrorr   r   
pytestmark_test_timeoutfixturer   r?   r$   parametrizer   rp   r   r   r   r   r   r   r   r   r  rK   r   r   <module>r     s        				  



 # # # # # # # #            $ $ $ $ $ $ ) ) ) ) ) ) ( ( ( ( ( (;>>>>>>>>9999999 ; ; ;!!"9::JJJ;     W$77! ! 87!" 	?#S)	"c	$%23	

 
r@A	-9	&'4>>>@	
 
R	"k*	
+6	 	 	;  * *V FLk!!(!EEG G G FLk!!'t!DDF F F%      W* *h F W$77E7 E7 87E7P W$778 8 878 W$775 5 875 W$775 5 875 W$77) ) 87)& W$77  87$ X488  98"  . W$7757 57 8757 57 57s   A A/.A/