
    \cg"                     0   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                  j!                   ej"                         dk7  d      ej                  j%                  d       ed	      d                      Zej                  j%                  d       ed       d               Z ed      d        Z ed      d        Z ed	      d        Z ed      d        Zy)    N)_c_internal_utils)subprocess_run_helper<   c                     t        j                  t               S dt        j                  v rS t
        j                  j                  t        j                  j                  d       d      t
        j                  j                  t        j                  dk(  xr t        j                          d      t
        j                  j                  dt        j                  v xs d	t        j                  v xr+ t        j                  d
k(  xr 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}| j
                  j                         D cg c]  t        fd|D              r c}rJ | j                  j                  d      k(  sJ y c c}w # t        j                  $ r t        j                  d	       Y y t        j                  $ r5}t        j                  d
t        |j
                        z          Y d }~y d }~ww xY w)Nr   TkAgg1)
MPLBACKENDr   )timeout	extra_env)OpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc              3   &   K   | ]  }|v 
 y wN ).0msglines     [/var/www/html/bid-api/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>z7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>E   s     H-3s$-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_funcz$_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(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)r4   r3   r5   s   `` r   r8   r8      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        )r4   c            	         dd l m}  dd l}dd l}ddlm}m} | j                         \  }}|j                  j                  }|j                  d|j                        }d}	|	D ]D  }
	 |j                  |j                  j                         t        |      ||j                   d|
       F | j'                  |       |j                  ||d       y # t"        $ r t%        d       Y w xY w)Nr   )_backend_tk_tkagg)   rK   rK   )dtype))r   r   r   )r   r   r   r   )   rG   r   r   )r   r   rM   r   )r   r   r   r   )r   r   rN   rG   )r   rN   r   r   r!   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggmatplotlib.backendsrI   rJ   subplotscanvas_tkphotoonesuint8blittk
interpaddrr/   TK_PHOTO_COMPOSITE_OVERLAY
ValueErrorprintclose)pltnp
matplotlibrI   rJ   figax
photoimagedata	bad_boxesbad_boxs              r   	test_blitri   K   s    #,7llnGC$$J779BHH7-DI 	KK((*C
OT11<J  IIcNZ|4  	)	s   %ACC$#C$rN   c                      dd l } dd lm g fd}fd| j                         j	                  d|       j                          rt        d       y y )Nr   c                      j                          j                  ddgddg       j                          j                  d        y )NrN   r   r      r   )figureplotr_   after)legitimate_quitr`   roots   r   do_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_ploto   s9    

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

1o&rF   c                  H     j                          j                  d       y NT)quitappend)rq   r!   s   r   rp   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitu   s    		trF   r!   )r   rO   rP   Tkro   mainloopr^   )r   rr   rp   r`   rq   r!   s     @@@@r   *test_figuremanager_preserves_host_mainloopry   i   sL    #G' ::<DJJq'MMOi rF   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r	   r   )rerunsc                  b   dd l } dd ldd lm dd l}ddlm | j                         }j                  g dg d       fd}|j                         |j                  |d      }|j                          j                  d       j                          |j                          y )	Nr   )"_get_running_interactive_frameworkrN   r   r   )rN   r   rl   c                      d         k(  sj                  d       d         k(  sj                          j                         rt        d       y y )NrZ   g{Gz?r!   )sleepr_   waitr^   )r}   r`   show_finished_eventtimes   r   targetz6test_figuremanager_cleans_own_mainloop.<locals>.target   sJ    <>>JJsO <>>		##%) &rF   T)r   daemonblock)r   r   rO   rP   	threadingmatplotlib.cbookr}   rw   rn   EventThreadstartshowsetjoin)	r   r   rq   r   threadr}   r`   r   r   s	        @@@@r   &test_figuremanager_cleans_own_mainloopr      s     #C::<DHHY	" $//+VD9F
LLNHH4H
KKMrF   c                     dd l } | j                  `| j                  `dd lm} |j                         }|j                  d       |j                          |j                  j                  j                          |j                  j                         j                  d|j                  |       |j                  d       y )Nr   Fr   d   T)r   Miscupdateupdate_idletasksrO   rP   rm   r   drawrU   toolbarconfigure_subplotsget_tk_widgetro   r_   )r   r`   rc   s      r   test_never_updater      s     %#
**,CHH5HHHJJJ))+JJ$$S#))S9 HH4HrF   r   c                      dd l m}  ddlm  G fdd      }| j	                         }t        d        ||j                  |j                  j                  j                         t        d       y )Nr   )NavigationToolbar2Tkc                   b    e Zd ZW j                  D  cg c]  }|d   dv r| c}} Zyc c}} w ))test_missing_back_button.<locals>.Toolbarr   )HomePanZoomN)__name__
__module____qualname__	toolitems)r   tr   s   00r   Toolbarr      s8     4 > > 6 >1qT44  > 6	 6s   +r   r!   )	rO   rP   rR   r   rm   r^   rU   managerwindow)r`   r   rc   r   s      @r   test_missing_back_buttonr      sQ    #F6& 6
 **,C	)CJJ

**112	)rF   c                     dd l m}  ddlm} | j	                         }d}|j                  |d      5  |j                  j                  j                  j                         }t        j                  d       |dk(  sJ t        d       d d d        |j                  |d      5  |j                  j                  j                  j                         }|J t        d       d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w)Nr   )mockz$tkinter.filedialog.asksaveasfilenamez
foobar.png)return_valuer!    )rO   rP   unittestr   rm   patchrU   r   r   save_figurer9   remover^   )r`   r   rc   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*#>C6*C36C?c                  2   dd l } dd lm g fd}| j                         j	                         j                  g d       j                  dj                         j                  d|       j                          rt        d       y y )Nr   c                     j                   j                         } | j                         s| j                          | j	                         | k(  rj                  d       j                          j                          y rt   )rU   r   winfo_viewablewait_visibilityfocus_lastforrv   r_   destroy)tkcanvasrc   r`   rq   r!   s    r   check_focusz&test_canvas_focus.<locals>.check_focus   s^    ::++-&&($$& !!#x/NN4 		rF   r~   r   r!   )
r   rO   rP   rw   rm   rn   ro   r   rx   r^   )rZ   r   rc   r`   rq   r!   s     @@@@r   test_canvas_focusr      sp    #G
 557D
**,CHHYJJq#((JJsK MMOi rF   c                      dd l } ddlmm ddlm ddlm | j                         }fd} ||       t        d       |j                  ddd	
        ||       t        d       y )Nr   )FigureCanvasTkAggr   )key_press_handler)Figurec                            }|j                         }|j                  g d        ||       }|j                          |j                  d       |j	                         j                  dd        || d      }|j                  dd	       |j	                         j                          |j                          y )
Nr~   )masterkey_press_eventTboth)expandfillF)pack_toolbarx)add_subplotrn   r   mpl_connectr   packforget)	r   rc   rd   rU   r   r   r   r   r   s	        r   test_figurez#test_embedding.<locals>.test_figure   s    h__
	"3v6,.?@##4f#=&vvEJDs+%%'rF   r!   zsky bluezmidnight bluewhite)
backgroundselectColor
foreground)r   rR   r   r   matplotlib.backend_basesr   matplotlib.figurer   rw   r^   tk_setPalette)rZ   rq   r   r   r   r   r   s      @@@@r   test_embeddingr      s_    1:(557D  	)
 	*/")  +	)rF   r   )r6   r=   r9   rA   r+   r@   r"   rb   r   matplotlib.testingr   r$   r8   ri   ry   r;   r<   python_implementationflakyr   r   r   r   r   r   r   rF   r   <module>r      sb     	   
  ( 4 7t #5 $5: # $. 2H224	AO  P !# $ P
2 !# $ , # $ # $  # $8 #" $"rF   