o
    tBh@                     @   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 rej ejj!ej"d qoedkrej ejj!ej"d qoe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 qoejd  'ddkrej ejj!ej"d qoedkre( dkrej ejj!d dd! qoe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jd?dd@dAdB Z7dCdD Z8ejd	e ejdEdFdGgdHdI Z9dS )J    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 ]\}}d }dd |D }t jdkrNt sNd}n<|rYdd|}n1|d dkrhtjdrhd}n"|d 	drdd l
}|d d }|j }| d|dvrd}g }|r|tjjd| d| d n|d 	d
rt jdkr|tjjdd | tj||t|d  q5| S )!Nc                 S   s   g | ]
}|gd |dfqS )qtagg
MPLBACKENDQT_API .0qt_apir   r   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/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 )	cairocffi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wx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.0Gtkzno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849)marksid)sysplatformr   display_is_validformatjoinosenvironget
startswithr   
Repositoryget_defaultenumerate_versionsappendpytestmarkskipxfailparamstr)	envsdepsenvr+   missingr   r   repor-   r   r   r   "_get_testable_interactive_backends   s^   	




rG   <   c                     s@  dd l } dd l}dd l}dd l}ddlm} dd lddlmm} ddl	m
} |ddd |||jd  jd  }| j | j}|d	r|d
s  |dkrw|t jddd W d    n1 srw   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!|j"|
jd |
j#dfdd |
j#dt$ |% }|
j&|dd '  (d  |% }|
j&|dd |d!s|j)d"kr |* |*  d S d S d S )#Nr   )TestCasepyplotrcParams)FigureCanvasBaseF   zwebagg.open_in_browserzwebagg.port_retriesbackendr   )r   webr   Tforcec                    s2   j | dd  } t|jjd|  d S )NTrR   matplotlib.backends.backend_{})usefiguretypecanvas
__module__r2   )alt_backendfig)assert_equalmplpltr   r   check_alt_backendq   s   
z1_test_interactive_impl.<locals>.check_alt_backendr   r   svgrT      r   g      ?g       @q
draw_eventc                    s      S N)start)event)timerr   r   <lambda>   s    z(_test_interactive_impl.<locals>.<lambda>close_eventpng)r2         ?qt5r,   )+importlib.utiliojsonr/   unittestrI   
matplotlibrK   rL   matplotlib.backend_basesrM   updateloadsargvlowerassertEqualassertRaisesendswithr7   rV   ImportErrorrU   r#   r$   subplotsrW   rX   rY   r2   plottoolbardraw_rubberband	new_timeradd_callbackkey_press_eventmpl_connectprintBytesIOsavefigshowpauser0   getvalue)r"   ro   rp   r/   rI   rL   rM   rP   assert_raisesr_   r[   axresultresult_afterr   )r\   r]   r^   rh   r   _test_interactive_implL   s`   



r   rD   r~   toolbar2toolmanagerr   )rerunsc                 C   sV   | d dkr|dkrt d tttd|ifdti| }|jddks)J d S )	Nr   r    r   z*toolmanager is not implemented for macosx.r~   timeout
CloseEventrN   )	r<   r>   _run_helperr   rp   dumps_test_timeoutstdoutcount)rD   r~   procr   r   r   test_interactive_backend   s   
r   c                  C   s   ddl m}  ddlm}m} |ddd | \}}|d |  |j	g d}|
  |jd	t |  |jj}|d |
  |  |jd
 drZ|j  d S d S )Nr   )ThreadPoolExecutorrJ   FrN   rO   rl   )rN   r      rj   rP   WX)concurrent.futuresr   rr   rK   rL   rt   r|   r   submitr}   r   rX   r   r   drawcloser7   flush_events)r   r^   rL   r[   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fdti| }|jddksJ d S )Nr   r   rN   )r   r   r   r   r   )rD   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rJ |jd u sJ |	d |jd us+J t| jd}t|ts9J d S )Nr   rP      )
rr   matplotlib.pyplotrK   dict__getitem__rL   
isinstancerA   _backend_modr}   )rr   r^   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   Z   dd l } dd l}d|jvsJ d|jvsJ d|jv s"d|jv s"J dd l} | jjj d S Nr   r   pyside6r   pyside2)"matplotlib.backends.backend_qt5aggr/   modulesmatplotlib.backends.backend_qt5backendsbackend_qt5qApprr   r/   r   r   r   _implqt5agg     r   c                  C   r   r   )$matplotlib.backends.backend_qt5cairor/   r   r   r   r   r   r   r   r   r   
_implcairo  r   r   c                  C   sR   dd l } dd l}d|jvsJ d|jvsJ d|jv s"d|jv s"J | jjj d S r   )r   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st |dkrtd tttd tjd	d ur3tt	td tt
td d S )
Nc                 S       g | ]}t j|d ur|qS re   r!   r%   r   r   r   r   *  
    z-test_qt5backends_uses_qt5.<locals>.<listcomp>)r   r   c                 S   r   re   r!   r%   r   r   r   r   .  r   )r   r   r   need both QT6 and QT5 bindingsr   pycairo)lenr<   r>   r   r   r   r"   r#   r$   r   r   )qt5_bindingsqt6_bindingsr   r   r   test_qt5backends_uses_qt5)  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    d S 1 sMw   Y  d S )Nr   z.QtCorez
.QtWidgetszmpl testingzMixing Qt major)match)r/   r"   r<   rv   import_modulematplotlib.backends.backend_qtQApplicationwarnsUserWarningr   
backend_qt_create_qApp)
r/   r"   r<   _host_bindingmpl_bindingmpl_binding_qwidgetsrr   host_qwidgetshost_appr   r   r   _impl_test_cross_Qt_imports:  s   "r   c                  C   s   dd dD } dd dD }t | dkst |dkrtd | D ]8}|D ]3}||g||gfD ](}zttg|R dti W q/ tjyW } z|jd	krRW Y d }~q/ d }~ww q%q!d S )
Nc                 S   r   re   r!   r%   r   r   r   r   L  r   z)test_cross_Qt_imports.<locals>.<listcomp>)r   r   c                 S   r   re   r!   r%   r   r   r   r   P  r   )r   r   r   r   r   i)	r   r<   r>   r   r   r   
subprocessCalledProcessError
returncode)r   r   rm   qt6pairexr   r   r   test_cross_Qt_importsK  s4   


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 s<J tj|}W n tjjy\   t |krXt d nY q0Y nw q1|  | tj | jtddksrJ d S )Ntornadoz-cz
_test_interactive_impl()z{}webagg0)r   SOURCE_DATE_EPOCH)rD   zhttp://{}:{}zwebagg.addresszwebagg.portTz'Failed to connect to the webagg server.r   r   )r<   importorskipr   Popenr/   
executableinspect	getsourcer   r4   r5   r2   r]   rL   timeperf_counterr   pollurllibrequesturlopenerrorURLErrorfailr   send_signalsignalSIGINTwait)r   urlr   retcodeconnr   r   r   test_webaggf  s<   
r   c                  C   s   dd l } dd l}| jdd  | jdd  dd lm} | dk d|jvs)J dd l}d|jv s4J z|	d W n
 t
yE   Y d S w |d d S )Nr   DISPLAYWAYLAND_DISPLAYr   r   qt5aggrN   )r4   r/   r5   popr   rK   get_backendr   r   switch_backendr{   exit)r4   r/   r^   r   r   r   r   _lazy_headless  s   r  r'   zthis a linux-only testQtAgg)skip_on_importerrorc                  C   s   t ttdd} d S )N )r   r   )r   r  r   )r   r   r   r   test_lazy_linux_headless  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.|
| || q!| j}|   tdD ]}|	 }|rN|
| || |   qA| j| }	t|	 d S )Nr   )rK   rN   rb   r   )gcr/   psutilrr   rK   floatrv   ProcessrangerV   r   r   memory_inforsscollectr   )
r	  r/   r
  r^   tpr   r[   memgrowthr   r   r   _test_figure_leak  s*   




r  time_mem)g        i )g?ic                 C   s^   t jddd |\}}| d dkr|d7 }ttt|fdti| }t|j}||ks-J d S )Nr
  zpsutil needed to run this testr*   r   r    iا r   )r<   r   r   r  rA   r   intr   )rD   r  
pause_timeacceptable_memory_leakager   r  r   r   r   test_figure_leak_20490  s   
r  ):r"   rn   r   rp   r4   r0   r   r   r/   r   urllib.requestr   r<   rr   r]   r   matplotlib.testingr   r   rG   r   r   r=   parametrizeflakyr   r   _thread_safe_backendsr@   valuesrP   r-   r;   r?   r   packaging.versionr   mac_verTimeoutExpiredr6   python_implementationr   r   r   r   r   r   r   r   r   skipifr5   namer   r  r  r  r  r   r   r   r   <module>   s    *
T

