U
    d»{jªP  ã                   @   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Zd dlmZ d dlmZ dd„ Z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�¡ qÞedk�r:ej  ejj!ej"d�¡ qÞ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�¡ qÞejd   'd¡dk�rÀej  ejj!ej"d�¡ qÞe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%„ Z*d&d'„ Z+d(d)„ Z,d*d+„ Z-d,d-„ Z.d.d/„ Z/d0d1„ Z0d2d3„ Z1ejj2d4ej3kd5d6�ejj2ej4d7kd8d6�d9d:„ ƒƒZ5d;d<„ Z6ejj2ejd=kd>d6�ej d	eƒ ¡d?d@„ ƒƒZ7dAdB„ Z8ejjdCddD�dEdF„ ƒZ9dGdH„ Z:eƒ Z;e;D ]rZejd  d ZedIk�r ej  ej <dJ¡¡ n>edKk�r@ej  ej <dL¡¡ nedk�rîej  ej <dM¡¡ �qîej d	e;¡ejjdNd�dOdP„ ƒƒZ=dQdR„ Z>ej d	eƒ ¡ej dSdTdUg¡dVdW„ ƒƒZ?dS )Xé    N)Ú_c_internal_utils)Ú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   úi/var/www/html/bwave/python/venv/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\    þþÿô
ÿ

ÿ
 þÿr@   é<   c               	      s0  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 |¡ƒ |
 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"¡�s,|j)d#k�r,ˆ | *¡ | *¡ ƒ 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 )NTrI   úmatplotlib.backends.backend_{})ÚuseÚfigureÚtypeÚcanvasÚ
__module__r.   )Zalt_backendÚfig)Úassert_equalÚmplÚpltr   r
   Úcheck_alt_backends   s    
þz1_test_interactive_impl.<locals>.check_alt_backendr   éýÿÿÿr   ÚsvgrK   é   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)r.   ç      à?Úqt5r'   )+Úimportlib.utilÚioÚjsonr,   ZunittestrB   Ú
matplotlibrD   Zmatplotlib.backend_basesrE   ÚrcParamsÚupdateÚloadsÚargvÚlowerZassertEqualZassertRaisesÚendswithr3   rM   ÚImportErrorrL   r   r    ÚsubplotsrN   rO   rP   r.   ÚplotÚtoolbarZdraw_rubberbandZ	new_timerZadd_callbackZ_processÚmpl_connectÚprintÚBytesIOZsavefigÚshowÚpauser-   Úgetvalue)r   re   rf   r,   rB   rE   rH   Zassert_raisesrU   rQ   ÚaxÚresultZresult_afterr   )rR   rS   rT   r^   r
   Ú_test_interactive_implO   s\    þ


þ

rz   r=   rq   Ztoolbar2Útoolmanagerr   )Zrerunsc                 C   sP   | d dkr|dkrt  d¡ ttt d|i¡t| d�}|j d¡dksLt	‚d S )	Nr   r   r{   z*toolmanager is not implemented for macosx.rq   ©ÚtimeoutZ	extra_envÚ
CloseEventrF   )
r6   r8   Ú_run_helperrz   rf   ÚdumpsÚ_test_timeoutÚstdoutÚcountÚAssertionError)r=   rq   Úprocr   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   )ÚThreadPoolExecutorrC   FrF   rG   rb   r   é   ra   rH   ZWX)Úconcurrent.futuresr‡   rg   rD   rh   ri   ro   rv   Zsubmitrp   ry   rO   rr   rs   ZdrawÚcloser3   Úflush_events)r‡   rS   rT   rQ   rx   Ú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~   rF   )r   r�   r�   r‚   rƒ   r„   ©r=   r…   r   r   r
   Útest_interactive_thread_safetyï   s    r“   c                  C   sv   dd l } dd lm} t | jd¡}t|tƒr0t‚|j	d ks>t‚| 
d¡ |j	d k	sVt‚t | jd¡}t|tƒsrt‚d S )Nr   rH   é   )rg   Úmatplotlib.pyplotrD   ÚdictÚ__getitem__rh   Ú
isinstancer;   r„   Z_backend_modrp   )rg   rT   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_qt5r6   ÚwarnsÚDeprecationWarningÚbackendsÚbackend_qt5ÚqApp©rg   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¤   r6   r¥   r¦   r§   r¨   r©   rª   r   r   r
   Ú
_implcairo  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„   r6   r¥   r¦   r§   r¨   r©   rª   r   r   r
   Ú	_implcore%  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 r[   r   r!   r   r   r
   r   3  s   ÿz-test_qt5backends_uses_qt5.<locals>.<listcomp>)r   rŸ   c                 S   s    g | ]}t j |¡d k	r|‘qS r[   r   r!   r   r   r
   r   7  s   ÿ)r   rž   r   úneed both QT6 and QT5 bindingsr›   Zpycairo)Úlenr6   r8   r   r«   r�   r   r   r    r¬   r­   )Úqt5_bindingsÚqt6_bindingsr   r   r
   Útest_qt5backends_uses_qt52  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   r6   rk   Úimport_moduleÚmatplotlib.backends.backend_qtZQApplicationr¥   ÚUserWarningr§   Ú
backend_qtZ_create_qApp)
r,   r   r6   Ú_Zhost_bindingZmpl_bindingZmpl_binding_qwidgetsrg   Zhost_qwidgetsZhost_appr   r   r
   Ú_impl_test_cross_Qt_importsC  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 r[   r   r!   r   r   r
   r   U  s   ÿz)test_cross_Qt_imports.<locals>.<listcomp>)r   r   c                 S   s    g | ]}t j |¡d k	r|‘qS r[   r   r!   r   r   r
   r   Y  s   ÿ)r   r   r   r®   r}   )r¯   r6   r8   r   r¸   r�   Ú
subprocessÚCalledProcessErrorÚ
returncodeÚsignalÚSIGSEGVÚSIGABRT)r°   r±   rc   Zqt6ÚpairÚexr   r   r
   Útest_cross_Qt_importsT  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   )r6   Úimportorskipr¹   ÚPopenr,   Ú
executableÚinspectÚ	getsourcerz   r0   r1   r.   rS   rh   ÚtimeÚperf_counterr�   Úpollr„   ÚurllibÚrequestÚurlopenÚerrorÚURLErrorZfailrŠ   Úsend_signalr¼   ÚSIGINTÚwait)r…   Úurlr}   ÚretcodeÚconnr   r   r
   Útest_webaggs  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   rF   r)   ÚDISPLAYÚWAYLAND_DISPLAYr   )r0   r,   rk   Úsplitr1   Úpopr£   r„   r•   rD   Úget_backendr   r³   Zswitch_backendrn   Úexit)r0   r,   rH   r<   r"   rT   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(   Ú )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´   r6   r¥   r¦   r§   r¶   r©   )rg   r6   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   rF   rX   T)ZanimatedF)Úblockg333333Ó?rZ   é
   çš™™™™™¹?)r•   rD   ro   rp   ru   rv   rO   rr   rs   Zcopy_from_bboxZbboxZdraw_artistZblitÚrangeZrestore_regionr‹   )rT   rQ   rx   Ú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   rC   rF   rX   r”   )Úgcr,   Úpsutilrg   rD   Úfloatrk   ÚProcessrè   rM   rv   rŠ   Zmemory_infoZrssZcollectrs   )
rî   r,   rï   rT   ÚtÚpr·   rQ   ZmemÚgrowthr   r   r
   Ú_test_figure_leak  s*    




rõ   Útime_mem)g        i€„ )rç   i€ÃÉc                 C   sn   t jddd� |\}}| d dks8| d dkr@tjdkr@|d7 }ttt|ƒt| d	�}t|j	ƒ}||ksjt
‚d S )
Nrï   zpsutil needed to run this testr%   r   r   r   r'   iÀØ§ r|   )r6   rÆ   r,   r-   r   rõ   r;   r�   Úintr‚   r„   )r=   rö   Z
pause_timeZacceptable_memory_leakagery   rô   r   r   r
   Útest_figure_leak_204903  s     
ÿÿ  þ
rø   )@r   rd   rÉ   rf   r0   r-   r¼   r¹   r,   rË   Úurllib.requestrÎ   r6   rg   rS   r   Zmatplotlib.testingr   r   r@   r�   rz   r7   ZparametrizeZflakyr†   r�   Z_thread_safe_backendsr:   ÚvaluesrH   r*   r5   r9   rº   Zpackaging.versionr�   Úmac_verÚTimeoutExpiredr2   Úpython_implementationr“   r™   rœ   r«   r¬   r­   r²   r¸   rÁ   Zskipifr1   ÚnamerÙ   rà   râ   rã   rä   rì   Z_blit_backendsr8   rí   rõ   rø   r   r   r   r
   Ú<module>   sÆ   /S

ÿ
ÿ

ÿÿÿýÿÿ!		
)

ÿ

ÿ

ÿ