
    
3j)                        S SK r 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  S SKrS SK	J
r
  S SKJr  SrSS jr\" SS9S	 5       r\" S
S9S 5       r\R"                  R%                  \R&                  " 5       S:g  SS9\R"                  R)                  SS9\" S
S9S 5       5       5       r\R"                  R)                  SS9\" S S9S 5       5       r\" SS9S 5       r\" SS9S 5       r\" S
S9S 5       r\" SS9S 5       r\" S
S9S 5       rg)    N)patch)_c_internal_utils)subprocess_run_helper<   c                   ^ ^ Tc  [         R                  " [        T 5      $ S[        R                  ;   a  T$ [
        R                  R                  [        R                  R                  S5      (       + SS9[
        R                  R                  [        R                  S:H  =(       a    [        R                  " 5       (       + SS9[
        R                  R                  S[        R                  ;   =(       d    S	[        R                  ;   =(       a0    [        R                  S
:H  =(       a    [        R                   SS S:  SS9[         R"                  " T5      UU 4S j5       5       5       5       nU$ )z
A decorator to run *func* in a subprocess and assert that it prints
"success" *success_count* times and nothing on stderr.

TkAgg tests seem to have interactions between tests, so isolate each test
in a subprocess. See GH#18261
NMPL_TEST_ESCAPE_HATCHtkinterzmissing tkinterreasonlinuxz$DISPLAY is unsetTF_BUILDGITHUB_ACTIONdarwin   )      z%Tk version mismatch on Azure macOS CIc            	      F  >^ [         R                  " S5         [        T[        [	        SSS9S9n / SQnU R
                  R                  5        V^s/ s H!  m[        U4S jU 5       5      (       d  M  TPM#     sn(       a   eU R                  R                  S5      T:X  d   eg s  snf ! [        R                   a    [         R                  " S	5         g [        R                   a6  n[         R                  " S
[        UR
                  5      -   5         S nAg S nAff = f)Nr	   TkAgg1)
MPLBACKENDr   )timeout	extra_env)OpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc              3   ,   >#    U  H	  oT;  v   M     g 7fN ).0msglines     Z/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>F   s     H-3$-s   successzSubprocess timed outz,Subprocess failed to test intended behavior
)pytestimportorskipr   _test_timeoutdictstderr
splitlinesallstdoutcount
subprocessTimeoutExpiredfailCalledProcessErrorstr)procignored_linesr   efuncsuccess_counts     ` r    	test_func$_isolated_tk_test.<locals>.test_func"   s    " 	I&	A(mt&c8CDDFM)-)?)?)A J)AH-HH )A J J J;;$$Y/=@@@J (( 	0KK./,, 	)KKGahh-( ) )	)s)   B+ B&4B&+*D D *,DD )	functoolspartial_isolated_tk_testosenvironr$   markskipif	importlibutil	find_specsysplatformr   xdisplay_is_validxfailversion_infowraps)r6   r5   r7   s   `` r    r;   r;      s1    |  !2MBB"**,[[NN$$Y//    [[M(9(K(K(M$M"   [[	rzz	!	B_

%B 	D 	D%(%5%5bq%9G%C6  
 __TA 		A2        )r6   c            	         SS K Jn   SS KnSS KnSSKJnJn  U R                  5       u  pVUR                  R                  nUR                  SUR                  S9nSn	U	 HE  n
 UR                  UR                  R                  5       [        U5      UUR                   SU
5        MG     U R'                  U5        UR                  XxS5        g ! ["         a    [%        S5         M  f = f)Nr   )_backend_tk_tkagg)   rN   rN   )dtype))r   r   r   )r   r   r   r   )   rJ   r   r   )r   r   rP   r   )r   r   r   r   )r   r   rQ   rJ   )r   rQ   r   r   r#   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggmatplotlib.backendsrL   rM   subplotscanvas_tkphotoonesuint8blittk
interpaddrr1   TK_PHOTO_COMPOSITE_OVERLAY
ValueErrorprintclose)pltnp
matplotlibrL   rM   figax
photoimagedata	bad_boxesbad_boxs              r    	test_blitrl   L   s    #,7llnGC$$J779BHH7-DI 	KK((*C
OT11<J  IIcNZ|4  	)	s   !AC

C#"C#rQ   c                     ^^^^ SS K n SS KJm  / mUUU4S jnUU4S jmU R                  5       mTR	                  SU5        TR                  5         T(       a  [        S5        g g )Nr   c                     > TR                  5         TR                  SS/SS/5        TR                  5         TR                  ST 5        g )NrQ   r   r      r   )figureplotrb   after)legitimate_quitrc   roots   r    do_plot;test_figuremanager_preserves_host_mainloop.<locals>.do_plotp   s9    

!Q!Q 		

1o&rI   c                  H   > T R                  5         TR                  S5        g NT)quitappend)rt   r#   s   r    rs   Ctest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitv   s    		trI   r#   )r	   rR   rS   Tkrr   mainloopra   )r	   ru   rs   rc   rt   r#   s     @@@@r    *test_figuremanager_preserves_host_mainloopr~   j   sL    #G' ::<DJJq'MMOi rI   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r
   r   )rerunsc                  X  ^^^^ SS K n SS KmSS KJm  SS KnSSKJm  U R                  5       nTR                  / SQ/ SQ5        UUUU4S jnUR                  5       mUR                  USS9nUR                  5         TR                  SS9  TR                  5         UR                  5         g )	Nr   )"_get_running_interactive_frameworkrQ   r   r   )rQ   r   ro   c                     > ST " 5       :X  d  TR                  S5        ST " 5       :X  d  M  TR                  5         TR                  5       (       a  [        S5        g g )Nr]   g{Gz?r#   )sleeprb   waitra   )r   rc   show_finished_eventtimes   r    target6test_figuremanager_cleans_own_mainloop.<locals>.target   sM    <>>JJsO <>>		##%%) &rI   T)r   daemonblock)r	   r   rR   rS   	threadingmatplotlib.cbookr   r|   rq   EventThreadstartshowsetjoin)	r	   r   rt   r   threadr   rc   r   r   s	        @@@@r    &test_figuremanager_cleans_own_mainloopr      s     #C::<DHHY	"  $//+VD9F
LLNHH4H
KKMrI   c                     SS K n U R                  ?U R                  ?SS KJn  UR                  5       nUR                  SS9  UR                  5         UR                  R                  R                  5       nUc   eX2R                  R                  R                  5       :X  d   eUR                  R                  5       R                  SUR                  U5        UR                  SS9  g )Nr   Fr   d   T)r	   Miscupdateupdate_idletasksrR   rS   rp   r   drawrX   toolbarconfigure_subplotsget_tk_widgetrr   rb   )r	   rc   rf   tools       r    test_never_updater      s     %#
**,CHH5HHHJ::002D::%%88::::JJ$$S#))S9 HH4HrI   r   c                     ^ SS K Jn   SSKJm   " U4S jST5      nU R	                  5       n[        S5        U" UR                  UR                  R                  R                  5        [        S5        g )Nr   )NavigationToolbar2Tkc                   x   > \ rS rSr YR                   V Vs/ s H  nUS   S;   d  M  UPM     snn rSrgs  snn f ))test_missing_back_button.<locals>.Toolbar   r   )HomePanZoomr   N)__name__
__module____qualname____firstlineno__	toolitems__static_attributes__)r   tr   s   00r    Toolbarr      s8     4 > > 6 >1qT44  > 6	 6s   66r   r#   )	rR   rS   rU   r   rp   ra   rX   managerwindow)rc   r   rf   r   s      @r    test_missing_back_buttonr      sQ    #F6& 6
 **,C	)CJJ

**112	)rI   c                     SS K Jn   SSKJn  U R	                  5       nSnUR                  USS9   UR                  R                  R                  R                  5       n[        R                  " S5        US:X  d   e[        S5        S S S 5        UR                  USS9   UR                  R                  R                  R                  5       nUb   e[        S5        S S S 5        g ! , (       d  f       Nf= f! , (       d  f       g = f)Nr   )mockz$tkinter.filedialog.asksaveasfilenamez
foobar.pngreturn_valuer#    )rR   rS   unittestr   rp   r   rX   r   r   save_figurer<   removera   )rc   r   rf   propfnames        r    test_save_figure_returnr      s    #
**,C1D	D|	4

""**668
		,$$$i	 
5
 
Dr	*

""**668}}i 
+	* 
5	4
 
+	*s   AC'?C8'
C58
Dc                  >  ^^^^ SS K n SS KJm  / mUUUU4S jnU R                  5       mTR	                  5       mTR                  / SQ5        TR                  STR                  5        TR                  SU5        TR                  5         T(       a  [        S5        g g )Nr   c                    > TR                   R                  5       n U R                  5       (       d  U R                  5         U R	                  5       U :X  a  TR                  S5        TR                  5         TR                  5         g rx   )rX   r   winfo_viewablewait_visibilityfocus_lastforrz   rb   destroy)tkcanvasrf   rc   rt   r#   s    r    check_focus&test_canvas_focus.<locals>.check_focus   sa    ::++-&&(($$& !!#x/NN4 		rI   r   r   r#   )
r	   rR   rS   r|   rp   rq   rr   r   r}   ra   )r]   r   rf   rc   rt   r#   s     @@@@r    test_canvas_focusr      su    #G
 
 557D
**,CHHYJJq#((JJsK MMOi rI   c                     ^^^^ SS K n SSKJmJm  SSKJm  SSKJm  U R                  5       nUUUU4S jnU" U5        [        S5        UR                  SSS	S
9  U" U5        [        S5        g )Nr   )FigureCanvasTkAggr   )key_press_handlerFigurec                 p  > T" 5       nUR                  5       nUR                  / SQ5        T" XS9nUR                  5         UR                  ST5        UR	                  5       R                  SSS9  T" X0SS9nUR                  SS	S9  UR	                  5       R                  5         UR                  5         g )
Nr   masterkey_press_eventTboth)expandfillF)pack_toolbarx)add_subplotrq   r   mpl_connectr   packforget)	r   rf   rg   rX   r   r   r   r   r   s	        r    test_figure#test_embedding.<locals>.test_figure  s    h__
	"36,.?@##4f#=&vEJDs+%%'rI   r#   zsky bluezmidnight bluewhite)
backgroundselectColor
foreground)r	   rU   r   r   matplotlib.backend_basesr   matplotlib.figurer   r|   ra   tk_setPalette)r]   rt   r   r   r   r   r   s      @@@@r    test_embeddingr      sd    1:(557D   	)
 	*/")  +	)rI   c                     SSK n SSKJn  SSKJn  U R                  5       nUR                  S5        UR                  5         U" SS9nUR                  S5        U" XCS	9nUR                  5       R                  U R                  S
S9  UR                  5         UR                  5         UR                  5       R                  5       nUR                  5       R                  5       nUS:  a  US:  d   e[        R                   " ["        SS5         [        R                   " UR$                  SSS9   UR'                  5         SSS5        SSS5        UR)                  5       n[+        US   UR,                  -  5      n	[+        US   UR,                  -  5      n
[/        X-
  5      S::  d   SU	 SU 35       e[/        X-
  5      S::  d   SU
 SU 35       e[1        S5        UR3                  5         g! , (       d  f       N= f! , (       d  f       N= f)z
Test that _update_device_pixel_ratio recalculates figure.size_inches
using the actual widget dimensions, so the render size matches the
visible canvas area even when constrained by a layout manager.
See issue #31126.
r   N)r   r   400x300r   )dpio   r   T)r   r   rD   r   winfo_fpixelsg      h@r   rQ   r   zrender width z != actual width zrender height z != actual height r#   )r	   rU   r   r   r   r|   geometryr   r   r   r   BOTHr   winfo_widthwinfo_heightr   objectrC   	_tkcanvas_update_device_pixel_ratioget_size_inchesroundr   absra   r   )r]   r   r   rt   rf   rX   actual_wactual_hsizerender_wrender_hs              r    test_dpi_change_triggers_resizer     s    C(557DMM)
S/COOCs0F
RWWT:
KKM##%113H##%224Ha<HqL(( 
c:w	/	f&&#(
*))+
* 
0  DT!Wsww&'HT!Wsww&'Hx"#q( >
z!28*=>(x"#q( @

"4XJ?@( 
)LLN
* 
* 
0	/s$   !G>.G-?G>-
G;	7G>>
Hr   )r9   r@   r<   rD   r-   rC   unittest.mockr   r$   re   r   matplotlib.testingr   r&   r;   rl   r~   r>   r?   python_implementationflakyr   r   r   r   r   r   r   r   rI   r    <module>r      s|     	   
   ( 4 7t #5 $5: # $. H224	AO  P !# $ P
2 !# $ 0 # $ # $  # $8 #" $"J #- $-rI   