a
    
d                      @   s4  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dZeddd	d
 Zedddd Zejje dkddejjddedddd Zejjdddejjdded ddd Zedddd Zejjdddedddd Zedddd  ZdS )"    N)_c_internal_utils)subprocess_run_helper<   c                    s    du rt tS dtjv r" S tjjtj	
d ddtjjtjdkoRt  ddtjjdtjv srd	tjv otjd
kotjdd dk ddt   fd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 and $WAYLAND_DISPLAY are unsetZTF_BUILDZGITHUB_ACTIONdarwin   )      z%Tk version mismatch on Azure macOS CIc               
      s   t d ztttdddd} W nV tjyB   t d Y nr tjyz } z t dt	|j
  W Y d }~nBd }~0 0 g d  fd	d
| j
 D rJ | jdksJ d S )Nr   TkAgg1)Z
MPLBACKENDr   )timeoutZ	extra_envzSubprocess timed outz,Subprocess failed to test intended behavior
)ZOpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc                    s&   g | ] t  fd dD r qS )c                 3   s   | ]}| vV  qd S )N ).0msgliner   i/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>E       zB_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>.<genexpr>)all)r   Zignored_linesr   r   
<listcomp>D   s   z8_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>success)pytestZimportorskipr   _test_timeoutdict
subprocessTimeoutExpiredZfailCalledProcessErrorstrstderr
splitlinesstdoutcount)procefuncsuccess_countr   r   	test_func!   s     

z$_isolated_tk_test.<locals>.test_func)	functoolspartial_isolated_tk_testosenvironr   markskipif	importlibutil	find_specsysplatformr   Zdisplay_is_validZxfailversion_infowraps)r,   r+   r-   r   r*   r   r0      s,    	
r0      )r,   c               	   C   s   dd l m}  dd l}dd l}ddlm} |  \}}|jj}|	d}|j
d d \}}	||	|jjf}
d}|D ]B}z"||j t||
dd| W qn ty   td Y qn0 qnd S )Nr   )_tkagg)   r>   r>   r   ))r   r   r   )r   r   r   r   )   r<   r   r   )r   r   r?   r   )r   r   r   r   )r   r   r@   r<   )r   r@   r   r   r   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggZmatplotlib.backendsr=   ZsubplotscanvasZ_tkphotoZonesshapectypesdataZblittkZ
interpaddrr#   
ValueErrorprint)pltnp
matplotlibr=   figaxZ
photoimagerH   heightwidthZdataptrZ	bad_boxesZbad_boxr   r   r   	test_blitK   s$    
rS   r@   c                     sb   dd l } dd lm g  fdd}fdd |  d|   r^td d S )Nr   c                      s4      ddgddg   d  d S )Nr@   r   r      r   )figureplotcloseafterr   )legitimate_quitrL   rootr   r   do_plotm   s    z;test_figuremanager_preserves_host_mainloop.<locals>.do_plotc                      s       d d S NT)quitappendr   )rZ   r   r   r   rY   s   s    zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitr   )r   rA   rB   TkrX   mainlooprK   )r   r[   r   )rY   rL   rZ   r   r   *test_figuremanager_preserves_host_mainloopg   s    ra   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r   r   )Zrerunsc                     s   dd l } dd ldd lm dd l}ddlm  |  }g dg d  fdd}|	 |j
|dd}|  jdd	   |  d S )
Nr   )"_get_running_interactive_frameworkr@   r   r   )r@   r   rT   c                      s2   d  ks d q    r.td d S )NrI   g{Gz?r   )sleeprW   waitrK   r   rc   rL   Zshow_finished_eventtimer   r   target   s
    
z6test_figuremanager_cleans_own_mainloop.<locals>.targetT)ri   daemonblock)r   rh   rA   rB   	threadingZmatplotlib.cbookrc   r_   rV   EventThreadstartshowsetjoin)r   rm   rZ   ri   threadr   rg   r   &test_figuremanager_cleans_own_mainloop   s    ru   r   T)Zskip_on_importerrorc                  C   sn   dd l } | j`| j`dd lm} | }|jdd |  |j	j
  |j	 d|j| |jdd d S )Nr   Frk   d   T)r   ZMiscupdateZupdate_idletasksrA   rB   rU   rq   drawrE   toolbarZconfigure_subplotsget_tk_widgetrX   rW   )r   rL   rO   r   r   r   test_never_update   s    r{   r   c                     sZ   dd l m}  ddlm  G  fddd }|  }td ||j|jjj td d S )Nr   NavigationToolbar2Tkc                       s   e Zd Zdd  jD ZdS )z)test_missing_back_button.<locals>.Toolbarc                 S   s   g | ]}|d  dv r|qS )r   )ZHomeZPanZZoomr   )r   tr   r   r   r      s   z4test_missing_back_button.<locals>.Toolbar.<listcomp>N)__name__
__module____qualname__Z	toolitemsr   r|   r   r   Toolbar   s   r   r   )	rA   rB   rD   r}   rU   rK   rE   managerZwindow)rL   r   rO   r   r|   r   test_missing_back_button   s    r   c                     sz   dd l } dd lm g  fdd}|    g d dj d|   rvt	d d S )Nr   c                     sD    j  } |  s|   |  | kr0d     d S r\   )rE   rz   Zwinfo_viewableZwait_visibilityZfocus_lastforr^   rW   destroy)ZtkcanvasrO   rL   rZ   r   r   r   check_focus   s    

z&test_canvas_focus.<locals>.check_focusrd   rv   r   )
r   rA   rB   r_   rU   rV   rX   rq   r`   rK   )rI   r   r   r   r   test_canvas_focus   s    r   c                     s~   dd l } ddlmm ddlm ddlm  |  } fdd}|| t	d |j
dd	d
d || t	d d S )Nr   )FigureCanvasTkAggr}   )key_press_handler)Figurec                    s     }|  }|g d || d}|  |d | jddd || dd}|jdd	d |   |  d S )
Nrd   )masterZkey_press_eventTZboth)expandfillF)Zpack_toolbarx)Zadd_subplotrV   rx   Zmpl_connectrz   packZforget)r   rO   rP   rE   ry   r   r   r}   r   r   r   test_figure   s    z#test_embedding.<locals>.test_figurer   zsky bluezmidnight blueZwhite)Z
backgroundZselectColorZ
foreground)r   rD   r   r}   Zmatplotlib.backend_basesr   Zmatplotlib.figurer   r_   rK   Ztk_setPalette)rI   rZ   r   r   r   r   test_embedding   s    r   )N)r.   r5   r1   r9   r    r8   r   rN   r   Zmatplotlib.testingr   r   r0   rS   ra   r3   r4   python_implementationZflakyru   backendr{   r   r   r   r   r   r   r   <module>   s>   
:


