U
    mdl                     @   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                    sx    dkrt tS dtjk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k
rD   t d Y nr tjk
rz } zt dt	|j
  W 5 d }~X Y n<X dd	d
g  fdd| j
 D rt| jdkst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   | ]}| kV  qd S )N ).0msgliner   Y/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/tests/test_backend_tk.py	<genexpr>@   s     zB_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>.<genexpr>)all)r   Zignored_linesr   r   
<listcomp>?   s    z8_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>success)pytestZimportorskipr   _test_timeoutdict
subprocessTimeoutExpiredZfailCalledProcessErrorstrstderr
splitlinesAssertionError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 ]D}z"||j t||
dd| W qn tk
r   td Y qnX qnd S )Nr   )_tkagg)   r9   r9      ))r:   r   r:   )r:   r   r   r:   )   r7   r   r:   )r   r:   r;   r:   )r   r:   r:   r   )r   r:   r<   r7   )r   r<   r:      r   )matplotlib.pyplotpyplotnumpy!matplotlib.backends.backend_tkaggZmatplotlib.backendsr8   ZsubplotscanvasZ_tkphotoZonesshapectypesdataZblittkZ
interpaddrr   
ValueErrorprint)pltnp
matplotlibr8   figaxZ
photoimagerE   heightwidthZdataptrZ	bad_boxesZbad_boxr   r   r   	test_blitF   s,    
    rP   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_quitrI   rootr   r   do_ploth   s    z;test_figuremanager_preserves_host_mainloop.<locals>.do_plotc                      s       d d S NT)quitappendr   )rW   r   r   r   rV   n   s    zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitr   )r   r>   r?   TkrU   mainlooprH   )r   rX   r   )rV   rI   rW   r   r   *test_figuremanager_preserves_host_mainloopb   s    r^   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  |  }dddgdddg  fdd}|	 |j
|d	d
}|  jd	d   |  d S )Nr   )"_get_running_interactive_frameworkr<   r:   r=   rQ   c                      s2   d  ks d q    r.td d S )NrF   g{Gz?r   )sleeprT   waitrH   r   r`   rI   Zshow_finished_eventtimer   r   target   s
    
z6test_figuremanager_cleans_own_mainloop.<locals>.targetT)re   daemonblock)r   rd   r>   r?   	threadingZmatplotlib.cbookr`   r\   rS   EventThreadstartshowsetjoin)r   ri   rW   re   threadr   rc   r   &test_figuremanager_cleans_own_mainloopz   s    rq   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   Frg   d   T)r   ZMiscupdateZupdate_idletasksr>   r?   rR   rm   drawrB   toolbarZconfigure_subplotsget_tk_widgetrU   rT   )r   rI   rL   r   r   r   test_never_update   s    rw   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kr|qS )r   )ZHomePanZZoomr   )r   tr   r   r   r      s    z4test_missing_back_button.<locals>.Toolbar.<listcomp>N)__name__
__module____qualname__Z	toolitemsr   rx   r   r   Toolbar   s   r   r   )	r>   r?   rA   ry   rR   rH   rB   managerZwindow)rI   r   rL   r   rx   r   test_missing_back_button   s    r   c                     s|   dd l } dd lm g  fdd}|    dddg dj d|   rxt	d d S )	Nr   c                     sD    j  } |  s|   |  | kr0d     d S rY   )rB   rv   Zwinfo_viewableZwait_visibilityZfocus_lastforr[   rT   destroy)ZtkcanvasrL   rI   rW   r   r   r   check_focus   s    

z&test_canvas_focus.<locals>.check_focusr<   r:   r=   rr   r   )
r   r>   r?   r\   rR   rS   rU   rm   r]   rH   )rF   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   )FigureCanvasTkAggry   )key_press_handler)Figurec                    s     }|  }|dddg || d}|  |d | jddd || d	d
}|jddd |   |  d S )Nr<   r:   r=   )masterZkey_press_eventTZboth)expandfillF)Zpack_toolbarx)Zadd_subplotrS   rt   Zmpl_connectrv   packZforget)r   rL   rM   rB   ru   r   r   ry   r   r   r   test_figure   s    z#test_embedding.<locals>.test_figurer   zsky bluezmidnight bluewhite)
backgroundZselectColor
foreground)r   rA   r   ry   Zmatplotlib.backend_basesr   Zmatplotlib.figurer   r\   rH   Ztk_setPalette)rF   rW   r   r   r   r   test_embedding   s    r   )N)r*   r1   r-   r5   r   r4   r   rK   r   Zmatplotlib.testingr   r   r,   rP   r^   r/   r0   python_implementationZflakyrq   backendrw   r   r   r   r   r   r   r   <module>   s>   
5


