
    ^j)                     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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 ed
      d        Zy)    N)patch)_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     k/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>z7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>F   s     H3s$Hs   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H-HH  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)r5   r4   r6   s   `` r    r9   r9      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            	         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)   rL   rL   )dtype))r   r   r   )r   r   r   r   )   rH   r   r   )r   r   rN   r   )r   r   r   r   )r   r   rO   rH   )r   rO   r   r   r"   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggmatplotlib.backendsrJ   rK   subplotscanvas_tkphotoonesuint8blittk
interpaddrr0   TK_PHOTO_COMPOSITE_OVERLAY
ValueErrorprintclose)pltnp
matplotlibrJ   rK   figax
photoimagedata	bad_boxesbad_boxs              r    	test_blitrj   L   s    #,7llnGC$$J779BHH7-DI  	KK((*C
OT11<J IIcNZ|4  	)	s   %ACC$#C$rO   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 )NrO   r   r      r   )figureplotr`   after)legitimate_quitra   roots   r    do_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_plotp   s9    

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

1o&rG   c                  H     j                          j                  d       y NT)quitappend)rr   r"   s   r    rq   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitv   s    		trG   r"   )r	   rP   rQ   Tkrp   mainloopr_   )r	   rs   rq   ra   rr   r"   s     @@@@r    *test_figuremanager_preserves_host_mainlooprz   j   sL    #G' ::<DJJq'MMOi rG   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rO   r   r   )rO   r   rm   c                      d         k(  sj                  d       d         k(  sj                          j                         rt        d       y y )Nr[   g{Gz?r"   )sleepr`   waitr_   )r~   ra   show_finished_eventtimes   r    targetz6test_figuremanager_cleans_own_mainloop.<locals>.target   sJ    <>>JJsO <>>		##%) &rG   T)r   daemonblock)r	   r   rP   rQ   	threadingmatplotlib.cbookr~   rx   ro   EventThreadstartshowsetjoin)	r	   r   rr   r   threadr~   ra   r   r   s	        @@@@r    &test_figuremanager_cleans_own_mainloopr      s     #C::<DHHY	" $//+VD9F
LLNHH4H
KKMrG   c                     dd l } | j                  `| j                  `dd lm} |j                         }|j                  d       |j                          |j                  j                  j                         }|J ||j                  j                  j                         k(  sJ |j                  j                         j                  d|j                  |       |j                  d       y )Nr   Fr   d   T)r	   Miscupdateupdate_idletasksrP   rQ   rn   r   drawrV   toolbarconfigure_subplotsget_tk_widgetrp   r`   )r	   ra   rd   tools       r    test_never_updater      s     %#
**,CHH5HHHJ::002D3::%%88::::JJ$$S#))S9 HH4HrG   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      s2     4 > > 61qT44  6	 6s   +r   r"   )	rP   rQ   rS   r   rn   r_   rV   managerwindow)ra   r   rd   r   s      @r    test_missing_back_buttonr      sQ    #F6& 6
 **,C	)CJJ

**112	)rG   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"    )rP   rQ   unittestr   rn   r   rV   r   r   save_figurer:   remover_   )ra   r   rd   propfnames        r    test_save_figure_returnr      s    #
**,C1D	D|	4 

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

""**668}}i  
 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 ru   )rV   r   winfo_viewablewait_visibilityfocus_lastforrw   r`   destroy)tkcanvasrd   ra   rr   r"   s    r    check_focusz&test_canvas_focus.<locals>.check_focus   s^    ::++-&&($$& !!#x/NN4 		rG   r   r   r"   )
r	   rP   rQ   rx   rn   ro   rp   r   ry   r_   )r[   r   rd   ra   rr   r"   s     @@@@r    test_canvas_focusr      sp    #G
 557D
**,CHHYJJq#((JJsK MMOi rG   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_subplotro   r   mpl_connectr   packforget)	r   rd   re   rV   r   r   r   r   r   s	        r    test_figurez#test_embedding.<locals>.test_figure  s    h__
	"3v6,.?@##4f#=&vvEJDs+%%'rG   r"   zsky bluezmidnight bluewhite)
backgroundselectColor
foreground)r	   rS   r   r   matplotlib.backend_basesr   matplotlib.figurer   rx   r_   tk_setPalette)r[   rr   r   r   r   r   r   s      @@@@r    test_embeddingr      s_    1:(557D  	)
 	*/")  +	)rG   c                     ddl } ddlm} ddlm} | j                         }|j                  d       |j                           |d      }|j                  d        |||	      }|j                         j                  | j                  d
       |j                          |j                          |j                         j                         }|j                         j                         }|dkD  r|dkD  sJ t        j                   t"        dd      5  t        j                   |j$                  dd      5  |j'                          ddd       ddd       |j)                         }t+        |d   |j,                  z        }	t+        |d   |j,                  z        }
t/        |	|z
        dk  sJ d|	 d|        t/        |
|z
        dk  sJ d|
 d|        t1        d       |j3                          y# 1 sw Y   xY w# 1 sw Y   xY w)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   rB   r   winfo_fpixelsg      h@r   rO   r   zrender width z != actual width zrender height z != actual height r"   )r	   rS   r   r   r   rx   geometryr   r   r   r   BOTHr   winfo_widthwinfo_heightr   objectrA   	_tkcanvas_update_device_pixel_ratioget_size_inchesroundr   absr_   r   )r[   r   r   rr   rd   rV   actual_wactual_hsizerender_wrender_hs              r    test_dpi_change_triggers_resizer     s    C(557DMM)
S/COOCs40F
RWWT:
KKM##%113H##%224Ha<HqL(( 
c:w	/ ,	f&&#(
*, 	))+, ,  DT!Wsww&'HT!Wsww&'Hx("#q( >
z!28*=>(x("#q( @

"4XJ?@( 
)LLN!, , , ,s$   #H7G6H6G?	;HHr   )r7   r>   r:   rB   r,   rA   unittest.mockr   r#   rc   r   matplotlib.testingr   r%   r9   rj   rz   r<   r=   python_implementationflakyr   r   r   r   r   r   r   r   rG   r    <module>r      s     	   
   ( 4 7t #5 $5: # $. 2H224	AO  P !# $ P
2 !# $ 0 # $ # $  # $8 #" $"J #- $-rG   