U
    ÂmœdBV  ã                   @   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�¡ nÚe$dk�rbe"j% &ejj'ej(d�¡ n¶e$dk�r¸d 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�rèe"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r’t ¡ s’d}n||r¨d d |¡¡}nf|d dkrÆtj d¡rÆd}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s t‚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r¦W Y ¢ q^n|jt	j kr¼W 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 q¼W q\ tjjk
r¸   t ¡ |kr°t  d¡ nY q\Y q\X q\| ¡  |  tj¡ | jtd�dksät‚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s€t‚q€|D ]}t |¡ ||jks˜t‚q˜z| |¡ 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s€t‚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

ÿ
ÿ

ÿÿÿýÿÿ!		
)

ÿ

ÿ

ÿÿ