U
    Âmœdl  ã                   @   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 ƒr¢t‚| j d¡ˆks¶t‚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{®Gáz„?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

ÿ
