U
    mdBV                     @   s   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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Zd dlmZ d dlmZ d dlmZ dd ZdZd	d
 Zdd Zejde ejdddgejjdddd Zdd Z e Z!e!D ]Z"e"j#d  d Z$de$kr>e"j%&ejj'ej(d ne$dkrbe"j%&ejj'ej(d ne$dkrd dl)m*Z* e+ d  Z+e+re*e+e*dk re"j%&ejj'ej,dd n`e"j#d  -d d!kre"j%&ejj'ej(d n0e$d"kre. d#kre"j%&ejj'd$dd% qejde!ejjddd&d' Z/d(d) Z0d*d+ Z1d,d- Z2d.d/ Z3d0d1 Z4d2d3 Z5d4d5 Z6d6d7 Z7ejj8d8ej9kd9d:ejj8ej:d;kd<d:d=d> Z;d?d@ Z<ejj8ejdAkdBd:ejde dCdD Z=dEdF Z>ejj$dGddHdIdJ Z?dKdL Z@e ZAeAD ]rZ"e"j#d  d Z$e$dMkrNe"j%&ejBdN n>e$dOkrne"j%&ejBdP ne$dkre"j%&ejBdQ qejdeAejjdRddSdT ZCdUdV ZDejj8ejdWkdXd:ejde ejdYdZd[gd\d] ZEdS )^    N)Image)_c_internal_utils)ToolToggleBase)subprocess_run_helperc            	   	   C   s  g } dd dD dd dD dd dD dgdd	ifd
gdd
ifd
gddifdgddiffD ]2\}}d }dd |D }t jdkrt sd}n||rdd|}nf|d dkrtjdrd}nH|d 	drdd l
}|d d }|j }| d|dkrd}g }|r:|tjjd| d| d n0|d 	d
rjt jdkrj|tjjdd | tj|d d!|i|t|d" q^| S )#Nc                 S   s   g | ]}|gd |dfqS )Zqtagg
MPLBACKENDQT_API .0Zqt_apir	   r	   c/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/tests/test_backends_interactive.py
<listcomp>   s   z6_get_testable_interactive_backends.<locals>.<listcomp>)PyQt6PySide6PyQt5PySide2c                 S   s   g | ]}|d gd|dfqS )	cairocffiZqtcairor   r	   r
   r	   r	   r   r   "   s   c                 S   s0   g | ](}d D ]}ddgdd| | ifqqS ))aggcairor   gir   gtkr	   )r   versionrendererr	   r	   r   r   %   s     )      tkinterr   tkaggwxZwxaggzmatplotlib.backends._macosxmacosxc                 S   s   g | ]}t j|s|qS r	   	importlibutil	find_specr   depr	   r	   r   r   -   s      linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedz, TF_BUILDzmacosx backend fails on Azurer   r   r   z.0ZGtkzno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849BACKEND_DEPS,)marksid)sysplatformr   Zdisplay_is_validformatjoinosenvironget
startswithr   Z
Repositoryget_defaultZenumerate_versionsappendpytestmarkskipxfailparamstr)	Zenvsdepsenvr(   missingr   r   repor,   r	   r	   r   "_get_testable_interactive_backends   s\    



 rB   x   c              	      s|   t  j}tdd}tj|d |  G  fdddt}| j	j
j}| j	j
j}|d| |dd W 5 Q R X d S )NZLA)   rD   ztest_la_icon.pngc                       s   e Zd Z ZdZdS )z5_test_toolbar_button_la_mode_icon.<locals>.CustomTool N)__name__
__module____qualname__imagedescriptionr	   Ztmp_img_pathr	   r   
CustomToolV   s   rL   testgroup)tempfileTemporaryDirectoryr   newr2   pathr1   saver   canvasmanagertoolmanagertoolbarZadd_tool)figtempdirZimgrL   rV   rW   r	   rK   r   !_test_toolbar_button_la_mode_iconN   s    



rZ   c               	      sH  dd l } dd l}dd l}dd l}ddlm} dd lddlm ddlm	} j
ddd j
||jd  j
d  }| j | j}|d	r|d
s  |dkr|t jddd W 5 Q R X  fdd}| jdr||d d d  |d j|dd  \}	}
 t|	jjd| j
d dkrbt|	 |
ddgddg |	jjr|	jj d dddd |	j!d"|d|	jdj# |	j$dfdd |	j$d t% |& }|	j'|d!d" (  )d# |& }|	j'|d!d" |d$sD|j*d%krD |+ |+  d S )&Nr   )TestCasepyplot)KeyEventF   zwebagg.open_in_browserzwebagg.port_retriesbackendr   )r   Zwebr   Tforcec                    s2   j | dd  } t|jjd|  d S )NTrb   matplotlib.backends.backend_{})usefiguretyperT   rG   r0   )Zalt_backendrX   )assert_equalmplpltr	   r   check_alt_backend   s    
z1_test_interactive_impl.<locals>.check_alt_backendr   r   svgrd   rW   rV      r   g      ?g       @Zkey_press_eventq
draw_eventc                    s      S N)start)event)timerr	   r   <lambda>       z(_test_interactive_impl.<locals>.<lambda>close_eventZpng)r0         ?qt5r)   ),importlib.utiliojsonr.   Zunittestr[   
matplotlibr]   Zmatplotlib.backend_basesr^   rcParamsupdateloadsargvlowerassertEqualassertRaisesendswithr5   rf   ImportErrorre   r!   r"   subplotsrg   rT   rG   r0   rZ   plotrW   Zdraw_rubberbandZ	new_timerZadd_callbackZ_processmpl_connectprintBytesIOZsavefigshowpauser/   getvalue)r    r{   r|   r.   r[   r^   ra   Zassert_raisesrk   rX   axresultZresult_afterr	   )rh   ri   rj   rt   r   _test_interactive_imple   s`    




r   r?   rW   Ztoolbar2rV   r   )Zrerunsc              
   C   s   | d dkr|dkrt d | d dkr4t d ztttd|it| d}W n8 tjk
r } zt 	d	t
|j  W 5 d }~X Y nX |jd
dkstd S )Nr   r   rV   z*toolmanager is not implemented for macosx.r   2wx backend is deprecated; tests failed on appveyorrW   timeoutZ	extra_envz,Subprocess failed to test intended behavior

CloseEventr_   )r8   r:   _run_helperr   r|   dumps_test_timeout
subprocessCalledProcessErrorfailr=   stderrstdoutcountAssertionError)r?   rW   procerrr	   r	   r   test_interactive_backend   s&    


r   c                  C   s   ddl m}  dd l}ddlm} |jddd | \}}|d |  |j	ddd	g}|
  |jd
t |  |jj}|d |
  |  |jd dr|j  d S )Nr   )ThreadPoolExecutorr\   Fr_   r`   rx   r      rw   ra   ZWX)concurrent.futuresr   r}   r]   r~   r   r   r   submitr   r   rT   r   r   Zdrawcloser5   flush_events)r   ri   rj   rX   r   futurer	   r	   r   _test_thread_impl   s$    

r   r   r   )raisesr   r   )parsez10.16T)r   strictr   r   r   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929)r(   r   c                 C   s&   t tt| d}|jddks"td S )Nr   r   r_   )r   r   r   r   r   r   r?   r   r	   r	   r   test_interactive_thread_safety  s    r   c                  C   sr   dd l } dd lm} | jd}t|tr.t|jd ks<t|	d |jd k	sTt| jd}t|tsntd S )Nr   ra      )
r}   matplotlib.pyplotr]   r~   _get
isinstancer=   r   Z_backend_modr   )r}   rj   Zbkr	   r	   r   &_impl_test_lazy_auto_backend_selection  s    
r   c                   C   s   t ttd d S Nr   )r   r   r   r	   r	   r	   r    test_lazy_auto_backend_selection%  s    r   c               	   C   st   dd l } dd l}d|jkstd|jks,td|jksDd|jksDtdd l} tjtdd | jj	j
 W 5 Q R X d S Nr   r   pyside6r   pyside2QtWidgets.QApplication.instancematch)Z"matplotlib.backends.backend_qt5aggr.   modulesr   matplotlib.backends.backend_qt5r8   warnsDeprecationWarningbackendsbackend_qt5qAppr}   r.   r	   r	   r   _implqt5agg*  s    r   c               	   C   st   dd l } dd l}d|jkstd|jks,td|jksDd|jksDtdd l} tjtdd | jj	j
 W 5 Q R X d S r   )Z$matplotlib.backends.backend_qt5cairor.   r   r   r   r8   r   r   r   r   r   r   r	   r	   r   
_implcairo8  s    r   c               	   C   sl   dd l } dd l}d|jkstd|jks,td|jksDd|jksDttjtdd | jjj	 W 5 Q R X d S r   )
r   r.   r   r   r8   r   r   r   r   r   r   r	   r	   r   	_implcoreF  s    r   c                  C   sv   dd dD } dd dD }t | dks4t |dkr>td tttd tjd	d k	rftt	td tt
td d S )
Nc                 S   s    g | ]}t j|d k	r|qS rq   r   r#   r	   r	   r   r   T  s   z-test_qt5backends_uses_qt5.<locals>.<listcomp>)r   r   c                 S   s    g | ]}t j|d k	r|qS rq   r   r#   r	   r	   r   r   X  s   )r   r   r   need both QT6 and QT5 bindingsr   Zpycairo)lenr8   r:   r   r   r   r    r!   r"   r   r   )qt5_bindingsqt6_bindingsr	   r	   r   test_qt5backends_uses_qt5S  s    
r   c            
   	   C   s   dd l } dd l}dd l}| j\}}}|| d || d}dd l}|| d}|dg}	|jtdd |j	j
  W 5 Q R X d S )Nr   z.QtCorez
.QtWidgetszmpl testingzMixing Qt majorr   )r.   r    r8   r   import_modulematplotlib.backends.backend_qtZQApplicationr   UserWarningr   
backend_qtZ_create_qApp)
r.   r    r8   _Zhost_bindingZmpl_bindingZmpl_binding_qwidgetsr}   Zhost_qwidgetsZhost_appr	   r	   r   _impl_test_cross_Qt_importsd  s    r   c                  C   s   dd dD } dd dD }t | dks4t |dkr>td | D ]}|D ]}||g||gfD ]r}zttf|dti W q^ tjk
r } z4|jt	j
 krW Y  q^n|jt	j krW Y q^ W 5 d }~X Y q^X q^qJqBd S )	Nc                 S   s    g | ]}t j|d k	r|qS rq   r   r#   r	   r	   r   r   v  s   z)test_cross_Qt_imports.<locals>.<listcomp>)r   r   c                 S   s    g | ]}t j|d k	r|qS rq   r   r#   r	   r	   r   r   z  s   )r   r   r   r   r   )r   r8   r:   r   r   r   r   r   
returncodesignalSIGSEGVSIGABRT)r   r   ry   Zqt6pairexr	   r	   r   test_cross_Qt_importsu  s.    


r   r&   z,this test fails an azure for unknown reasonsr'   ntzCannot send SIGINT on Windows.c                  C   s   t d tjtjdttd dgt	j
dddd} d	tjd
 tjd }t t }z(|  }|d ksrttj|}W qW q\ tjjk
r   t |krt d nY q\Y q\X q\|  | tj | jtddkstd S )Ntornadoz-cz
_test_interactive_impl()z{}Zwebagg0)r   SOURCE_DATE_EPOCH)r?   zhttp://{}:{}zwebagg.addresszwebagg.portz'Failed to connect to the webagg server.r   r   )r8   importorskipr   Popenr.   
executableinspect	getsourcer   r2   r3   r0   ri   r~   timeperf_counterr   pollr   urllibrequesturlopenerrorURLErrorr   r   send_signalr   SIGINTwait)r   urlr   retcodeconnr	   r	   r   test_webagg  s6    
 r   c                  C   s   dd l } dd l}|jdd  \}}|d}| jdd  | jdd  |D ]}||jksLtqLdd lm	} |
 dks|t|D ]}||jkstq|D ]}t| ||jkstqz|| W n tk
r   Y nX |d d S )Nr   r_   r+   DISPLAYWAYLAND_DISPLAYr   )r2   r.   r   splitr3   popr   r   r   r]   get_backendr    r   Zswitch_backendr   exit)r2   r.   ra   r>   r$   rj   r	   r	   r   _lazy_headless  s(    

r   r%   zthis a linux-only testc              	   C   s,   t t| d| dt| dddd}d S )Nr   r*   rE   )r   r   r   )r   r   r   r   r   r	   r	   r   test_lazy_linux_headless  s     r   c               	   C   s8   dd l } dd l}|jtdd | jjj W 5 Q R X d S )Nr   r   r   )r   r8   r   r   r   r   r   )r}   r8   r	   r	   r   _qApp_warn_impl  s     r   ZQtAgg)Zskip_on_importerrorc                   C   s   t ttd d S r   )r   r   r   r	   r	   r	   r   test_qApp_warn  s    r   c                  C   s   dd l m}  |  \}}|jddgddgdd\}| jdd | d |jd	t |j	|j
}|| |j|j
 td
D ]H}|j| |ddgddg\}|| |j|j
 |j  q| d d S )Nr   r_   rn   T)ZanimatedF)blockg333333?rp   
   皙?)r   r]   r   r   r   r   rT   r   r   Zcopy_from_bboxZbboxZdraw_artistZblitrangeZrestore_regionr   )rj   rX   r   lnbgjr	   r	   r   _test_number_of_draws_script  s     


r  Z	gtk3cairoz#gtk3cairo does not support blittingZ	gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingr   c                 C   s8   t tt| d}|jd}d|  k r.dk s4n td S )Nr   Z	DrawEventr   r   )r   r  r   r   r   r   )r?   r   Zndrawsr	   r	   r   test_blitting_events%  s      r  c            
      C   s   dd l } dd l}dd l}ddlm} t|jd }| }tdD ]$}|	 }|r\|
| || qB| j}|   tdD ],}|	 }|r|
| || |   q| j| }	t|	 d S )Nr   r\   r_   rn   r   )gcr.   psutilr}   r]   floatr   Processr  rf   r   r   Zmemory_infoZrssZcollectr   )
r  r.   r  rj   tpr   rX   Zmemgrowthr	   r	   r   _test_figure_leak5  s*    




r  win32z0appveyor tests fail; gh-22988 suggests reworkingtime_mem)g        i )r   ic                 C   s   t jddd |\}}| d dkr,t d | d dksN| d dkrVtjd	krV|d
7 }ttt|t| d}t	|j
}||kstd S )Nr  zpsutil needed to run this testr'   r   r   r   r   r   r)   iا r   )r8   r   r:   r.   r/   r   r  r=   r   intr   r   )r?   r  Z
pause_timeZacceptable_memory_leakager   r  r	   r	   r   test_figure_leak_20490T  s$    

  
r  )Fr    rz   r   r|   r2   r/   r   r   r.   rO   r   urllib.requestr   ZPILr   r8   r}   ri   r   Zmatplotlib.backend_toolsr   Zmatplotlib.testingr   r   rB   r   rZ   r   r9   ZparametrizeZflakyr   r   Z_thread_safe_backendsr<   valuesra   r,   r7   r;   r   Zpackaging.versionr   mac_verTimeoutExpiredr4   python_implementationr   r   r   r   r   r   r   r   r   Zskipifr3   namer   r   r   r   r   r  Z_blit_backendsr:   r  r  r  r	   r	   r	   r   <module>   s   /V




!		
)





