+
     ]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        R # N)	copyr   ZfigspltfigurecanvasmanagerwindowZclose)Z	init_figsfig     r   test_fig_closer   "   sA     		#((#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                sd  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       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%r   c                s  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f   K  V! V4       K  	  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                 sr  < 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        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_events)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""$r   N)i   r8   ))Nh      )   rA   rB   rC   )r8   i   i  i  )g      ?i   i  rA   )r   patchr:   r   r   r   Zshowr   r<   r=   size)r   propr   r@   rF   Zoptionsr>   r7   widthheightr?   r5   s   f         @@r   test_device_pixel_ratio_changerJ      s     MD	D		QjjS1JJ		9. 	  ~~
 *1%E &u- *1S 
			s   BCCC+	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   rE   r   r   toolbarZconfigure_subplotsr   axr   r   test_subplottoolrR      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crK   c                 r$   r   r%   rL   r'   r   r0   Z$test_figureoptions.<locals>.<lambda>   rM   r   N)r   rN   plotimshowZscatterZranger   rE   r   r   rO   edit_parametersrP   r   r   test_figureoptionsrW      s    llnGCGGQFOIIseJJuQxqU1XJ.	9;K	L	L

""224 
M	L	L	Ls   /CC	c                 s0   \         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RRR4       \        P                  ! VRR7      ;_uu_ 4        VP                  P                  P                  P                  4       pRRR4       R#   + '       g   i     Li; i  + '       g   i     R# ; i)rS   z
foobar.pngzCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileNameN)r:   )NN)
r   rN   rU   r   rE   strr   r   rO   Zsave_figure)Ztmp_pathr   rQ   ZexpectedrG   Zfnames   &     r   test_save_figure_returnrY      s    llnGCIIse,&HPD	DHt'<	=	=

""**668 
> 
D|	4	4

""**668 
5	4	 
>	= 
5	4	4s   !/C18/D1D	D	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dayrK   c                 r$   r   r%   rL   r'   r   r0   Z7test_figureoptions_with_datetime_axes.<locals>.<lambda>   rM   r   N)
r   rN   r   rT   r   rE   r   r   rO   rV   )r   rQ   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                  s2   \         P                  ! 4       w  rV P                  P                  4        V P                  P                  P
                  p^^rCV P                  W44       VP                  4       pVP                  4       pV P                  W44       R# )rD   N)	r   rN   r   r<   r   r   Zset_size_inchesrH   rI   )r   rQ   r   ZwZhZ	old_widthZ
old_heights          r   test_double_resizer]      so     llnGCJJOOZZ&&Faq I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        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_qtaggr^   r   rN   Zstale_callbackr_   )r^   ra   r   rQ   r   r`   s        @r   test_canvas_reinitrb     s6    CF
 llnGC*s#FCIr   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R# )r    )_create_qAppzDatetime fieldrZ   r[   z
Date fieldN)Zmatplotlib.backends.backend_qtrc   r   r   r	   Z
FormWidgetZsetupget)rc   ZformZwidgetZvaluess       r   2test_form_widget_get_with_datetime_and_date_fieldsre     s[    ;N 
8QB?@	tQB78D ##D)F
LLNZZ\Fr   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)rf   ZPySide6ZPyQt5ZPySide2)	importlibZutilZ	find_specr3   r4   r   Zdisplay_is_validZformatZjoinosZenvironrd   ZappendpytestmarkskipparamrX   )ZenvsZqt_apiZdepsZenvrh   ZdepZmissingr    s           r   _get_testable_qt_backendsro   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        \        P                  \        P                  3 FT  pS P                  P                  ^ V4       \        P                  ! \        P                  V4       VP                  4        KV  	  \        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_qt5rp   r   r   ZQTimerZ
singleShotrq   rr   rs   
matplotlibZbackendsZ
backend_qtZ
_BackendQTZmainloopZSIG_DFLZSIG_IGN)r   rp   ru   Zoriginal_handlerrv   rt   s   f    @r   test_fig_sigint_overriderx   H  s    ;JJL ( NNa!56 ''6 MM&--07 	&&11::<  &~~v~~>NNN%%a)=>MM&--8  "	 ? 	fmm%56fmm%56s   B*E! !'Fc            	      s0    ^ RI Hp  V ! RRRRRR	R/4       R# )
r    ipython_in_subprocessZqtrg   r   r   N)   i   )r{   i   )i   r    )Zmatplotlib.testingrz   ry   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   ri   rj   rq   r3   r   r   Zunittestr   rk   rw   r   r   Zmatplotlib._pylab_helpersr   r   r   r   r   Zmatplotlib.backends.qt_editorr	   ZImportErrorrl   rm   Z
pytestmarkZ_test_timeoutZfixturer   r   r   Zparametrizern   r6   rJ   rR   rW   rY   r\   r]   rb   re   ro   rx   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%