
    h"                        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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g)    N)_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     R/var/www/html/env/lib/python3.13/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>E   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)r5   r4   r6   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        )r5   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)   rM   rM   )dtype))r   r   r   )r   r   r   r   )   rI   r   r   )r   r   rO   r   )r   r   r   r   )r   r   rP   rI   )r   rP   r   r   r"   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggmatplotlib.backendsrK   rL   subplotscanvas_tkphotoonesuint8blittk
interpaddrr0   TK_PHOTO_COMPOSITE_OVERLAY
ValueErrorprintclose)pltnp
matplotlibrK   rL   figax
photoimagedata	bad_boxesbad_boxs              r   	test_blitrk   K   s    #,7llnGC$$J779BHH7-DI 	KK((*C
OT11<J  IIcNZ|4  	)	s   !AC

C#"C#rP   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 )NrP   r   r      r   )figureplotra   after)legitimate_quitrb   roots   r   do_plot;test_figuremanager_preserves_host_mainloop.<locals>.do_ploto   s9    

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

1o&rH   c                  H   > T R                  5         TR                  S5        g NT)quitappend)rs   r"   s   r   rr   Ctest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitu   s    		trH   r"   )r   rQ   rR   Tkrq   mainloopr`   )r   rt   rr   rb   rs   r"   s     @@@@r   *test_figuremanager_preserves_host_mainloopr}   i   sL    #G' ::<DJJq'MMOi rH   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rP   r   r   )rP   r   rn   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"   )sleepra   waitr`   )r   rb   show_finished_eventtimes   r   target6test_figuremanager_cleans_own_mainloop.<locals>.target   sM    <>>JJsO <>>		##%%) &rH   T)r   daemonblock)r   r   rQ   rR   	threadingmatplotlib.cbookr   r{   rp   EventThreadstartshowsetjoin)	r   r   rs   r   threadr   rb   r   r   s	        @@@@r   &test_figuremanager_cleans_own_mainloopr      s     #C::<DHHY	"  $//+VD9F
LLNHH4H
KKMrH   c                  v   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         UR                  R                  5       R                  SUR                  U5        UR                  SS9  g )Nr   Fr   d   T)r   Miscupdateupdate_idletasksrQ   rR   ro   r   drawrW   toolbarconfigure_subplotsget_tk_widgetrq   ra   )r   rb   re   s      r   test_never_updater      s     %#
**,CHH5HHHJJJ))+JJ$$S#))S9 HH4HrH   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"   )	rQ   rR   rT   r   ro   r`   rW   managerwindow)rb   r   re   r   s      @r   test_missing_back_buttonr      sQ    #F6& 6
 **,C	)CJJ

**112	)rH   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"    )rQ   rR   unittestr   ro   patchrW   r   r   save_figurer;   remover`   )rb   r   re   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 rw   )rW   r   winfo_viewablewait_visibilityfocus_lastforry   ra   destroy)tkcanvasre   rb   rs   r"   s    r   check_focus&test_canvas_focus.<locals>.check_focus   sa    ::++-&&(($$& !!#x/NN4 		rH   r   r   r"   )
r   rQ   rR   r{   ro   rp   rq   r   r|   r`   )r\   r   re   rb   rs   r"   s     @@@@r   test_canvas_focusr      su    #G
 
 557D
**,CHHYJJq#((JJsK MMOi rH   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_subplotrp   r   mpl_connectr   packforget)	r   re   rf   rW   r   r   r   r   r   s	        r   test_figure#test_embedding.<locals>.test_figure   s    h__
	"36,.?@##4f#=&vEJDs+%%'rH   r"   zsky bluezmidnight bluewhite)
backgroundselectColor
foreground)r   rT   r   r   matplotlib.backend_basesr   matplotlib.figurer   r{   r`   tk_setPalette)r\   rs   r   r   r   r   r   s      @@@@r   test_embeddingr      sd    1:(557D   	)
 	*/")  +	)rH   r   )r8   r?   r;   rC   r,   rB   r#   rd   r   matplotlib.testingr   r%   r:   rk   r}   r=   r>   python_implementationflakyr   r   r   r   r   r   r   rH   r   <module>r      s_     	   
  ( 4 7t #5 $5: # $. H224	AO  P !# $ P
2 !# $ , # $ # $  # $8 #" $"rH   