a
    s=ic                     @   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)subprocess_run_helper)_c_internal_utils<   c                    sx    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   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 unsetc               
      s   t d zt ttdddd} W nV tjyB   t d Y nf tjyz } z t dt	|j
  W Y d }~n6d }~0 0 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
c                 S   s   g | ]}d |vr|qS )ZOpenGL ).0liner   r   q/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/tests/test_backend_tk.py
<listcomp>;   s   z8_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>success)pytestZimportorskipr   _test_timeoutdict
subprocessTimeoutExpired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_validwraps)r#   r"   r$   r   r!   r   r'      s    	
r'      )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)   r4   r4      ))r5   r   r5   )r5   r   r   r5   )   r2   r   r5   )r   r5   r6   r5   )r   r5   r5   r   )r   r5   r7   r2   )r   r7   r5      r   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggZmatplotlib.backendsr3   ZsubplotscanvasZ_tkphotoZonesshapectypesdataZblittkZ
interpaddrr   
ValueErrorprint)pltnp
matplotlibr3   figaxZ
photoimager@   heightwidthZdataptrZ	bad_boxesZbad_boxr   r   r   	test_blitB   s$    
rK   r7   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 )Nr7   r5   r8      r   )figureplotcloseafterr   )legitimate_quitrD   rootr   r   do_plotd   s    z;test_figuremanager_preserves_host_mainloop.<locals>.do_plotc                      s       d d S NT)quitappendr   )rR   r   r   r   rQ   j   s    zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitr   )r   r9   r:   TkrP   mainlooprC   )r   rS   r   )rQ   rD   rR   r   r   *test_figuremanager_preserves_host_mainloop^   s    rY   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r   r8   )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r7   r5   r8   )r7   r5   rL   c                      s2   d  ks d q    r.td d S )NrA   g{Gz?r   )sleeprO   waitrC   r   r[   rD   Zshow_finished_eventtimer   r   target   s
    
z6test_figuremanager_cleans_own_mainloop.<locals>.targetT)ra   daemonblock)r   r`   r9   r:   	threadingZmatplotlib.cbookr[   rW   rN   EventThreadstartshowsetjoin)r   re   rR   ra   threadr   r_   r   &test_figuremanager_cleans_own_mainloopv   s    rm   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   Frc   d   T)r   ZMiscupdateZupdate_idletasksr9   r:   rM   ri   drawr=   toolbarZconfigure_subplotsget_tk_widgetrP   rO   )r   rD   rG   r   r   r   test_never_update   s    rs   r5   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   )HomePanZZoomr   )r   tr   r   r   r      s   z4test_missing_back_button.<locals>.Toolbar.<listcomp>N)__name__
__module____qualname__Z	toolitemsr   rt   r   r   Toolbar   s   r|   r   )	r9   r:   r<   ru   rM   rC   r=   managerZwindow)rD   r|   rG   r   rt   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 rT   )r=   rr   Zwinfo_viewableZwait_visibilityZfocus_lastforrV   rO   destroy)ZtkcanvasrG   rD   rR   r   r   r   check_focus   s    

z&test_canvas_focus.<locals>.check_focusr\   rn   r   )
r   r9   r:   rW   rM   rN   rP   ri   rX   rC   )rA   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   )FigureCanvasTkAggru   )key_press_handler)Figurec                    s     }|  }|g d || d}|  |d | jddd || dd}|jdd	d |   |  d S )
Nr\   )masterZkey_press_eventTZboth)expandfillF)Zpack_toolbarx)Zadd_subplotrN   rp   Zmpl_connectrr   packZforget)r   rG   rH   r=   rq   r   r   ru   r   r   r   test_figure   s    z#test_embedding.<locals>.test_figurer   zsky bluezmidnight bluewhite)
backgroundZselectColor
foreground)r   r<   r   ru   Zmatplotlib.backend_basesr   Zmatplotlib.figurer   rW   rC   Ztk_setPalette)rA   rR   r   r   r   r   test_embedding   s    r   )N)r%   r,   r(   r0   r   r/   r   Zmatplotlib.testingr   rF   r   r   r'   rK   rY   r*   r+   python_implementationZflakyrm   backendrs   r~   r   r   r   r   r   r   <module>   s>   
2


