+
     ]i2  c                   s   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	t	^ RI
t
^ RI
Ht ^ RIHt ^ RI
Ht  ^ RIHt ^ RIHt ^ R	IHt ^<t]	P4                  R 4       t]	P,                  P9                  RRR7      R 4       t]	P,                  P=                  RRR.R3R. R3RR.R3RR.R3R. R3RR.R3RR.R3R. R4OR3R . R3R!. R"3R!R.R#3.. R5OR$7      ]	P,                  P=                  R%]	P>                  ! R&]	P,                  P9                  R&RR7      R'7      ]	P>                  ! R]	P,                  P9                  RRR7      R'7      .4      R( 4       4       t ]	P,                  P9                  RRR7      R) 4       t!]	P,                  P9                  RRR7      R* 4       t"]	P,                  P9                  RRR7      R+ 4       t#]	P,                  P9                  RRR7      R, 4       t$]	P,                  P9                  RRR7      R- 4       t%]	P,                  P9                  RRR7      R. 4       t&]	P,                  P9                  RRR7      R/ 4       t']	P,                  P9                  R&RR7      R0 4       t(R1 t)]	P,                  P9                  RRR7      R2 4       t*]	P,                  P9                  RRR7      R3 4       t+R#   ] d     ]	P,                  P/                  R
4      t ELi ; i)6    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui)	QtWidgets)_formlayoutzNo usable Qt bindingsc                 s    ^ RI Hp V# )r    )QtCore)matplotlib.backends.qt_compatr
   )Zrequestr
      & G/usr/lib64/python3.14/site-packages/matplotlib/tests/test_backend_qt.pyqt_corer      s
    4M    QtAggT)Zskip_on_importerrorc                  s   \         P                   ! \        P                  4      p \        P                  ! 4       pVP
                  P                  P                  P                  4        V \        P                  8X  g   Q hR # N)	copyr   ZfigspltfigurecanvasmanagerwindowZclose)Z	init_figsfig     r   test_fig_closer   "   sU     		#((#I **,C JJ##%    r   zqt_key, qt_mods, answerZKey_AZShiftModifierZAZaControlModifierzctrl+aZ
Key_Aacutet   Át   áZKey_ControlAltModifierzalt+controlZKey_Altzctrl+altu   ctrl+alt+meta+áZKey_PlayZKey_Backspace	backspacezctrl+backspace)ZidsbackendQt5Agg)marksc                sv  aa
aaa ^ RI HoHo
 \        P                  R8X  d;   Ve7   VP                  RR4      pVP                  RR4      pVP                  RR4      pRoS
P                  P                  P                  oV F*  pS\        S
P                  P                  V4      ,          oK,  	   ! V
VV3R lR	4      pVP                  \        P                  R
V3R l4       V3R lp\        P                  ! 4       P                  p	V	P!                  RV4       V	P#                  V! 4       4       SV8X  g   Q hR# )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.
)_to_intr
   ZdarwinNZctrlZcmdcontrolZmetac                   s8   <a  ] tR t^zt o R tVVV3R ltRtV tR# ) test_correct_key.<locals>._Eventc                    R # )F )self   &r   isAutoRepeatZ-test_correct_key.<locals>._Event.isAutoRepeat{   s    ur   c                sP   < S! \        SP                  P                  S4      4      # r   )getattrQtZKey)r&   r
   r!   qt_keys   &r   keyZ$test_correct_key.<locals>._Event.key|   s    ggfiimmV&DEEr   r%   N)Z__name__Z
__module__Z__qualname__Z__firstlineno__r(   r,   Z__static_attributes__Z__classdictcell__)Z__classdict__r
   r!   r+   s   @r   _Eventr#   z   s     ,EEr   r-   ZkeyboardModifiersc                 s   < S# r   r%   )r&   qt_mod   &r   <lambda>Z"test_correct_key.<locals>.<lambda>   s    Vr   c                 s    < V P                   oR # r   )r,   )Zeventresultr/   r   on_key_pressZ&test_correct_key.<locals>.on_key_press   s    r   Zkey_press_event)r   r!   r
   sysplatformZreplacer*   ZKeyboardModifierZ
NoModifierr)   Zsetattrr   ZQApplicationr   r   r   Zmpl_connectZkeyPressEvent)r   r   r+   Zqt_modsZanswerZmonkeypatchZmodr-   r2   	qt_canvasr
   r!   r.   r1   s   &&f&&&    @@@@r   test_correct_keyr6   4   s    v >
||xF$6.	51/FYY''22F'&))44c:: F F 	..0C+- 

##I+\:FH%Vr   c                sN  a a
a Rp\         P                  ! V4      ;_uu_ 4       o
^S
n        \        P                  ! R^xR7      pVP
                  oSP                  4        V
VV 3R lpSP                  P                  4        SP                  4        SP                  4        SP                  4       p. ROpV F  w  rgrVe	   V! V4       VP                  V8X  g   Q hSP                  P                  V8X  g   Q hSP                  P                  V	8X  g   Q hVP                  4       R8X  g   Q hVP                  4       ^8X  g   Q hSP                  4       R8X  g   Q hVP!                  4       R8H  P#                  4       '       d   K  Q h	  RRR4       R#   + '       g   i     R# ; i)	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)Zfigsizedpic                 s  < V Sn         SP                  4       P                  4       p\        ;QJ d9    . R  SP	                  4       P                  R^4      R,           4       F  NK  	  5M2! R  SP	                  4       P                  R^4      R,           4       4      pVR8  dK   SP                  P                  VSP                  SP                  P                  P                  4      4       M)VP                  4       P                  P                  ^`4       SP                  4        SP                  4        SP                   V 8X  g   Q hR# )c              3   s8   "   T F  p\        V4      x  K  	  R # 5ir   )Zint)Z.0Zxr   r   Z	<genexpr>ZQtest_device_pixel_ratio_change.<locals>.set_device_pixel_ratio.<locals>.<genexpr>   s      $F D1A Ds   Z.:N   NN)   r9   )return_valuer   ZwindowHandleZtupleZqVersionZsplitQCoreApplicationZ	sendEventZQEventZTypeZDevicePixelRatioChangeZscreenZlogicalDotsPerInchChangedZemitdrawflush_eventsZdevice_pixel_ratio)ratior   Zcurrent_versionpr5   r   s   &  r   set_device_pixel_ratioZ>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio   s
   "AN%%'446F#e $F ' 0 0 2 8 8a @ D$Fee $F ' 0 0 2 8 8a @ D$F FO&(((22NN7>>#6#6#M#MNP 99>>rBNN""$ //5888r   NX  )i   r8   ))Nh      )   rB   rC   rD   )r8      i  i  )g      ?i   i  rB   )rA   rF   )r   patchr:   r   r   r   Zshowr   r<   r=   sizer7   ZrendererwidthheightZget_width_heightZget_size_inchesZall)r   propr   r@   rH   Zoptionsr>   r7   rI   rJ   r?   r5   s   f         @@r   test_device_pixel_ratio_changerL      sa    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:::: *1S 
			s   EFFF$	c                  s
   \         P                  ! 4       w  r\        P                  ! R R 4      ;_uu_ 4        V P                  P
                  P                  P                  4        RRR4       R#   + '       g   i     R# ; i)#matplotlib.backends.qt_compat._execc                 r$   r   r%   Zobjr'   r   r0   Z"test_subplottool.<locals>.<lambda>       tr   N)r   subplotsr   rG   r   r   toolbarZconfigure_subplotsr   axr   r   test_subplottoolrT      sN    llnGC	9;K	L	L

""557 
M	L	L	Ls   /A11B	c                  s   \         P                  ! 4       w  rVP                  ^^.4       VP                  ^..4       VP	                  \        ^4      \        ^4      \        ^4      R7       \        P                  ! RR 4      ;_uu_ 4        V P                  P                  P                  P                  4        RRR4       R#   + '       g   i     R# ; i)   )ZcrM   c                 r$   r   r%   rN   r'   r   r0   Z$test_figureoptions.<locals>.<lambda>   rO   r   N)r   rP   plotimshowZscatterZranger   rG   r   r   rQ   edit_parametersrR   r   r   test_figureoptionsrY      s    llnGCGGQFOIIseJJuQxqU1XJ.	9;K	L	L

""224 
M	L	L	Ls   /CC	c                 s   \         P                  ! 4       w  rVP                  ^..4       V R,          pRp\        P                  ! V\        V4      R3R7      ;_uu_ 4        VP                  P                  P                  P                  4       pV\        V4      8X  g   Q hVP                  4       '       g   Q h RRR4       \        P                  ! VRR7      ;_uu_ 4        VP                  P                  P                  P                  4       pVe   Q h RRR4       R#   + '       g   i     Lp; i  + '       g   i     R# ; i)rU   z
foobar.pngzCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileNameN)r:   )NN)r   rP   rW   r   rG   strr   r   rQ   Zsave_figureZexists)Ztmp_pathr   rS   ZexpectedrK   Zfnames   &     r   test_save_figure_returnr[      s    llnGCIIse,&HPD	DHt'<	=	=

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

""**668}} 
5	4	 
>	= 
5	4	4s   !AD#8D##5D6#D3	6E	c                  sd   \         P                  ! 4       w  r\        R ^^R7      \        R ^^R7      .pVP                  W"4       \        P
                  ! RR 4      ;_uu_ 4        V P                  P                  P                  P                  4        RRR4       R#   + '       g   i     R# ; i)  ZyearZmonthZdayrM   c                 r$   r   r%   rN   r'   r   r0   Z7test_figureoptions_with_datetime_axes.<locals>.<lambda>   rO   r   N)
r   rP   r   rV   r   rG   r   r   rQ   rX   )r   rS   Zxydatas      r   %test_figureoptions_with_datetime_axesr^      s{    llnGCd!+d!+F GGF	9;K	L	L

""224 
M	L	L	Ls   %/BB/	c                  s   \         P                  ! 4       w  rV P                  P                  4        V P                  P                  P
                  p^^rCV P                  W44       V P                  P                  4       V\        P                  R,          ,          8X  g   Q hV P                  P                  4       V\        P                  R,          ,          8X  g   Q hVP                  4       pVP                  4       pV P                  W44       VP                  4       V8X  g   Q hVP                  4       V8X  g   Q hR# )rE   z
figure.dpiN)r   rP   r   r<   r   r   Zset_size_inchesrI   
matplotlibZrcParamsrJ   )r   rS   r   ZwZhZ	old_widthZ
old_heights          r   test_double_resizer`      s     llnGCJJOOZZ&&Faq::Z%8%8%F!FFFF::!j&9&9,&G"GGGGIJ<<>Y&&&==?j(((r   c                  s   a ^ RI Hp  RoV3R lp\        P                  ! 4       w  r#Wn        V ! V4      pRVn        S'       g   Q hR# )r    )FigureCanvasQTAggFc                 s@   < V P                   P                  4        R oR# )TN)r   Z	draw_idle)r   stalecalleds   &&r   crashing_callbackZ-test_canvas_reinit.<locals>.crashing_callback  s    

r   TN)Z!matplotlib.backends.backend_qtaggra   r   rP   Zstale_callbackrb   )ra   rd   r   rS   r   rc   s        @r   test_canvas_reinitre     s=    CF
 llnGC*s#FCIM6r   c                  s   ^ RI Hp  V ! 4        R\        R^^R7      3R\        R^^R7      3.p\        P
                  ! V4      pVP                  4        VP                  4       pV\        R^^R7      \        R^^R7      .8X  g   Q hR# )r    )_create_qAppzDatetime fieldr\   r]   z
Date fieldN)Zmatplotlib.backends.backend_qtrf   r   r   r	   Z
FormWidgetZsetupget)rf   ZformZwidgetZvaluess       r   2test_form_widget_get_with_datetime_and_date_fieldsrh     s    ;N 
8QB?@	tQB78D ##D)F
LLNZZ\Fd!,$aR(   r   c            
      s   . p R Uu. uF  pV.RRRV/3NK  	  up EF@  w  r#RpV Uu. uF,  p\         P                  P                  V4      '       d   K*  VNK.  	  pp\        P                  R8X  d   \
        P                  ! 4       '       g   RpM^V'       d"   RP                  RP                  V4      4      pM5VR,          R	8X  d(   \        P                  P                  R
4      '       d   Rp. pV'       d6   VP                  \        P                  P                  RV RV 2R7      4       V P                  \        P                   ! W7\#        V4      R7      4       EKC  	  V # u upi u upi )PyQt6Z
MPLBACKENDqtaggZQT_APINZlinuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedz, ZmacosxZTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because )reason)r    Zid)ri   ZPySide6ZPyQt5ZPySide2)	importlibZutilZ	find_specr3   r4   r   Zdisplay_is_validZformatZjoinosZenvironrg   ZappendpytestmarkskipparamrZ   )ZenvsZqt_apiZdepsZenvrk   ZdepZmissingr    s           r   _get_testable_qt_backendsrr   1  s3   D CB Xgx@AB	 "&L$3inn.F.Fs.K33$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  a a ^ RI Hp \        P                  ! 4        RoVV 3R lpS P                  P                  ^ V4       \        P                  ! \        P                  4      pR p\        P                  ! \        P                  V4        \        P                  P                  P                  P                  4        SV8w  g   Q h\        P                  ! \        P                  4      V8X  g   Q h\        P                  \        P                  3 F  pS P                  P                  ^ V4       \        P                  ! \        P                  V4       VP                  4        SV8X  g   Q h\        P                  ! \        P                  4      V8X  d   K  Q h	  \        P                  ! \        P                  V4       R#   \        P                  ! \        P                  T4       i ; i)r    )_BackendQT5Nc                  s   < \         P                  ! \         P                  4      o SP                  P	                  4        R # r   )signal	getsignalSIGINTr;   Zexit)event_loop_handlerr   s   r   fire_signal_and_quitZ6test_fig_sigint_override.<locals>.fire_signal_and_quitR  s.     $--fmm< 	  %%'r   c                 r$   r   r%   )ZsignumZframes   &&r   custom_handlerZ0test_fig_sigint_override.<locals>.custom_handlera  s    r   )Zmatplotlib.backends.backend_qt5rs   r   r   ZQTimerZ
singleShotrt   ru   rv   r_   ZbackendsZ
backend_qtZ
_BackendQTZmainloopZSIG_DFLZSIG_IGN)r   rs   rx   Zoriginal_handlerry   rw   s   f    @r   test_fig_sigint_overriderz   H  sW   ;JJL ( NNa!56 ''6 MM&--07 	&&11::< "^333 ..@@@  &~~v~~>NNN%%a)=>MM&--8  "%777##FMM2nDDD ? 	fmm%56fmm%56s   8G	 	CG	 G	 	'G0c            	      s0    ^ RI Hp  V ! RRRRRR	R/4       R# )
r    ipython_in_subprocessZqtrj   r   r   N)   i   )r}   i   )i   r    )Zmatplotlib.testingr|   r{   s    r   test_ipythonr~     s    8$'7GVX VWr   )r   r   ZMetaModifier)ZshiftZlowerr"   Zunicode_upperZunicode_lowerZalt_controlZcontrol_altZmodifier_orderZnon_unicode_keyr   Zbackspace_mod),r   rl   rm   rt   r3   r   r   Zunittestr   rn   r_   r   r   Zmatplotlib._pylab_helpersr   r   r   r   r   Zmatplotlib.backends.qt_editorr	   ZImportErrorro   rp   Z
pytestmarkZ_test_timeoutZfixturer   r   r   Zparametrizerq   r6   rL   rT   rY   r[   r^   r`   re   rh   rr   rz   r~   r%   r   r   <module>r      sy     	  
 #    $ ) (;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=;@ W$78 88 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[  ;!!"9:J;s   J? ?"K%$K%