
    P/Ph"                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 dZddZ ed          d             Z ed	          d
             Zej                             ej                    dk    d          ej                            d           ed	          d                                     Zej                            d           ed           d                         Z ed          d             Z ed          d             Z ed	          d             Z ed          d             ZdS )    N)_c_internal_utils)subprocess_run_helper<   c                     t          j        t                     S dt          j        v rS t
          j                            t          j	        
                    d           d          t
          j                            t          j        dk    ot          j                     d          t
          j                            dt          j        v sd	t          j        v o't          j        d
k    ot          j        dd         dk     d          t          j                   fd                                                }|S )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                     t          j        d           	 t          t          t	          dd                    } g dfd| j                                        D             rJ | j                            d          k    sJ d S # t          j
        $ r t          j        d	           Y d S t          j        $ r4}t          j        d
t          |j                  z              Y d }~d S d }~ww xY w)Nr   TkAgg1)
MPLBACKENDr   )timeout	extra_env)OpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc                 L    g | ]t          fd D                        S )c              3       K   | ]}|vV  	d S N ).0msglines     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>zB_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>.<genexpr>E   s'      HH3s$HHHHHH    )all)r   r   ignored_liness    @r    
<listcomp>z8_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>D   sR     J J JHHHH-HHHHHJ J J Jr"   successzSubprocess timed outz,Subprocess failed to test intended behavior
)pytestimportorskipr   _test_timeoutdictstderr
splitlinesstdoutcount
subprocessTimeoutExpiredfailCalledProcessErrorstr)procer$   funcsuccess_counts     @r    	test_funcz$_isolated_tk_test.<locals>.test_func!   sq   " 	I&&&	A(mt&c8C 8C 8CD D DDF F FMJ J J J)?)?)A)A J J J J J J;$$Y//=@@@@@@ ( 	0 	0 	0K.//////, 	) 	) 	)KGah--( ) ) ) ) ) ) ) ) )	)s   &B #C31C3?)C..C3)	functoolspartial_isolated_tk_testosenvironr'   markskipif	importlibutil	find_specsysplatformr   xdisplay_is_validxfailversion_infowraps)r7   r6   r8   s   `` r    r;   r;      s_    | !2MBBB"*,,[N$$Y///     [M(9(K(M(M$M"    [	rz	!	B_
%B 	D 	D%(%5bqb%9G%C6   
 _TA A A A A  	 	 A2 r"      )r7   c            	         dd l m}  dd l}dd l}ddlm}m} |                                 \  }}|j        j	        }|
                    d|j                  }d}	|	D ]e}
	 |                    |j                                        t          |          ||j        d|
           G# t"          $ r t%          d           Y bw xY w|                     |           |                    ||d           d S )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
interpaddrr3   TK_PHOTO_COMPOSITE_OVERLAY
ValueErrorprintclose)pltnp
matplotlibrK   rL   figax
photoimagedata	bad_boxesbad_boxs              r    	test_blitrk   K   s7   ######,,,,77777777llnnGC$J779BH7--DI   	KK((**C
OOT1<J J J J  	 	 	)	 IIcNNNZ|44444s   AB!!B=<B=rP   c                      dd l } dd lm g fd}fd|                                                     d|                                            rt          d           d S d S )Nr   c                                                                            ddgddg                                                                d            d S )NrP   r   r      r   )figureplotra   after)legitimate_quitrb   roots   r    do_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_ploto   sS    

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

1o&&&&&r"   c                  Z                                                           d           d S NT)quitappend)rs   r&   s   r    rr   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitu   s(    		tr"   r&   )r   rQ   rR   Tkrq   mainloopr`   )r   rt   rr   rb   rs   r&   s     @@@@r    *test_figuremanager_preserves_host_mainloopr{   i   s    NNN######G' ' ' ' ' ' '      ::<<DJJq'MMOOO i r"   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r	   r   )rerunsc                     dd l } dd ldd lm dd l}ddlm |                                 }                    g dg d           fd}|	                                |
                    |d          }|                                                     d                                            |                                 d S )	Nr   )"_get_running_interactive_frameworkrP   r   r   )rP   r   rn   c                      d              k    s#                     d           d              k    #                                                                 rt          d           d S d S )Nr\   g{Gz?r&   )sleepra   waitr`   )r   rb   show_finished_eventtimes   r    targetz6test_figuremanager_cleans_own_mainloop.<locals>.target   s}    <<>>>>JJsOOO <<>>>>		##%% 	)	 	r"   T)r   daemonblock)r   r   rQ   rR   	threadingmatplotlib.cbookr   ry   rp   EventThreadstartshowsetjoin)	r   r   rs   r   threadr   rb   r   r   s	        @@@@r    &test_figuremanager_cleans_own_mainloopr      s	    NNNKKK######CCCCCC::<<DHHYYY			"""        $//++VD99F
LLNNNHH4H
KKMMMMMr"   c                     dd l } | j        `| j        `dd lm} |                                }|                    d           |                                 |j	        j
                                         |j	                                                            d|j        |           |                    d           d S )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     NNN%######
**,,CHH5HHHJJJJ))+++J$$S#)S999 HH4Hr"   r   c                      dd l m}  ddlm  G fdd          }|                                 }t          d            ||j        |j        j        j                   t          d           d S )Nr   NavigationToolbar2Tkc                   2    e Zd Zd  j        D             ZdS ))test_missing_back_button.<locals>.Toolbarc                 &    g | ]}|d          dv |S )r   )HomePanZoomr   )r   ts     r    r%   z4test_missing_back_button.<locals>.Toolbar.<listcomp>   s1     6 6 61qT444 444r"   N)__name__
__module____qualname__	toolitemsr   s   r    Toolbarr      s0        6 6 4 > 6 6 6			r"   r   r&   )	rQ   rR   rT   r   ro   r`   rW   managerwindow)rb   r   re   r   s      @r    test_missing_back_buttonr      s    ######FFFFFF6 6 6 6 6 6 6& 6 6 6
 **,,C	)GCJ
*1222	)r"   c                     dd l m}  ddlm} |                                 }d}|                    |d          5  |j        j        j        	                                }t          j        d           |dk    sJ t          d           d d d            n# 1 swxY w Y   |                    |d          5  |j        j        j        	                                }|J t          d           d d d            d S # 1 swxY w Y   d S )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	4  
"*6688
	,$$$$i	              
 
Dr	*	*  
"*6688}}}i                 s$   ABBB77C;;C?C?c                  d   dd l } dd lm g fd}|                                                                                     g d                               dj                                       d|                                            rt          d           d S d S )Nr   c                  4   j                                         } |                                 s|                                  |                                 | k    r                    d                                                                             d S rv   )rW   r   winfo_viewablewait_visibilityfocus_lastforrx   ra   destroy)tkcanvasre   rb   rs   r&   s    r    check_focusz&test_canvas_focus.<locals>.check_focus   s    :++--&&(( 	'$$&&& !!##x//NN4   		r"   r   r   r&   )
r   rQ   rR   ry   ro   rp   rq   r   rz   r`   )r\   r   re   rb   rs   r&   s     @@@@r    test_canvas_focusr      s    ######G
 
 
 
 
 
 
 
 5577D
**,,CHHYYYJJq#(JJsK   MMOOO i r"   c                     dd l } ddlmm ddlm ddlm |                                 }fd} ||           t          d           |
                    ddd	
            ||           t          d           d S )Nr   )FigureCanvasTkAggr   )key_press_handler)Figurec                                 }|                                 }|                    g d            ||           }|                                 |                    d           |                                                    dd            || d          }|                    dd	           |                                                                 |                                 d S )
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_figurez#test_embedding.<locals>.test_figure   s    fhh__
			""3v666,.?@@@##4f#===&&vvEJJJDs+++%%'''r"   r&   zsky bluezmidnight bluewhite)
backgroundselectColor
foreground)r   rT   r   r   matplotlib.backend_basesr   matplotlib.figurer   ry   r`   tk_setPalette)r\   rs   r   r   r   r   r   s      @@@@r    test_embeddingr      s    1 1 1 1 1 1 1 1::::::((((((5577D         K	)
 	*/")  + + +K	)r"   r   )r9   r@   r<   rD   r/   rC   r'   rd   r   matplotlib.testingr   r)   r;   rk   r{   r>   r?   python_implementationflakyr   r   r   r   r   r   r   r"   r    <module>r      sf           				      



  ( ( ( ( ( ( 4 4 4 4 4 4 7 7 7 7t ###5 5 $#5: ###  $#. 2H244	AO  P P !###  $# P P
2 !###  $# , ###  $# ###  $#  ###  $#8 ###" " $#" " "r"   