o
    jp                  	   @   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Zd dlZd dlmZ d dlmZ d dlmZmZ G dd dejZe jdd	 Zd
d Ze rodn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/m0Z0 e1 d  Z1e1re0e1e0d"k re(j+,ej"j-ej2d#d$ qe(j)d  3d%d&kr	e(j+,ej"j-ej.d qe*d'kr"e4 d(kr"e(j+,ej"j-d)d#d* qe*d'krMd+ej5v s3d,ej5v rMe	jd-krMe	j6dd. d/k rMe(j+,ej"-d0 qej"#de'ej"j$ddd1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=d?d@ Z>dAdB Z?dCdD Z@dEdF ZAej"jBe	jdGkoeC  dHdIej"#dJg eA dKdL ZDej"jBd+ej5v dMdIej"jBe	jdNkdOdIdPdQ ZEdRdS ZFej"jBe	jdGkdTdIej"#de dUdV ZGdWdX ZHe ZIeID ]hZ(e(j)d  d Z*e*dYkre(j+,ej"JdZ qe*d[kre(j+,ej"Jd\ qe*dkr!e(j+,ej"Jd] qe*d'krLd+ej5v s2d,ej5v rLe	jd-krLe	j6dd. d/k rLe(j+,ej"-d0 qej"#deIej"j$d^dd_d` ZKdadb ZLej"#de dcdd ZMdedf ZNej"#de ej"#dgdhdid#ifdjdkdlifgdmdn ZOdodp ZPej"jBe	jdNkdqdIej"#de ej"#dgdhdid#ifdjdkdlifgdrds ZQdS )t    N)Image)_c_internal_utils)ToolToggleBase)subprocess_run_helperis_ci_environmentc                       s(   e Zd ZdZ fddZdd Z  ZS )_WaitForStringPopenzL
    A Popen that passes flags that allow triggering KeyboardInterrupt.
    c                    sH   t jdkr
tj|d< t j|i |i tjdddtjdd d S )Nwin32creationflagsZAgg0
MPLBACKENDSOURCE_DATE_EPOCHT)envstdoutuniversal_newlines)	sysplatform
subprocessZCREATE_NEW_CONSOLEsuper__init__osenvironPIPE)selfargskwargs	__class__ k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/matplotlib/tests/test_backends_interactive.pyr      s   

z_WaitForStringPopen.__init__c                 C   s<   d}	 | j d}|std|||7 }||rdS q)z%Read until the terminator is reached. T   z)Subprocess died before emitting expected N)r   readRuntimeErrorendswith)r   
terminatorbufcr   r   r   wait_for'   s   
z_WaitForStringPopen.wait_for)__name__
__module____qualname____doc__r   r(   __classcell__r   r   r   r   r      s    	r   c               	   C   sH  t jdko	t  } t jdkot  }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 }|radd|}nX|rs|d	 d
ksp|d	 drsd}nF| rxd}nA|d	 dkrtj	
drd}n2|d	 drzdd l}W n ty   g }Y nw |j }	|	d}|d	 d }
|
 d|vrd}g }|r|tjjd| d| d nC|d	 drt jdkr|tjjd d n,|d	 d
krdtj	v sd!tj	v rt jdkrt jd d" d#k r|tjjd$d |i |d%d&|i|f qI|S )'Nlinuxc                 S   s   g | ]
}|gd |dfqS )qtaggr   QT_APIr   .0Zqt_apir   r   r   
<listcomp>@   s
    z7_get_available_interactive_backends.<locals>.<listcomp>)PyQt6PySide6PyQt5PySide2c                 S   s   g | ]}|d gd|dfqS )	cairocffiZqtcairor0   r   r2   r   r   r   r4   C   s
    c                 S   s0   g | ]}d D ]}ddgdd| | ifqqS ))aggcairor;   gir   gtkr   )r3   versionrendererr   r   r   r4   F   s
     )      tkinterr   tkaggwxwxaggzmatplotlib.backends._macosxmacosxc                 S   s   g | ]
}t j|s|qS r   	importlibutil	find_specr3   depr   r   r   r4   N   s    z{} cannot be imported, z$DISPLAY is unset'$DISPLAY and $WAYLAND_DISPLAY are unsetTF_BUILDzmacosx backend fails on Azurer=   r   ZGtkr@   z.0zno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849GITHUB_ACTION   r@      %Tk version mismatch on Azure macOS CIBACKEND_DEPS,)r   r   r   display_is_validZxdisplay_is_validformatjoin
startswithr   r   getr<   ImportErrorZ
Repositoryget_defaultZenumerate_versionsappendpytestmarkskipxfailversion_info)Z_is_linux_and_display_invalidZ_is_linux_and_xdisplay_invalidZenvsdepsr   rQ   missingr<   Zavailable_gtk_versionsZgi_repor>   marksr   r   r   #_get_available_interactive_backends8   s   

	


""rj   c                   C   s   dd t  D S )Nc              
   S   s<   g | ]\}}t ji |g |d dd | D dqS )-c                 s   s"    | ]\}}| d | V  qdS )=Nr   )r3   kvr   r   r   	<genexpr>|   s     z@_get_testable_interactive_backends.<locals>.<listcomp>.<genexpr>)ri   id)rb   paramr\   items)r3   r   ri   r   r   r   r4   {   s
    
z6_get_testable_interactive_backends.<locals>.<listcomp>)rj   r   r   r   r   "_get_testable_interactive_backendsy   s   rs   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 )NZLA)   rv   ztest_la_icon.pngc                       s   e Zd Z ZdZdS )z5_test_toolbar_button_la_mode_icon.<locals>.CustomToolr    N)r)   r*   r+   imagedescriptionr   Ztmp_img_pathr   r   
CustomTool   s    rz   testgroup)tempfileTemporaryDirectoryr   newr   pathr\   saver   canvasmanagertoolmanagertoolbarZadd_tool)figtempdirZimgrz   r   r   r   ry   r   !_test_toolbar_button_la_mode_icon   s   



"r   c                     sJ  dd l } dd l}dd l}dd l}dd l}dd l ddlm ddlm}  j	
ddd  j	
||jd  j	d  }|dr|d	s }| |d
krs|t  jd
dd W d    n1 snw   Y   fdd}| jdr||d d d  |d  j|dd  \}}	t|jjd| ksJ |jj dksJ  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" |
* |* ks#J d S )$Nr   pyplot)KeyEventFr!   zwebagg.open_in_browserzwebagg.port_retriesbackendr:   )r=   ZwebrC   Tforcec                    s>    j | dd  }t|jjd|  ksJ d d S )NTr   matplotlib.backends.backend_all)usefiguretyper   r*   close)Zalt_backendr   )mplpltr   r   check_alt_backend   s   
z1_test_interactive_impl.<locals>.check_alt_backendr9   r;   svgr   zFigure 1r   r   rT   r@   g      ?g       @Zkey_press_eventq
draw_eventc                          S Nstart)eventtimerr   r   <lambda>       z(_test_interactive_impl.<locals>.<lambda>close_eventZpng)r[         ?)+importlib.utiliojsonr   rb   
matplotlibr   Zmatplotlib.backend_basesr   rcParamsupdateloadsargvlowerr$   r]   r   r   raisesr_   r   rI   rJ   subplotsr   r   r*   r   Zget_window_titler   plotr   Zdraw_rubberband	new_timeradd_callbackZ_processmpl_connectprintBytesIOZsavefigshowpausegetvalue)rH   r   r   r   rb   r   r   r   r   axresultZresult_afterr   )r   r   r   r   _test_interactive_impl   sZ   


r   r   r   Ztoolbar2r   r@   )Zrerunsc              
   C   s   | d dkr|dkrt d | d dkrt d | d dkr)|dkr)t d ztttd	|it| d
}W n tjyU } zt 	dt
|j  W Y d }~nd }~ww |jddks`J d S )Nr   rF   r   z*toolmanager is not implemented for macosx.rD   2wx backend is deprecated; tests failed on appveyorrE   zMTemporarily deactivated: show() changes figure height and thus fails the testr   timeoutZ	extra_envz,Subprocess failed to test intended behavior

CloseEventr!   )rb   rd   _run_helperr   r   dumps_test_timeoutr   CalledProcessErrorfailstrstderrr   count)r   r   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   )ThreadPoolExecutorr   Fr!   r   r   )r!   r@      r   r   rD   )concurrent.futuresr   r   r   r   r   r   r   Zsubmitr   r   r   r   r   Zdrawr   r   r]   flush_events)r   r   r   r   r   futurer   r   r   _test_thread_impl  s&   

r   r   r;   )r   rD   rF   )parsez10.16T)r   strictr1   r8   rC   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929)rQ   r   rO   rS   rR   rT   rU   rW   c                 C   s&   t tt| d}|jddksJ d S )Nr   r   r!   )r   r   r   r   r   r   r   r   r   r   test_interactive_thread_safetyK  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   r      )	r   matplotlib.pyplotr   r   _get
isinstancer   Z_backend_modr   )r   r   Zbkr   r   r   &_impl_test_lazy_auto_backend_selectionR  s   
r   c                   C      t ttd d S Nr   )r   r   r   r   r   r   r    test_lazy_auto_backend_selection`  s   
r   c                  C   L   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 S d S Nr   r5   pyside6r7   pyside2)Z"matplotlib.backends.backend_qt5aggr   modulesr   r   r   r   r   _implqt5agge  
    r   c                  C   r   r   )Z$matplotlib.backends.backend_qt5cairor   r   r   r   r   r   
_implcairon  r   r   c                  C   r   r   )Zmatplotlib.backends.backend_qt5r   r   r   r   r   r   	_implcorew  r   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   rG   rK   r   r   r   r4     
    z-test_qt5backends_uses_qt5.<locals>.<listcomp>)r7   r   c                 S   r   r   rG   rK   r   r   r   r4     r   )r5   r   r   need both QT6 and QT5 bindingsr   Zpycairo)lenrb   rd   r   r   r   rH   rI   rJ   r   r   )qt5_bindingsqt6_bindingsr   r   r   test_qt5backends_uses_qt5  s   
r   c                  C   s   dd l } d | jd< d | jd< d | jd< d | jd< dd lm} tjtdd |d W d    n1 s5w   Y  tjtd	d |d
 W d    d S 1 sRw   Y  d S )Nr   r5   r7   r8   r6   z(Failed to import any of the following Qt)matchr/   z^(?:(?!(PySide6|PyQt6)).)*$Zqt5agg)r   r   r   r   rb   r   r_   switch_backend)r   r   r   r   r   _impl_missing  s   



"r   c                   C   r   r   )r   r   r   r   r   r   r   test_qt_missing  s   r   c            
      C   s   dd l } dd l}dd l}|j\}}}| | d | | d}dd l}| | d}|dg}	|jddtd |j	j
  d S )Nr   z.QtCorez
.QtWidgetszmpl testingerrorz.*Mixing Qt major.*)messagecategory)rH   r   warningsr   import_moduleZmatplotlib.backends.backend_qtZQApplicationfilterwarningsUserWarningbackendsZ
backend_qtZ_create_qApp)
rH   r   r   _Zhost_bindingZmpl_bindingZmpl_binding_qwidgetsr   Zhost_qwidgetsZ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jd d tjdgdV  d S | D ]}|D ]}||g||gfE d H  q1q-d S )	Nc                 S   r   r   rG   rK   r   r   r   r4     r   z%qt5_and_qt6_pairs.<locals>.<listcomp>)r7   r8   c                 S   r   r   rG   rK   r   r   r   r4     r   )r5   r6   r   r   )ri   )r   rb   rq   rc   rd   )r   r   Zqt5Zqt6r   r   r   qt5_and_qt6_pairs  s"   r  r.   rN   rP   z	host, mplc              
   C   sX   z
t t| |td}W n tjy  } z	|j}W Y d }~nd }~ww |j}d|v s*J d S )Nr   z2Mixing Qt major versions may not work as expected.)r   r   r   r   r   r   )hostr   r   exr   r   r   r   test_cross_Qt_imports  s   
r  z,this test fails an azure for unknown reasonsr   z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
  dtjd  }t t }zQ	 z|  }|d u s?J tj|}W n tjjy_   t |kr[t d nY q3Y nw q4|  | tj | jtddksuJ W |  d u r|   d S d S |  d u r|   w w )Ntornado-cz
_test_interactive_impl()z{}Zwebaggr
   r   r   zhttp://zwebagg.address:zwebagg.portTz'Failed to connect to the webagg server.r   r   )rb   Zimportorskipr   Popenr   
executableinspect	getsourcer   r   r   r   r   timeperf_counterr   pollurllibrequesturlopenr   URLErrorr   r   send_signalsignalSIGINTwaitkill)r   urlr   retcodeconnr   r   r   test_webagg  sD   

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   r!   rY   DISPLAYWAYLAND_DISPLAYr:   )r   r   r   splitr   popr   r   r   get_backendrH   r   r   r_   exit)r   r   r   rg   rL   r   r   r   r   _lazy_headless  s*   

r#  zthis a linux-only testc              	   C   s0   t t| d| dti | dddd}d S )Nr   rX   r    )r  r  r   )r   r#  r   r   r   r   r   r   test_lazy_linux_headless  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 ]$}|j| |ddgddg\}|| |j|j
 |j  qB| d d S )Nr   r!   rT   T)ZanimatedF)blockg333333?r   
   皙?)r   r   r   r   r   r   r   r   r   Zcopy_from_bboxZbboxZdraw_artistZblitrangeZrestore_regionr   )r   r   r   lnbgjr   r   r   _test_number_of_draws_script)  s    


r,  	gtk3cairoz#gtk3cairo does not support blittingZ	gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingrA   c                 C   s:   t tt| d}|jd}d|  k rdk sJ  J d S )Nr   Z	DrawEventr   r   )r   r,  r   r   r   )r   r   Zndrawsr   r   r   test_blitting_eventsj  s
    r.  c                  C   s   ddl m}  dd lm} d}| }|| |jd}|  }|| |	  || |
  |jdks9J |  d|_|	  || |jdksPJ |	  || |jdks`J |d d S )	Nr   )Mockr   r'  r!   TrT   r   )Zunittest.mockr/  r   r   r   r   r   r   r   r   stopZ
call_countZ
reset_mocksingle_shotr   )r/  r   Z
pause_timer   r   Zmockr   r   r   _impl_test_interactive_timersx  s*   




r2  c                 C   sH   | d dkrt drtd | d dkrtd ttt| d d S )Nr   r-  CIz)gtk3cairo timers do not work in remote CIrD   r   r   )r   getenvrb   rd   r   r2  r   r  r   r   r   test_interactive_timers  s   


r5  c                    s   dd l dd lm} dd l dd l}||   fdd}t||}|d|| }|j	
ddd  |j	
dfdd z
|di | W d S  ty[   td	d
d Y d S w )Nr   c                     s@   j dkrdd l} | dd d S dd l}   |j d S )Nr   r   )r   win32apiZGenerateConsoleCtrlEventr  r  getpidr  )r6  r  )r   r   r   r   interrupter  s
   
z&_test_sigint_impl.<locals>.interrupterr!   r   c                  W      t dddS NDRAWTflushr   r   r   r   r   r         z#_test_sigint_impl.<locals>.<lambda>c                     r   r   r   r?  r   r   r   r     r   SUCCESSTr<  r   )r   r   r   r   	threadingr   getattrTimerr   r   r   KeyboardInterruptr   )r   target_namer   r   rB  r8  targetr   r   )r   r   r   r   _test_sigint_impl  s,   


rH  ztarget, kwargsr   r%  r   intervalr&  c                 C   s   |  d}|dstd ttjdtt	d|d|d|d g}z|
d |jtd	\}}W n tyG   |  | \}} w d
|v sNJ d S )Nr   ZqtrF   -SIGINT currently only tested on qt and macosxr  z
_test_sigint_impl(rM   )r;  r   rA  )r^   r]   rb   rd   r   r   r
  r  r  rH  r(   communicater   	Exceptionr  )r   rG  r   r   r   r   r   r   r   r   test_sigint  s&   



rO  c                    s   dd l }dd lm} ||  t||}| }|jddd  |jjdd d _	 j
tddd	  fd
d}| |j| z
|di | W d S  tyZ   tddd	 Y d S w )Nr   r   c                  W   r9  r:  r>  r?  r   r   r   r     r@  z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r!   )rI  TSIGUSR1r<  c                    s       d S r   r   )signumframer   r   r   custom_signal_handler  s   zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerrA  r   )r  r   r   r   rC  r   r   r   r   r1  r   r   rP  rE  )r   rF  r   r  r   rG  r   rS  r   r   r   %_test_other_signal_before_sigint_impl  s    

rT  z,No other signal available to send on Windowsc                 C   s  |  d}|dstd |dkr|jtjjdd tj	dkr2|dkr2|jtjjd	d t
tjd
ttd|d|d|d g}z$|d t|jtj |d t|jtj |jtd\}}W n ty   |  | \}} w t| d|v sJ d S )Nr   rJ  rK  rF   zmacosx backend is buggyrP   rR   r   zQt backend is buggy on macOSr  z'
_test_other_signal_before_sigint_impl(rM   rL  r;  rP  r   rA  )r^   r]   rb   rd   nodeZ
add_markerrc   re   r   r   r   r
  r  r  rT  r(   r   r  pidr  rP  r  rM  r   rN  r   )r   rG  r   r  r   r   r   r   r   r   r   test_other_signal_before_sigint  sF   




rW  )R	functoolsrH   r   r  r   r   r   r  r   r   r}   r  urllib.requestr  ZPILr   rb   r   r   r   Zmatplotlib.backend_toolsr   Zmatplotlib.testingr   r   r   r	  r   	lru_cacherj   rs   r   r   r   rc   ZparametrizeZflakyr   r   Z_thread_safe_backendsrq   valuesr   ri   ra   re   r   Zpackaging.versionr   mac_verTimeoutExpiredr^   python_implementationr   rf   r   r   r   r   r   r   r   r   r   r   r  ZskipifrZ   r  r  r#  r$  r,  Z_blit_backendsrd   r.  r2  r5  rH  rO  rT  rW  r   r   r   r   <module>   s"   
@S

 
			!	)







 
	!



