a
    s=icP                     @   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v rej ejj!ej"d qedkr:ej ejj!ej"d qedkrd dl#m$Z$ e% d  Z%e%re$e%e$dk rej ejj!ej&dd qejd  'ddkrej ejj!ej"d qedkre( dkrej ejj!d dd! qe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j3v 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rej ej<dM qe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 } 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D ]6\}}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vrd}g }|rF|tjjd| d| d n0|d 	d
rvt jdkrv|tjjdd | tji |d d!|i|t|d" qj| S )#Nc                 S   s   g | ]}|gd |dfqS )Zqtagg
MPLBACKENDQT_API .0Zqt_apir   r   {/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/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   )       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)	envsdepsenvr'   missingr   r   repor+   r   r   r
   "_get_testable_interactive_backends   sh    	




rB   <   c                     sD  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 d    n1 s0    Y   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 )NTrK   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   svgrM      r   g      ?g       @Zkey_press_eventq
draw_eventc                    s      S N)start)event)timerr   r
   <lambda>   r#   z(_test_interactive_impl.<locals>.<lambda>close_eventZpng)r/         ?qt5r(   )+importlib.utiliojsonr-   ZunittestrD   
matplotlibrF   Zmatplotlib.backend_basesrG   rcParamsupdateloadsargvlowerassertEqualassertRaisesendswithr4   rO   ImportErrorrN   r   r    subplotsrP   rQ   rR   r/   plottoolbarZdraw_rubberbandZ	new_timerZadd_callbackZ_processmpl_connectprintBytesIOZsavefigshowpauser.   getvalue)r   rf   rg   r-   rD   rG   rJ   Zassert_raisesrW   rS   axresultZresult_afterr   )rT   rU   rV   r`   r
   _test_interactive_implO   s\    

,


r}   r?   rt   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sLJ d S )	Nr   r   r~   z*toolmanager is not implemented for macosx.rt   timeoutZ	extra_env
CloseEventrH   )	r7   r9   _run_helperr}   rg   dumps_test_timeoutstdoutcount)r?   rt   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	g d}|
  |jd	t |  |jj}|d |
  |  |jd
 dr|j  d S )Nr   )ThreadPoolExecutorrE   FrH   rI   rc   )rH   r      rb   rJ   ZWX)concurrent.futuresr   rh   rF   ri   rj   rr   ry   submitrs   r|   rQ   ru   rv   Zdrawcloser4   flush_events)r   rU   rV   rS   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"J d S )Nr   r   rH   )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r0J |jd u s>J |	d |jd usVJ t| jd}t|tsrJ d S )Nr   rJ      )
rh   matplotlib.pyplotrF   dict__getitem__ri   
isinstancer<   Z_backend_modrs   )rh   rV   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   s   dd l } dd l}d|jvsJ d|jvs,J d|jv sDd|jv sDJ dd l} tjtdd | jjj	 W d    n1 sz0    Y  d S Nr   r   pyside6r   pyside2QtWidgets.QApplication.instancematch)
Z"matplotlib.backends.backend_qt5aggr-   modulesmatplotlib.backends.backend_qt5r7   warnsDeprecationWarningbackendsbackend_qt5qApprh   r-   r   r   r
   _implqt5agg	  s    r   c                  C   s   dd l } dd l}d|jvsJ d|jvs,J d|jv sDd|jv sDJ dd l} tjtdd | jjj	 W d    n1 sz0    Y  d S r   )
Z$matplotlib.backends.backend_qt5cairor-   r   r   r7   r   r   r   r   r   r   r   r   r
   
_implcairo  s    r   c                  C   s   dd l } dd l}d|jvsJ d|jvs,J d|jv sDd|jv sDJ tjtdd | jjj W d    n1 sr0    Y  d S r   )	r   r-   r   r7   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 urftt	td tt
td d S )
Nc                 S   s    g | ]}t j|d u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 ur|qS r]   r   r!   r   r   r
   r   7  s   )r   r   r   need both QT6 and QT5 bindingsr   Zpycairo)lenr7   r9   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 d    n1 s0    Y  d S )Nr   z.QtCorez
.QtWidgetszmpl testingzMixing Qt majorr   )r-   r   r7   rl   import_modulematplotlib.backends.backend_qtZQApplicationr   UserWarningr   
backend_qtZ_create_qApp)
r-   r   r7   _Zhost_bindingZmpl_bindingZmpl_binding_qwidgetsrh   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 ]~}zttg|R dti W q^ tjy } zD|jt	j
 krW Y d }~q^n|jt	j krW Y d }~q^ W Y d }~q^d }~0 0 q^qJqBd S )	Nc                 S   s    g | ]}t j|d u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 ur|qS r]   r   r!   r   r   r
   r   Y  s   )r   r   r   r   r   )r   r7   r9   r   r   r   
subprocessCalledProcessError
returncodesignalSIGSEGVSIGABRT)r   r   rd   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i t	j
dddd} d	tjd
 tjd }t t }z(|  }|d u svJ tj|}W qW q` tjjy   t |krt d nY q`Y q`0 q`|  | tj | jtddksJ 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   )r7   importorskipr   Popenr-   
executableinspect	getsourcer}   r1   r2   r/   rU   ri   timeperf_counterr   pollurllibrequesturlopenerrorURLErrorfailr   send_signalr   SIGINTwait)r   urlr   retcodeconnr   r   r
   test_webaggs  s4    
r   c                  C   s   dd l } dd l}|jdd  \}}|d}| jdd  | jdd  |D ]}||jvsLJ qLdd lm} |	 dks|J |D ]}||jvsJ q|D ]}t
| ||jv sJ qz|| W n ty   Y n0 |d d S )Nr   rH   r*   DISPLAYWAYLAND_DISPLAYr   )r1   r-   rl   splitr2   popr   r   rF   get_backendr   r   Zswitch_backendrq   exit)r1   r-   rJ   r>   r"   rV   r   r   r
   _lazy_headless  s(    

r   r$   zthis a linux-only testc              	   C   s0   t t| d| dti | 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   sL   dd l } dd l}|jtdd | jjj W d    n1 s>0    Y  d S )Nr   r   r   )r   r7   r   r   r   r   r   )rh   r7   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   rH   rZ   T)ZanimatedF)blockg333333?r\   
   皙?)r   rF   rr   rs   rx   ry   rQ   ru   rv   Zcopy_from_bboxZbboxZdraw_artistZblitrangeZrestore_regionr   )rV   rS   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 J d S )Nr   Z	DrawEventr   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   rE   rH   rZ   r   )gcr-   psutilrh   rF   floatrl   Processr   rO   ry   r   Zmemory_infoZrssZcollectrv   )
r   r-   r   rV   tpr   rS   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sjJ d S )
Nr   zpsutil needed to run this testr&   r   r   r   r(   iا r   )
r7   r   r-   r.   r   r   r<   r   intr   )r?   r   Z
pause_timeZacceptable_memory_leakager|   r   r   r   r
   test_figure_leak_204903  s    

r   )@r   re   r   rg   r1   r.   r   r   r-   r   Zurllib.requestr   r7   rh   rU   r   Zmatplotlib.testingr   r   rB   r   r}   r8   ZparametrizeZflakyr   r   Z_thread_safe_backendsr;   valuesrJ   r+   r6   r:   r   Zpackaging.versionr   mac_verTimeoutExpiredr3   python_implementationr   r   r   r   r   r   r   r   r   Zskipifr2   namer   r   r   r   r   r   Z_blit_backendsr9   r   r   r   r   r   r   r
   <module>   s   /S




!		
)





