
    
3j3                     T   S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJr  S SK	r	S SK
r
S SK
Jr  S SKJr  S SK
Jr   S SKJr  S SKJr  S S	KJr  S S
KJr  Sr\	R.                  R7                  SSS9S 5       r\	R.                  R;                  SSS/S4S/ S4SS/S4SS/S4S/ S4SS/S4SS/S4S/ S QS!4S"/ S4S#/ S$4S#S/S%4// S&QS'9\	R.                  R;                  S(\	R<                  " S)\	R.                  R7                  S)SS9S*9\	R<                  " S\	R.                  R7                  SSS9S*9/5      S+ 5       5       r\	R.                  R7                  SSS9S, 5       r \	R.                  R7                  SSS9S- 5       r!\	R.                  R7                  SSS9S. 5       r"\	R.                  R7                  SSS9S/ 5       r#\	R.                  R7                  SSS9S0 5       r$\	R.                  R7                  SSS9S1 5       r%\	R.                  R7                  SSS9S2 5       r&\	R.                  R7                  S)SS9S3 5       r'S4 r(\	R.                  R7                  SSS9S5 5       r)\	R.                  R7                  SSS9S6 5       r*g! \ a    \	R.                  R1                  S5      r GNPf = f)7    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtCore)QtGui)	QtWidgets)_formlayoutzNo usable Qt bindings<   QtAggT)skip_on_importerrorc                      [         R                   " [        R                  5      n [        R                  " 5       nUR
                  R                  R                  R                  5         U [        R                  :X  d   eg N)	copyr   figspltfigurecanvasmanagerwindowclose)	init_figsfigs     Z/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/tests/test_backend_qt.pytest_fig_closer      sU     		#((#I **,C JJ##%        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_keyr-   backspace_mod)idsbackendQt5Agg)marksc                 f  ^^	^
^^ SSK Jm
Jm	  [        R                  S:X  a9  Ub6  UR                  SS5      nUR                  SS5      nUR                  SS5      nSmT	R                  R                  R                  mU H&  nT[        T	R                  R                  U5      -  mM(      " U	U
U4S	 jS
5      nUR                  [        R                  SU4S j5        U4S jn[        R                  " 5       R                  nUR!                  SU5        UR#                  U" 5       5        TU:X  d   eg)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cmdr0   metac                   ,   > \ rS rSrS rU UU4S jrSrg) test_correct_key.<locals>._Eventu   c                     g)NF )selfs    r   isAutoRepeat-test_correct_key.<locals>._Event.isAutoRepeatv   s    ur   c                 P   > T" [        TR                  R                  T5      5      $ r   )getattrQtKey)rG   r	   r=   qt_keys    r   key$test_correct_key.<locals>._Event.keyw   s    ggfiimmV&DEEr   rF   N)__name__
__module____qualname____firstlineno__rH   rO   __static_attributes__)r	   r=   rN   s   r   _EventrC   u   s    ,EEr   rV   keyboardModifiersc                    > T$ r   rF   )rG   qt_mods    r   <lambda>"test_correct_key.<locals>.<lambda>z   s    Vr   c                    > U R                   mg r   )rO   )eventresults    r   on_key_press&test_correct_key.<locals>.on_key_press|   s    r   key_press_event)matplotlib.backends.qt_compatr=   r	   sysplatformreplacerL   KeyboardModifier
NoModifierrK   setattrr   QApplicationr   r   r   mpl_connectkeyPressEvent)r9   rN   qt_modsanswermonkeypatchmodrV   r_   	qt_canvasr	   r=   rY   r^   s    `       @@@@r   test_correct_keyrq   /   s    v >
||xF$6.	51/FYY''22F'&))44c:: F F 	..0C+- 

##I+\:FH%Vr   c                  n  ^	^
 Sn [         R                  " U 5       m	ST	l        [        R                  " SSS9nUR
                  m
T
R                  5         U	U
4S jnT
R                  R                  5         T
R                  5         T
R                  5         T
R                  5       n/ SQnU H  u  pVpxUb  U" U5        UR                  U:X  d   eT
R                  R                  U:X  d   eT
R                  R                  U:X  d   eUR                  5       S	:X  d   eUR                  5       S
:X  d   eT
R                  5       S:X  d   eUR!                  5       S:H  R#                  5       (       a  M   e   [        R$                  " U5        UR                  S:X  d   e SSS5        g! , (       d  f       g= f)zq
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                 0  > U Tl         TR                  5       R                  5       n[        S [        R
                  " 5       R                  SS5      S S  5       5      nUS:  aW  [        R                  R                  U[        R                  " [        R                  R                  R                  5      5        O)UR                  5       R                  R                  S5        TR                  5         TR!                  5         TR"                  U :X  d   eg )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )int).0xs     r   	<genexpr>Qtest_device_pixel_ratio_change.<locals>.set_device_pixel_ratio.<locals>.<genexpr>   s     #X4WqCFF4Ws   .ru   )   r   `   )return_valuer   windowHandletupler	   qVersionsplitQCoreApplication	sendEventQEventTypeDevicePixelRatioChangescreenlogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratior   current_versionprp   s      r   set_device_pixel_ratio>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio   s    "AN%%'446F##XFOO4E4K4KCQR4STVUV4W#XXO&(''11MM&--"4"4"K"KLN 99>>rBNN""$ //5888r   ))Nh      )rs   r   r   r   )ru      i  i  )g      ?   i  r   NX  r   )r   r   )r   patchr   r   r   r   showr   r   r   sizerx   rendererwidthheightget_width_heightget_size_inchesallr   )propr   r   r   optionsr   rx   r   r   r   rp   s            @@r   test_device_pixel_ratio_changer      sx    MD	D	QjjS1JJ		9, 	  ~~
 *1%E &u- 77c>!>%%++u444%%,,666 ::<3&&&;;=C'''--/:==='')V388:::: *1  			#ww#~~s 
		s   EF&0,F&&
F4c                  d   [         R                  " 5       u  p[        R                  " SS 5         U R                  R
                  R                  R                  5       nUc   eX R                  R
                  R                  R                  5       :X  d   e S S S 5        g ! , (       d  f       g = f)N#matplotlib.backends.qt_compat._execc                     g r   rF   objs    r   rZ   "test_subplottool.<locals>.<lambda>       tr   )r   subplotsr   r   r   r   toolbarconfigure_subplots)r   axtools      r   test_subplottoolr      s{    llnGC	9;K	Lzz!!))<<>zz))11DDFFFF 
M	L	Ls   A'B!!
B/c                     [         R                  " 5       u  pUR                  SS/5        UR                  S//5        UR	                  [        S5      [        S5      [        S5      S9  [        R                  " SS 5         U R                  R                  R                  R                  5         S S S 5        g ! , (       d  f       g = f)N   ru   rs   )cr   c                     g r   rF   r   s    r   rZ   $test_figureoptions.<locals>.<lambda>   r   r   )r   r   plotimshowscatterranger   r   r   r   r   edit_parameters)r   r   s     r   test_figureoptionsr      s    llnGCGGQFOIIseJJuQxqU1XJ.	9;K	L

""224 
M	L	Ls   /B::
Cc                 N   [         R                  " 5       u  pUR                  S//5        U S-  nSn[        R                  " U[        U5      S 4S9   UR                  R                  R                  R                  5       nU[        U5      :X  d   eUR                  5       (       d   e S S S 5        [        R                  " USS9   UR                  R                  R                  R                  5       nUb   e S S S 5        g ! , (       d  f       Na= f! , (       d  f       g = f)Nr   z
foobar.pngzCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileName)r   )NN)r   r   r   r   r   strr   r   r   save_figureexists)tmp_pathr   r   expectedr   fnames         r   test_save_figure_returnr      s    llnGCIIse,&HPD	DHt'<	=

""**668H%%%     
> 
D|	4

""**668}} 
5	4	 
>	= 
5	4s   AD4D
D
D$c                  @   [         R                  " 5       u  p[        SSSS9[        SSSS9/nUR                  X"5        [        R
                  " SS 5         U R                  R                  R                  R                  5         S S S 5        g ! , (       d  f       g = f)N  r   yearmonthdayru   r   c                     g r   rF   r   s    r   rZ   7test_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      su    llnGCd!+d!+F GGF	9;K	L

""224 
M	L	Ls   /B
Bc                  Z   [         R                  " 5       u  pU R                  R                  5         U R                  R                  R
                  nSu  p4U R                  X45        U R                  R                  5       U[        R                  S   -  :X  d   eU R                  R                  5       U[        R                  S   -  :X  d   eUR                  5       nUR                  5       nU R                  X45        UR                  5       U:X  d   eUR                  5       U:X  d   eg )N)rs   ru   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     llnGCJJOOZZ&&FDA::Z%8%8%F!FFFF::!j&9&9,&G"GGGGIJ<<>Y&&&==?j(((r   c                     ^ SSK Jn   SmU4S jn[        R                  " 5       u  p#Xl        U " U5      nSUl        T(       d   eg )Nr   )FigureCanvasQTAggFc                 >   > U R                   R                  5         Smg )NT)r   	draw_idle)r   stalecalleds     r   crashing_callback-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     s=    CF
 llnGC*s#FCIM6r   c                      SSK Jn   U " 5         S[        SSSS94S[        SSSS94/n[        R
                  " U5      nUR                  5         UR                  5       nU[        SSSS9[        SSSS9/:X  d   eg )	Nr   )_create_qAppzDatetime fieldr   rs      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    ;N 
8QB?@	tQB78D ##D)F
LLNZZ\Fd!,$aR(   r   c            
         / n S Vs/ s H  nU/SUS.4PM     sn GH0  u  p#S nU Vs/ s H+  n[         R                  R                  U5      (       a  M)  UPM-     nn[        R                  S:X  a  [
        R                  " 5       (       d  SnOWU(       a!  SR                  SR                  U5      5      nO/US   S	:X  a&  [        R                  R                  S
5      (       a  Sn/ nU(       a2  UR                  [        R                  R                  SU SU 3S95        U R                  [        R                   " X7[#        U5      S95        GM3     U $ s  snf s  snf )N)PyQt6PySide6PyQt5PySide2qtagg)
MPLBACKENDQT_API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)	importlibutil	find_specrc   rd   r   display_is_validformatjoinosenvironr   appendpytestmarkskipparamr   )envsqt_apidepsenvr   depmissingr;   s           r   _get_testable_qt_backendsr  1  s-   D CB Xg@AB	 "&L$3inn.F.Fs.K3$LLLG#%6688>F,33DIIg4FGF(*rzz~~j/I/I4FLL))"3%y9 * ; <FLLc#h?@#$ K%
 Ms   E(EEc                    ^ SSK Jn   [        R                  " 5         S mU4S jn[        R
                  R                  SU5        [        R                  " [        R                  5      nS n[        R                  " [        R                  U5         [        R                  R                  R                  R                  5         TU:w  d   e[        R                  " [        R                  5      U:X  d   e[        R                  [        R                   4 H  n[        R
                  R                  SU5        [        R                  " [        R                  U5        U R                  5         TU:X  d   e[        R                  " [        R                  5      U:X  a  M   e   [        R                  " [        R                  U5        g ! [        R                  " [        R                  U5        f = f)Nr   )_BackendQT5c                     > [         R                  " [         R                  5      m [        R                  R                  5         g r   )signal	getsignalSIGINTr	   r   exit)event_loop_handlers   r   fire_signal_and_quit6test_fig_sigint_override.<locals>.fire_signal_and_quitR  s.     $--fmm< 	$$&r   c                     g r   rF   )signumframes     r   custom_handler0test_fig_sigint_override.<locals>.custom_handlera  s    r   )matplotlib.backends.backend_qt5r  r   r   r	   QTimer
singleShotr  r  r  r   backends
backend_qt
_BackendQTmainloopSIG_DFLSIG_IGN)r  r  original_handlerr!  r  s       @r   test_fig_sigint_overrider-  H  sW   ;JJL ' MMQ 45 ''6 MM&--07 	&&11::< "^333 ..@@@  &~~v~~>NMM$$Q(<=MM&--8  "%777##FMM2nDDD ? 	fmm%56fmm%56s   D
G
  G
 
'G1c                  *    SSK Jn   U " SSSSS.5        g )Nr   ipython_in_subprocessqtr   r   r:   ))      )r2     )   r   )matplotlib.testingr0  r/  s    r   test_ipythonr7    s    8$'GX VWr   )+r   r   r  r  rc   r   r   unittestr   r	  r   r   r   matplotlib._pylab_helpersr   r   rb   r	   r
   r   matplotlib.backends.qt_editorr   ImportErrorr
  r  
pytestmark_test_timeoutr9   r   parametrizer  rq   r   r   r   r   r   r   r   r   r  r-  r7  rF   r   r   <module>r?     sh     	  
 #    $ ) (;4379
  W$7! 8!" 	?#S)	"c	$%23	

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