
    (?es              	       x   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  G d dej                  Zd Zd	 Z e            rd
ndZd Zd Zej                             d e                      ej                             dddg          ej        !                    d          d                                     Z"d Z# e            Z$e$D ]Z%e%j&        d          d         Z'de'v r9e%j(        )                    ej        *                    ej+                             Se'dk    r9e%j(        )                    ej        *                    ej+                             e'dk    rpd dl,m-Z-  ej.                    d          Z.e.rQ e-e.           e-d          k     r9e%j(        )                    ej        *                    ej/        d                     e%j&        d          0                    d          d k    r:e%j(        )                    ej        *                    ej+                             fe'd!k    rI ej1                    d"k    r6e%j(        )                    ej        *                    d#d$                     e'd!k    rbd%ej2        v s	d&ej2        v rPej        d'k    rEej3        dd(         d)k     r2e%j(        )                    ej        *                    d*                     ej                             de$          ej        !                    d          d+                         Z4d, Z5d- Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z<d4 Z=d5 Z>ej        ?                    d%ej2        v d67          ej        ?                    ej        d8k    d97          d:                         Z@d; ZAej        ?                    ej        d<k    d=7          ej                             d e                      d>                         ZBd? ZC e            ZDeDD ])Z%e%j&        d          d         Z'e'd@k    r3e%j(        )                    ej        E                    dA                     Oe'dBk    r3e%j(        )                    ej        E                    dC                     e'dk    r3e%j(        )                    ej        E                    dD                     e'd!k    rbd%ej2        v s	d&ej2        v rPej        d'k    rEej3        dd(         d)k     r2e%j(        )                    ej        *                    d*                     +ej                             deD          ej        !                    dE          dF                         ZFdG ZGej        ?                    ej        d8k    dH7          ej                             d e                      ej                             dIdJdKg          dL                                     ZHdM ZIej                             d e                      dN             ZJdO ZKej                             d e                      ej                             dPdQdRdifdSdTdUifg          dV                         ZLdW ZMej        ?                    ej        d8k    dX7          ej                             d e                      ej                             dPdQdRdifdSdTdUifg          dY                                     ZNdS )Z    N)Image)_c_internal_utils)ToolToggleBase)subprocess_run_helperc                   (     e Zd ZdZ fdZd Z xZS )_WaitForStringPopenzL
    A Popen that passes flags that allow triggering KeyboardInterrupt.
    c                     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creationflagsAgg0
MPLBACKENDSOURCE_DATE_EPOCHT)envstdoutuniversal_newlines)	sysplatform
subprocessCREATE_NEW_CONSOLEsuper__init__osenvironPIPE)selfargskwargs	__class__s      Jlib/python3.11/site-packages/matplotlib/tests/test_backends_interactive.pyr   z_WaitForStringPopen.__init__   s}    <7""&0&CF?#	=	= N2:MUMMM?t		= 	= 	= 	= 	= 	= 	=    c                     d}	 | j                             d          }|st          d|          ||z  }|                    |          rdS K)z%Read until the terminator is reached. T   z)Subprocess died before emitting expected N)r   readRuntimeErrorendswith)r   
terminatorbufcs       r!   wait_forz_WaitForStringPopen.wait_for&   sq    	  ##A P"N
NNP P P1HC||J'' 	r"   )__name__
__module____qualname____doc__r   r,   __classcell__)r    s   @r!   r   r      sQ         = = = = =
 
 
 
 
 
 
r"   r   c            
      \   g } g 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 ]e\  }}d }d |D             }t           j        dk    rt          j                    sd}n|r)d                    d                    |                    }n|d         dk    r"t          j                            d          rd}nb|d         	                    d          rGdd l
}|d         d         }|j                                        }| d|                    d          vrd}g }|r:|                    t          j                            d| d|                      n|d         	                    d	          rDt           j        dk    r4|                    t          j                            d                     n|d         dk    rwdt          j        v sdt          j        v r[t           j        dk    rKt           j        d d          d!k     r3|                    t          j                            d"                     |                     t          j        i |d#d$                    |          i|t+          |          %                     g| S )&Nc                     g | ]
}|gd |dfS )qtaggr   QT_API .0qt_apis     r!   
<listcomp>z6_get_testable_interactive_backends.<locals>.<listcomp>:   s@     F F F x%88: F F Fr"   )PyQt6PySide6PyQt5PySide2c                      g | ]}|d gd|dfS )	cairocffiqtcairor5   r7   r8   s     r!   r;   z6_get_testable_interactive_backends.<locals>.<listcomp>=   sC     F F F $'6::< F F Fr"   c                 2    g | ]}d D ]}ddgdd| | ifS ))aggcairorE   gir   gtkr7   )r9   versionrenderers      r!   r;   z6_get_testable_interactive_backends.<locals>.<listcomp>@   sb     F F F4DF F(0 /HW/Hh/H/H IJ F F F Fr"   )      tkinterr   tkaggwxwxaggzmatplotlib.backends._macosxmacosxc                 P    g | ]#}t           j                            |          !|$S r7   	importlibutil	find_specr9   deps     r!   r;   z6_get_testable_interactive_backends.<locals>.<listcomp>H   s-    LLL3in.F.Fs.K.KL3LLLr"   linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be imported, TF_BUILDzmacosx backend fails on AzurerG   r   rJ   z.0Gtkzno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849GITHUB_ACTION   rJ      %Tk version mismatch on Azure macOS CIBACKEND_DEPS,)marksid)r   r   r   display_is_validformatjoinr   r   get
startswithrF   
Repositoryget_defaultenumerate_versionsappendpytestmarkskipxfailversion_infoparamstr)	envsdepsr   r]   missingrF   rH   reporf   s	            r!   "_get_testable_interactive_backendsr|   7   sb   DF FDF F FF FDF F F	F F#F F F [<12 VlD)* VlG,- ,,|X.FG 0
 0
	c LL$LLLLG##%688 $>FF 		2,33DIIg4F4FGGFF(**rz~~j/I/I*4FF))%00 	2III,'*G=,,..D~~~T%<%<U%C%CCC1 	SLL))939999 * ; ; < < < <))$// 		SCLH4L4LLL**/*BBCCCC,7**RZ''?bj+H+Hlh&&rr"W,,LL!!)P!QQS S SL73777C  	
 	
 	
 	
 Kr"   c                  F    g d} | D ]}t          j        |          r dS dS )N)CICONTINUOUS_INTEGRATIONTRAVISCIRCLECIJENKINS	GITLAB_CIGITHUB_ACTIONSTEAMCITY_VERSIONTF)r   getenv)ci_environment_variablesenv_vars     r!   is_ci_environmentr   m   sJ    
  
  
  ,  9W 	44	 5r"   x      c                    t          j                    5 }t          j        dd          }t          j                            |d          |                                G fddt                    }| j	        j
        j        }| j	        j
        j        }|                    d|           |                    dd           d d d            d S # 1 swxY w Y   d S )NLA)   r   ztest_la_icon.pngc                       e Zd Z ZdZdS )5_test_toolbar_button_la_mode_icon.<locals>.CustomToolr$   N)r-   r.   r/   imagedescription)tmp_img_paths   r!   
CustomToolr      s         EKKKr"   r   testgroup)tempfileTemporaryDirectoryr   newr   pathrj   saver   canvasmanagertoolmanagertoolbaradd_tool)figtempdirimgr   r   r   r   s         @r!   !_test_toolbar_button_la_mode_iconr      s*    
	$	&	& *'ih''w||G-?@@	 	 	 	 	 	 	 	 	 	 j(4*$,VZ000)))* * * * * * * * * * * * * * * * * *s   B.CCCc                     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        |j        d                              j	        d                                         }|                    d          r|                    d	          s                                 |d
k    r? |j        t$                    5   j        d
d           d d d            n# 1 swxY w Y   fd}| j                            d          r ||d d         dz               |d            j        |d                                           \  }}	t/          |j                  j        d| k    sJ |j        j                                        dk    sJ j	        d         dk    rt9          |           |	                    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           |j        #                    dtH                     |%                                }
|&                    |
d            '                                 (                    d!           |%                                }|&                    |d            |                    d"          s7|j)        d#k    r.|
*                                |*                                k    sJ d S d S d S )$Nr   pyplot)KeyEventFr%   zwebagg.open_in_browserzwebagg.port_retriesbackendrD   )rG   webrM   Tforcec                      j         | d                                           }t          |j                  j        d|  k    sJ                     d           d S )NTr   matplotlib.backends.backend_all)usefiguretyper   r.   close)alt_backendr   mplplts     r!   check_alt_backendz1_test_interactive_impl.<locals>.check_alt_backend   sr    CGKt,,,,**,,C$$/@;@@A A A AIIer"   rA   rE   svgr   zFigure 1r   r   r`   rJ   g      ?g       @key_press_eventq
draw_eventc                 ,                                     S Nstart)eventtimers    r!   <lambda>z(_test_interactive_impl.<locals>.<lambda>   s    u{{}} r"   close_eventpng)ri         ?qt5r^   )+importlib.utiliojsonr   rq   
matplotlibr   matplotlib.backend_basesr   rcParamsupdateloadsargvlowerr(   rl   r   raisesImportErrorr   rT   rU   subplotsr   r   r.   r   get_window_titler   plotr   draw_rubberband	new_timeradd_callback_processmpl_connectprintBytesIOsavefigshowpauser   getvalue)rS   r   r   r   rq   r   r   r   r   axresultresult_afterr   r   r   s               @@@r!   _test_interactive_implr      s   IIIKKKJJJMMM((((((111111L"'     
 L

38A;//000l9%++--G !w'9'9.'I'I !

 g{++ - -t,,,,- - - - - - - - - - - - - - -	 	 	 	 	 	 >##K00 	6gcrclW4555%   CGG4    llnnGC
&*R*R*RRRRR:..00J>>>>
|I-//)#...GGQFQF
z ?
**4QA>>>J  $$E	xx 13:sCCLMMMJ<)D)D)D)DEEEJ=%000ZZ\\FKKuK%%%HHJJJ IIcNNN ::<<LKKUK+++e$$ <)A)A   L$9$9$;$;;;;;< <)A)A <;s   0DDDr   r   toolbar2r   rJ   )rerunsc                    | d         dk    r|dk    rt          j        d           | d         dk    rt          j        d           	 t          t          t	          j        d|i          t          |           }nE# t          j        $ r3}t          j	        d	t          |j                  z              Y d }~nd }~ww xY w|j                            d
          dk    sJ d S )Nr   rP   r   z*toolmanager is not implemented for macosx.rN   2wx backend is deprecated; tests failed on appveyorr   timeout	extra_envz,Subprocess failed to test intended behavior

CloseEventr%   )rq   rs   _run_helperr   r   dumps_test_timeoutr   CalledProcessErrorfailrw   stderrr   count)r   r   procerrs       r!   test_interactive_backendr      s    <H$$m##KDEEE
<D  HIII
"J	7+,,!	
 
 
 (   ;#*oo	 	 	 	 	 	 	 	 ;\**a//////s   1A: :B<	)B77B<c                     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%   rJ      r   r   WX)concurrent.futuresr   r   r   r   r   r   r   submitr   r   r   r   r   drawr   rl   flush_events)r   r   r   r   r   futures         r!   _test_thread_implr  	  sQ   555555((((((L"'      llnnGCIIcNNN!!(()))<<F
MMOOOJ=%000!!((99FIIcNNN
MMOOOIIKKK
|I))$// "
!!!!!" "r"   r   rE   )r   rN   rP   )parsez10.16T)r   strictr6   r?   rM   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929)r]   r  rZ   r_   r^   r`   ra   rc   c                 ~    t          t          t          |           }|j                            d          dk    sJ d S )Nr   r   r%   )r   r  r   r   r   r   r   s     r!   test_interactive_thread_safetyr  L  s@     (-3OOOD;\**a//////r"   c                  ,   dd l } dd lm} | j                            d          }t          |t                    rJ |j        J |                    d           |j        J | j                            d          }t          |t                    sJ d S )Nr   r      )	r   matplotlib.pyplotr   r   _get
isinstancerw   _backend_modr   )r   r   bks      r!   &_impl_test_lazy_auto_backend_selectionr  S  s    ######			!	!)	,	,B"c"""""###HHQKKK'''			!	!)	,	,Bb#r"   c                  <    t          t          t                     d S Nr   )r   r  r   r7   r"   r!    test_lazy_auto_backend_selectionr  a  s)    6%' ' ' ' ' 'r"   c                  n    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   r<   pyside6r>   pyside2)"matplotlib.backends.backend_qt5aggr   modulesr   r   s     r!   _implqt5aggr  f  sh    ----JJJ#+%%%%CK''''ck!!Y#+%=%=%=%=!!%=%=r"   c                  n    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 r  )$matplotlib.backends.backend_qt5cairor   r  r  s     r!   
_implcairor  o  sh    ////JJJ#+%%%%CK''''ck!!Y#+%=%=%=%=!!%=%=r"   c                  n    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 r  )matplotlib.backends.backend_qt5r   r  r  s     r!   	_implcorer"  x  sh    ****JJJ#+%%%%CK''''ck!!Y#+%=%=%=%=!!%=%=r"   c                     d dD             } d dD             }t          |           dk    st          |          dk    rt          j        d           t          t          t
                     t          j                            d          t          t          t
                     t          t          t
                     d S )	Nc                 P    g | ]#}t           j                            |          !|$S r   rR   rV   s     r!   r;   z-test_qt5backends_uses_qt5.<locals>.<listcomp>  8       >##C((4 	444r"   )r>   r  c                 P    g | ]#}t           j                            |          !|$S r   rR   rV   s     r!   r;   z-test_qt5backends_uses_qt5.<locals>.<listcomp>  r%  r"   )r<   r  r   need both QT6 and QT5 bindingsr  pycairo)lenrq   rs   r   r  r   rS   rT   rU   r  r"  )qt5_bindingsqt6_bindingss     r!   test_qt5backends_uses_qt5r,    s     +  L +  L <A\!2!2a!7!74555]3333~	**6J6666	=111111r"   c                     dd l } d | j        d<   d | j        d<   d | j        d<   d | j        d<   dd lm} t	          j        t          d          5  |                    d           d d d            n# 1 swxY w Y   t	          j        t          d	          5  |                    d
           d d d            d S # 1 swxY w Y   d S )Nr   r<   r>   r?   r=   z(Failed to import any of the following Qtmatchr4   z^(?:(?!(PySide6|PyQt6)).)*$qt5agg)r   r  r  r   rq   r   r   switch_backend)r   r   s     r!   _impl_missingr2    s\   JJJCKCK!CK	!CK	######	{*T	U	U	U $ $7###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
{*G	H	H	H % %8$$$% % % % % % % % % % % % % % % % % %s$   A00A47A4B99B= B=c                  <    t          t          t                     d S r  )r   r2  r   r7   r"   r!   test_qt_missingr4    s    }555555r"   c                  v   dd l } dd l}dd l}| j        \  }}} |j        | d            |j        | d          }dd l} |j        | d          }|                    dg          }	 |j        t          d          5  |j	        j
                                         d d d            d S # 1 swxY w Y   d S )Nr   z.QtCorez
.QtWidgetszmpl testingzMixing Qt majorr.  )r   rS   rq   r   import_modulematplotlib.backends.backend_qtQApplicationwarnsUserWarningbackends
backend_qt_create_qApp)
r   rS   rq   _host_bindingmpl_bindingmpl_binding_qwidgetsr   host_qwidgetshost_apps
             r!   _impl_test_cross_Qt_importsrD    s6   JJJMMM#&8 A|[I{333444292k3M3M3MNN))))+I+|,G,G,GHHM))=/::H	k):	;	;	; 6 6&335556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   B..B25B2c                     d dD             } d dD             }t          |           dk    st          |          dk    rt          j        d           | D ]{}|D ]v}||g||gfD ]k}	 t          t          g|R dt
          i # t          j        $ r<}|j        t          j
         k    rY d }~H|j        t          j         k    rY d }~c d }~ww xY ww|d S )Nc                 P    g | ]#}t           j                            |          !|$S r   rR   rV   s     r!   r;   z)test_cross_Qt_imports.<locals>.<listcomp>  r%  r"   )r>   r?   c                 P    g | ]#}t           j                            |          !|$S r   rR   rV   s     r!   r;   z)test_cross_Qt_imports.<locals>.<listcomp>  r%  r"   )r<   r=   r   r'  r   )r)  rq   rs   r   rD  r   r   r   
returncodesignalSIGSEGVSIGABRT)r*  r+  r   qt6pairexs         r!   test_cross_Qt_importsrO    s`    +  L +  L <A\!2!2a!7!74555   	 	Csc3Z0   ; 7!%7 7 7(57 7 7 7 "4 	 	 	 }77  6>/99 		 s$   &BC	C	+C	C	C	z,this test fails an azure for unknown reasonsr\   r
   zCannot send SIGINT on Windows.c                     t          j        d           t          j        t          j        dt          j        t                    dz   dgi t          j
        ddd          } d	t          j        d
          dt          j        d          }t          j                    t          z   }	 	 	 |                                 }|J t"          j                            |          }nI# t"          j        j        $ r1 t          j                    |k    rt          j        d           nY |Y nw xY w|                                 |                     t2          j                   |                     t                    dk    sJ 	 |                                 |                                  d S d S # |                                 |                                  w w xY w)Ntornado-cz
_test_interactive_impl()z{}webaggr   r   r   zhttp://zwebagg.address:zwebagg.portTz'Failed to connect to the webagg server.r  r   )rq   importorskipr   Popenr   
executableinspect	getsourcer   r   r   r   r   timeperf_counterr   pollurllibrequesturlopenerrorURLErrorr   r   send_signalrI  SIGINTwaitkill)r   urlr   retcodeconns        r!   test_webaggrj    s    	"""			1	2	2'
()-	/ MrzLLLL	N N ND
 SCL!12
R
RS\-5P
R
RC!!M1G	
))++~--c22<(   $&&00K IJJJJH KJ	 	

'''yyy//14444499;;IIKKKKK 499;;IIKKKK s2   (F, *7C" !F, "A D'"F, &D''AF, ,+Gc                     dd l } dd l}|j        dd          \  }}|                    d          }| j                            dd            | j                            dd            |D ]}||j        vsJ dd lm} |	                                dk    sJ |D ]}||j        vsJ |D ]!}t          j        |           ||j        v sJ "	 |                    |            |j        d           d S # t          $ r Y d S w xY w)Nr   r%   re   DISPLAYWAYLAND_DISPLAYrD   )r   r   r   splitr   popr  r  r   get_backendrS   r6  r1  exitr   )r   r   r   ry   rW   r   s         r!   _lazy_headlessrr    sh   IIIJJJHQRRLMGT::c??D JNN9d###JNN$d+++ & &#+%%%%% $#####??%%%% & &#+%%%%%  " "$$$ck!!!!!7### 	    s   C2 2
D ?D rX   zthis a linux-only testc           
          t          t          |                     d          |                     d          t          i | ddd          }d S )Nr   rd   r$   )rl  rm  r   )r   rr  ro  r   r  s     r!   test_lazy_linux_headlessrt    sT     sww~66?S?RB???	  DDDr"   c                     dd l m}  |                                 \  }}|                    ddgddgd          \  }|                     d           |                     d           |j                            d	t                     |j        	                    |j
                  }|                    |           |j                            |j
                   t          d
          D ]}|j                            |           |                    ddgddg          \  }|                    |           |j                            |j
                   |j                                         |                     d           d S )Nr   r%   r`   T)animatedF)blockg333333?r   
   皙?)r  r   r   r   r   r   r   r   r   copy_from_bboxbboxdraw_artistblitrangerestore_regionr   )r   r   r   lnbgjs         r!   _test_number_of_draws_scriptr  #  sd   ######llnnGC ''1a&1a&4'
0
0CB HH5HIIcNNNJ</// 
	"	"38	,	,BNN2JOOCH2YY " "
!!"%%% ggq!fq!f%%
r
!!!
!!!! IIcNNNNNr"   	gtk3cairoz#gtk3cairo does not support blitting	gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingrK   c                     t          t          t          |           }|j                            d          }d|cxk     rdk     sn J d S )Nr   	DrawEventr   r
  )r   r  r   r   r   )r   r   ndrawss      r!   test_blitting_eventsr  d  sX     $msL L LD [{++Fv>>>>>>>>>>>>r"   c                     dd l } dd l}dd l}ddlm} t          |j        d                   }|                                }t          d          D ]B}|	                                }|r|
                    |           |                    |           C|                                j        }|                                  t          d          D ]V}|	                                }|r|
                    |           |                    |           |                                  W|                                j        |z
  }	t          |	           d S )Nr   r   r%   r`   r
  )gcr   psutilr   r   floatr   Processr~  r   r   r   memory_inforsscollectr   )
r  r   r  r   tpr>  r   memgrowths
             r!   _test_figure_leakr  t  s5   IIIJJJMMM((((((chqkAA 1XX  jjll 	IIaLLL		#
--//
CJJLLL1XX  jjll 	IIaLLL		#


]]__ 3&F	&MMMMMr"   z0appveyor tests fail; gh-22988 suggests reworkingtime_mem)g        i )ry  ic                    t          j        dd           |\  }}| d         dk    rt          j        d           | d         dk    r8|j                            t           j                            d                     | d         d	k    rt          j        d
k    r|dz  }t          t          t          |          t          |           }t          |j                  }||k    sJ d S )Nr  zpsutil needed to run this testr\   r   rN   r   rP   zmacosx backend is leakyrM   r^   iا r   )rq   rV  rs   node
add_markerrr   rt   r   r   r   r  rw   r   intr   )r   r  r_  
pause_timeacceptable_memory_leakager   r  s          r!   test_figure_leak_20490r    s    
 )IJJJJ -5)J)
<D  HIII
<H$$ 1 19R 1 S STTT
<G##(@(@!Z/!3z??. . .F F.......r"   c                     dd l } ddlm} dd lm}  | j        d          rdnd}|                                }|                    |           |j        	                    d          } |            }|
                    |           |                                 |                    |           |                                 |j        dk    sJ d|_        d|_        |                                 |                    |           |j        dk    sJ |                                 |                    |           |j        dk    sJ |                    d	           d S )
Nr   )Mockr~   r`   r   ry  r%   Tr   )r   unittest.mockr  r  r   r   r   r   r   r   r   r   stop
call_countsingle_shotr   )r   r  r   r  r   r   mocks          r!   _impl_test_interactive_timersr    sl   
 III""""""######  bioo.3J
**,,CIIjJ  %%E466D	t	KKMMMIIj	JJLLL?Q DOE	KKMMMIIj?a 
KKMMMIIj?aIIer"   c                     | d         dk    r(t          j        d          rt          j        d           | d         dk    rt          j        d           t	          t
          t          |            d S )Nr   r  r~   z)gtk3cairo timers do not work in remote CIrN   r   r   )r   r   rq   rs   r   r  r   rT  s    r!   test_interactive_timersr    sz    
<K''BIdOO'?@@@
<D  HIII-%6 6 6 6 6 6r"   c                   	
 dd l 	dd lm} dd ldd l}|                    |            	fd}t          ||          }|                    d|          
|                                }|j	        
                    dd            |j	        
                    d
fd           	  |d
i | d S # t          $ r t          dd	           Y d S w xY w)Nr   c                      j         dk    rdd l} |                     dd           d S dd l} j         j                    |j                   d S )Nr
   r   )r   win32apiGenerateConsoleCtrlEventrI  rf  getpidrd  )r  rI  r   r   s     r!   interrupterz&_test_sigint_impl.<locals>.interrupter  sb    <7""OOO--a33333MMMBGIBIKK/////r"   r%   r   c                  $    t          dd          S NDRAWTflushr   r   s    r!   r   z#_test_sigint_impl.<locals>.<lambda>  s    eF$/// r"   c                  ,                                     S r   r   )r   r   s    r!   r   z#_test_sigint_impl.<locals>.<lambda>  s    ekkmm r"   SUCCESSTr  r7   )r   r  r   r   	threadingr1  getattrTimerr   r   r   KeyboardInterruptr   )r   target_namer   r   r  r  targetr   r   r   r   s           @@@r!   _test_sigint_implr    s>   JJJ######IIIw0 0 0 0 0 0 S+&&FOOA{++E
**,,CJ//   J####  % % % %it$$$$$$$%s   &B0 0CCztarget, kwargsr   rw  r   intervalrx  c                    |                      d          }|                    d          st          j        d           t	          t
          j        dt          j        t                    d|d|d|dz   g          }	 |
                    d           |                    t          	          \  }}n:# t          $ r- |                                 |                                \  }} w xY wd
|v sJ d S )Nr   qtrP   -SIGINT currently only tested on qt and macosxrR  z
_test_sigint_impl(rY   )r  r  r  )rk   rl   rq   rs   r   r   rX  rY  rZ  r  r,   communicater   	Exceptionrf  )r   r  r   r   r   r   r>  s          r!   test_sigintr    s    ggl##G.// ECDDD			,	-	-	D	D	DV	D	D	D	D	D
E	FG GDf$$]$;;	   		$$&&	 s    3B4 47C+c                    dd l }dd lm} |                    |            t	          ||          }|                                }|j                            dd            |j                            d          d_	        
                    t          dd           fd	} |j         |j        |           	  |di | d S # t          $ r t          d
d           Y d S w xY w)Nr   r   c                  $    t          dd          S r  r  r  s    r!   r   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>  s    uV47P7P7P r"   r%   )r  TSIGUSR1r  c                 0                                      d S r   r   )signumframer   s     r!   custom_signal_handlerzD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handler"  s    r"   r  r7   )rI  r  r   r1  r  r   r   r   r   r  r   r   r  r  )	r   r  r   rI  r   r  r   r  r   s	           @r!   %_test_other_signal_before_sigint_implr    s-   MMM######wS+&&F
**,,CJ<)P)PQQQJ  ! ,,EE	uit444    FM&."7888% % % %it$$$$$$$%s   <C C%$C%z,No other signal available to send on Windowsc                 @   |                      d          }|                    d          st          j        d           |dk    r8|j                            t          j                            d                     t          t          j
        dt          j        t                    d|d	|d	|d
z   g          }	 |                    d           t          j        |j        t$          j                   |                    d           t          j        |j        t$          j                   |                    t,                    \  }}n:# t.          $ r- |                                 |                                \  }} w xY wt1          |           d|v sJ d S )Nr   r  r  rP   zmacosx backend is buggyr\   rR  z'
_test_other_signal_before_sigint_impl(rY   r  r  r  r  r  )rk   rl   rq   rs   r  r  rr   rt   r   r   rX  rY  rZ  r  r,   r   rf  pidrI  r  rd  r  r   r  r   )r   r  r   r_  r   r   r   r>  s           r!   test_other_signal_before_sigintr  ,  s    ggl##G.// ECDDD( 1 19R 1 S STTT			@	A	A
4
4 
4"
4 
4(.
4 
4 
4
4	56 6D
	f
&.)))i   
&-((($$]$;;	   		$$&&	 
&MMMs   >BE 7F)OrS   r   rY  r   r   r   rI  r   r   r   r[  urllib.requestr^  PILr   rq   r   r   r   matplotlib.backend_toolsr   matplotlib.testingr   r   rW  r   r|   r   r   r   r   rr   parametrizeflakyr   r  _thread_safe_backendsrv   valuesr   rf   rp   rt   r   packaging.versionr  mac_verTimeoutExpiredrk   python_implementationr   ru   r  r  r  r  r  r"  r,  r2  r4  rD  rO  skipifrj  rr  rt  r  _blit_backendsrs   r  r  r  r  r  r  r  r  r  r7   r"   r!   <module>r     s6
             				       



                  ( ( ( ( ( ( 3 3 3 3 3 3 C C C C C C    **   >3 3 3l  , )(**2* * *.R< R< R<j  B B D DEEZ$?@@!0 0  A@ FE0(" " "< ;:<< "  H  HEl1ol+G' 	KZ%BCC	E 	E 	E 	E	DKZ%BCC	E 	E 	E 	E	H		++++++"("$$Q'  	0uuW~~g66K!!)B)- " / /0 0 0 
a		X	&	&)	3	3KZ%BCC	E 	E 	E 	E	G		 > > @ @I M MKK   	 	 	 	
 W

##"*'D'D
,(
"
"s'7';g'E'EKEFF	H 	H 	H  566!0 0  760
  ' ' '
> > >> > >> > >2 2 2"% % % 6 6 66 6 6"  > J"*,I  K KCLG+4TUU  VUK K<  B CLG+4LMM B B D DEE  FE NM& & &R 4355 
 
El1ol+G+KBCC	E 	E 	E 	E	K		KBCC	E 	E 	E 	E	DK;<<	> 	> 	> 	>
W

##"*'D'D
,(
"
"

2A2

(
(KEFF	
 	
 	

 //!   0/  > CLG+M  O O B B D DEE&68I%JKK/ / LK FEO O/.     F  B B D DEE6 6 FE6% % %B  B B D DEE)gt_z2,   	  FE
$% % %2 CLG+I  K K B B D DEE)gt_z2,   	  FEK K  r"   