o
    liZ                     @   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$v re"j%&ejj'ej(d qe$dkre"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re. d#kre"j%&ejj'd$dd% qe$d"kr1d&ej/v sd'ej/v r1ejd(kr1ej0dd) d*k r1e"j%&ej'd+ qejde!ejjddd,d- Z1d.d/ Z2d0d1 Z3d2d3 Z4d4d5 Z5d6d7 Z6d8d9 Z7d:d; Z8d<d= Z9ejj:d&ej/v d>d?ejj:ej;d@kdAd?dBdC Z<dDdE Z=ejj:ejdFkdGd?ejde dHdI Z>dJdK Z?ejj$dLddMdNdO Z@dPdQ ZAe ZBeBD ]hZ"e"j#d  d Z$e$dRkre"j%&ejCdS qe$dTkre"j%&ejCdU qe$dkre"j%&ejCdV qe$d"krd&ej/v sd'ej/v rejd(krej0dd) d*k re"j%&ej'd+ qejdeBejjdWddXdY ZDdZd[ ZEejj:ejd\kd]d?ejde ejd^d_d`gdadb ZFdS )c    N)Image)_c_internal_utils)ToolToggleBase)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 n(|d d	krdtjv sd tjv rt jdkrt jd d! d"k r|tjjd#d | tji |d$d%|i|t|d& q5| S )'Nc                 S   s   g | ]
}|gd |dfqS )qtagg
MPLBACKENDQT_API .0qt_apir
   r
   h/home/ubuntu/SoloSpeech/.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GITHUB_ACTION   r      %Tk version mismatch on Azure macOS CIBACKEND_DEPS,)marksid)sysplatformr   display_is_validformatjoinosenvironget
startswithr   
Repositoryget_defaultenumerate_versionsappendpytestmarkskipxfailversion_infoparamstr)	envsdepsenvr-   missingr   r   repor6   r
   r
   r   "_get_testable_interactive_backends   sv   	





rQ   x   c                    s   t  ;}tdd}tj|d |  G  fdddt}| j	j
j}| j	j
j}|d| |dd W d    d S 1 sBw   Y  d S )NLA)   rT   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
   tmp_img_pathr
   r   
CustomTool]   s    r]   testgroup)tempfileTemporaryDirectoryr   newr=   pathr<   saver   canvasmanagertoolmanagertoolbaradd_tool)figtempdirimgr]   rg   rh   r
   r[   r   !_test_toolbar_button_la_mode_iconU   s   



"rm   c                     sZ  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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| j
d dkrt|	 |
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 d S d S )&Nr   )TestCasepyplot)KeyEventF   zwebagg.open_in_browserzwebagg.port_retriesbackendr   )r   webr   Tforcec                    s2   j | dd  } t|jjd|  d S )NTrv   matplotlib.backends.backend_{})usefiguretypere   rW   r;   )alt_backendrj   )assert_equalmplpltr
   r   check_alt_backend   s   
z1_test_interactive_impl.<locals>.check_alt_backendr   r   svgrx   rh   rg   r0   r   g      ?g       @key_press_eventq
draw_eventc                    s      S N)start)event)timerr
   r   <lambda>   s    z(_test_interactive_impl.<locals>.<lambda>close_eventpng)r;         ?qt5r.   ),importlib.utiliojsonr8   unittestrn   
matplotlibrp   matplotlib.backend_basesrq   rcParamsupdateloadsargvlowerassertEqualassertRaisesendswithr@   rz   ImportErrorry   r%   r&   subplotsr{   re   rW   r;   rm   plotrh   draw_rubberband	new_timeradd_callback_processmpl_connectprintBytesIOsavefigshowpauser9   getvalue)r$   r   r   r8   rn   rq   rt   assert_raisesr   rj   axresultresult_afterr
   )r}   r~   r   r   r   _test_interactive_impll   sd   



r   rN   rh   toolbar2rg   r   )rerunsc              
   C   s   | d dkr|dkrt d | d dkrt d ztttd|it| d}W n tjyF } zt 	d	t
|j  W Y d }~nd }~ww |jd
dksQJ d S )Nr   r"   rg   z*toolmanager is not implemented for macosx.r    2wx backend is deprecated; tests failed on appveyorrh   timeout	extra_envz,Subprocess failed to test intended behavior

CloseEventrr   )rE   rG   _run_helperr   r   dumps_test_timeout
subprocessCalledProcessErrorfailrK   stderrstdoutcount)rN   rh   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	g d}|
  |jd	t |  |jj}|d |
  |  |jd
 dr]|j  d S d S )Nr   )ThreadPoolExecutorro   Frr   rs   r   )rr   r      r   rt   WX)concurrent.futuresr   r   rp   r   r   r   r   submitr   r   re   r   r   drawcloser@   flush_events)r   r~   r   rj   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   r*   r/   r.   r0   r1   r3   c                 C   s&   t tt| d}|jddksJ d S )Nr   r   rr   )r   r   r   r   r   rN   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J |jd u sJ |d |jd us*J | jd}t|ts7J d S )Nr   rt      )	r   matplotlib.pyplotrp   r   _get
isinstancerK   _backend_modr   )r   r   bkr
   r
   r   &_impl_test_lazy_auto_backend_selection#  s   
r   c                   C      t ttd d S Nr   )r   r   r   r
   r
   r
   r    test_lazy_auto_backend_selection1  s   
r   c                  C      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} tjtdd | jjj	 W d    d S 1 s>w   Y  d S Nr   r   pyside6r   pyside2QtWidgets.QApplication.instancematch)
"matplotlib.backends.backend_qt5aggr8   modulesmatplotlib.backends.backend_qt5rE   warnsDeprecationWarningbackendsbackend_qt5qAppr   r8   r
   r
   r   _implqt5agg6     "r   c                  C   r   r   )
$matplotlib.backends.backend_qt5cairor8   r   r   rE   r   r   r   r   r   r   r
   r
   r   
_implcairoD  r   r   c                  C   s   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 tjtdd | jjj W d    d S 1 s:w   Y  d S r   )	r   r8   r   rE   r   r   r   r   r   r   r
   r
   r   	_implcoreR  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 r   r#   r'   r
   r
   r   r   `  
    z-test_qt5backends_uses_qt5.<locals>.<listcomp>)r   r   c                 S   r   r   r#   r'   r
   r
   r   r   d  r   )r   r   r   need both QT6 and QT5 bindingsr   pycairo)lenrE   rG   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 majorr   )r8   r$   rE   r   import_modulematplotlib.backends.backend_qtQApplicationr   UserWarningr   
backend_qt_create_qApp)
r8   r$   rE   _host_bindingmpl_bindingmpl_binding_qwidgetsr   host_qwidgetshost_appr
   r
   r   _impl_test_cross_Qt_importsp  s   "r  c                  C   s   dd dD } dd dD }t | dkst |dkrtd | D ]G}|D ]B}||g||gfD ]7}zttg|R dti W q/ tjyf } z|jt	j
 krTW Y d }~q/|jt	j kraW Y d }~q/ d }~ww q%q!d S )	Nc                 S   r   r   r#   r'   r
   r
   r   r     r   z)test_cross_Qt_imports.<locals>.<listcomp>)r   r   c                 S   r   r   r#   r'   r
   r
   r   r     r   )r   r   r   r   r   )r   rE   rG   r   r  r   r   r   
returncodesignalSIGSEGVSIGABRT)r   r   r   qt6pairexr
   r
   r   test_cross_Qt_imports  s8   

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)rN   zhttp://{}:{}zwebagg.addresszwebagg.portTz'Failed to connect to the webagg server.r   r   )rE   importorskipr   Popenr8   
executableinspect	getsourcer   r=   r>   r;   r~   r   timeperf_counterr   pollurllibrequesturlopenerrorURLErrorr   r   send_signalr	  SIGINTwait)r   urlr   retcodeconnr
   r
   r   test_webagg  s<   
r(  c                  C   s   dd l } dd l}|jdd  \}}|d}| jdd  | jdd  |D ]	}||jvs/J q&dd lm} |	 dks>J |D ]	}||jvsIJ q@|D ]}t
| ||jv sZJ qLz|| W n
 tyl   Y d S w |d d S )Nr   rr   r5   DISPLAYWAYLAND_DISPLAYr   )r=   r8   r   splitr>   popr   r   rp   get_backendr$   r   switch_backendr   exit)r=   r8   rt   rM   r(   r   r
   r
   r   _lazy_headless  s*   

r0  r)   zthis a linux-only testc              	   C   s0   t t| d| dti | dddd}d S )Nr   r4   rU   )r)  r*  r   )r   r0  r,  r   r   r
   r
   r   test_lazy_linux_headless  s   
r1  c                  C   sN   dd l } dd l}|jtdd | jjj W d    d S 1 s w   Y  d S )Nr   r   r   )r   rE   r   r   r   r   r   )r   rE   r
   r
   r   _qApp_warn_impl  s   "r2  QtAgg)skip_on_importerrorc                   C   r   r   )r   r2  r   r
   r
   r
   r   test_qApp_warn  s   r5  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 ]$}|j| |ddgddg\}|| |j|j
 |j  qB| d d S )Nr   rr   r0   T)animatedF)blockg333333?r   
   皙?)r   rp   r   r   r   r   re   r   r   copy_from_bboxbboxdraw_artistblitrangerestore_regionr   )r   rj   r   lnbgjr
   r
   r   _test_number_of_draws_script  s    


rC  	gtk3cairoz#gtk3cairo does not support blitting	gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingr   c                 C   s:   t tt| d}|jd}d|  k rdk sJ  J d S )Nr   	DrawEventr   r   )r   rC  r   r   r   )rN   r   ndrawsr
   r
   r   test_blitting_events9  s
    rH  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   ro   rr   r0   r   )gcr8   psutilr   rp   floatr   Processr>  rz   r   r   memory_inforsscollectr   )
rI  r8   rJ  r   tpr  rj   memgrowthr
   r
   r   _test_figure_leakI  s*   




rT  win32z0appveyor tests fail; gh-22988 suggests reworkingtime_mem)g        i )r9  ic                 C   s   t jddd |\}}| d dkrt d | d dks'| d dkr+tjd	kr+|d
7 }ttt|t| d}t	|j
}||ks@J d S )NrJ  zpsutil needed to run this testr,   r   r    r   r"   r   r.   iا r   )rE   r  rG   r8   r9   r   rT  rK   r   intr   )rN   rV  
pause_timeacceptable_memory_leakager   rS  r
   r
   r   test_figure_leak_20490h  s   

rZ  )Gr$   r   r  r   r=   r9   r	  r   r8   r`   r  urllib.requestr  PILr   rE   r   r~   r   matplotlib.backend_toolsr   matplotlib.testingr   r   rQ   r   rm   r   rF   parametrizeflakyr   r   _thread_safe_backendsrJ   valuesrt   r6   rD   rH   r   packaging.versionr   mac_verTimeoutExpiredr?   python_implementationr>   rI   r   r   r   r   r   r   r   r  r  skipifnamer(  r0  r1  r2  r5  rC  _blit_backendsrG   rH  rT  rZ  r
   r
   r
   r   <module>   s    6V

 
!		
)







