
    P/Ph\q              	       v   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ej                  Ze j        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/m0Z0  ej1                    d          Z1e1rQ e0e1           e0d          k     r9e(j+        ,                    ej"        -                    ej2        d                     e(j)        d          3                    d          d k    r:e(j+        ,                    ej"        -                    ej.                             fe*d!k    rI ej4                    d"k    r6e(j+        ,                    ej"        -                    d#d$                     e*d!k    rbd%ej5        v s	d&ej5        v rPe	j        d'k    rEe	j6        dd(         d)k     r2e(j+        ,                    ej"        -                    d*                     ej"        #                    de'          ej"        $                    d          d+                         Z7d, Z8d- Z9d. Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?d4 Z@d5 ZAej"        B                    e	j        d6k    o ejC                     d78          ej"        #                    d9g  eA                      d:                         ZDej"        B                    d%ej5        v d;8          ej"        B                    e	j        d<k    d=8          d>                         ZEd? ZFej"        B                    e	j        d6k    d@8          ej"        #                    d e                      dA                         ZGdB ZH e            ZIeID ])Z(e(j)        d          d         Z*e*dCk    r3e(j+        ,                    ej"        J                    dD                     Oe*dEk    r3e(j+        ,                    ej"        J                    dF                     e*dk    r3e(j+        ,                    ej"        J                    dG                     e*d!k    rbd%ej5        v s	d&ej5        v rPe	j        d'k    rEe	j6        dd(         d)k     r2e(j+        ,                    ej"        -                    d*                     +ej"        #                    deI          ej"        $                    dH          dI                         ZKdJ ZLej"        #                    d e                      dK             ZMdL ZNej"        #                    d e                      ej"        #                    dMdNdOdifdPdQdRifg          dS                         ZOdT ZPej"        B                    e	j        d<k    dU8          ej"        #                    d e                      ej"        #                    dMdNdOdifdPdQdRifg          dV                                     ZQdS )W    N)Image)_c_internal_utils)ToolToggleBase)subprocess_run_helperis_ci_environmentc                   (     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      j/var/www/html/test/jupyter/venv/lib/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            	         t           j        dk    ot          j                     } t           j        dk    ot          j                     }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 ]f\  }}d }d |D             }|r)d                    d                    |                    }n|r*|d         d	k    s|d                             d
          rd}n| rd}n|d         dk    r"t          j	        
                    d          rd}nx|d                             d          r]	 dd l}|j                                        }|                    d          }	n# t          $ r g }	Y nw xY w|d         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#                     |                    i |d$d%                    |          i|f           h|S )&Nlinuxc                     g | ]
}|gd |dfS )qtaggr   QT_API .0qt_apis     r"   
<listcomp>z7_get_available_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qtcairor7   r9   r:   s     r"   r=   z7_get_available_interactive_backends.<locals>.<listcomp>C   sC     F F F $'6::< F F Fr#   c                 2    g | ]}d D ]}ddgdd| | ifS ))aggcairorG   gir   gtkr9   )r;   versionrenderers      r"   r=   z7_get_available_interactive_backends.<locals>.<listcomp>F   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 r9   	importlibutil	find_specr;   deps     r"   r=   z7_get_available_interactive_backends.<locals>.<listcomp>N   s-    LLL3in.F.Fs.K.KL3LLLr#   z{} cannot be imported, z$DISPLAY is unset'$DISPLAY and $WAYLAND_DISPLAY are unsetTF_BUILDzmacosx backend fails on AzurerI   r   GtkrL   z.0zno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849GITHUB_ACTION   rL      %Tk version mismatch on Azure macOS CIBACKEND_DEPS,)r   r   r   display_is_validxdisplay_is_validformatjoin
startswithr   r   getrH   
Repositoryget_defaultenumerate_versionsImportErrorappendpytestmarkskipxfailversion_info)_is_linux_and_display_invalid_is_linux_and_xdisplay_invalidenvsdepsr   r_   missingrH   gi_repoavailable_gtk_versionsrJ   markss               r"   #_get_available_interactive_backendsr   8   s   %(\W%< &N):)K)M)M%M "&)lg&= 'P*;*M*O*O&O #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 6F 6F	c LL$LLL 	2,33DIIg4F4FGGFF+ 	2L!W,,|$//55 - )FF* 	2>FF(**rz~~j/I/I*4FF))%00 	2	K			 -3355)0)C)CE)J)J&&  , , , *,&&&	, ,'*G~~~%;;;1 	SLL))1SS1S1S61S1S)TTUUUU))$// 		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<<^SXXd^^<<eDEEEEKs   E::F	F	c                  2    d t                      D             S )Nc                     g | ]O\  }}t          j        i |g |d                     d |                                D                                 PS )-c              3   *   K   | ]\  }}| d | V  dS )=Nr9   )r;   kvs      r"   	<genexpr>z@_get_testable_interactive_backends.<locals>.<listcomp>.<genexpr>|   s0      $H$HDAqZZAZZ$H$H$H$H$H$Hr#   )r   id)rs   paramrk   items)r;   r   r   s      r"   r=   z6_get_testable_interactive_backends.<locals>.<listcomp>{   sx     E E EU LC%HH$H$HCIIKK$H$H$HHHJ J J E E Er#   )r   r9   r#   r"   "_get_testable_interactive_backendsr   y   s/    E EACCE E E Er#   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/   r0   imagedescription)tmp_img_paths   r"   
CustomToolr      s         EKKKr#   r   testgroup)tempfileTemporaryDirectoryr   newr   pathrk   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                                           \  }}	t1          |j                  j        d| k    sJ |j        j                                        dk    sJ j	        d         dk    rt;          |           |	                    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tJ                     |&                                }
|'                    |
d            (                                 )                    d!           |&                                }|'                    |d            |
*                                |*                                k    sJ d S )"Nr   pyplot)KeyEventFr&   zwebagg.open_in_browserzwebagg.port_retriesbackendrF   )rI   webrO   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#   rC   rG   svgr   zFigure 1r   r   rb   rL   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)rj         ?)+importlib.utiliojsonr   rs   
matplotlibr   matplotlib.backend_basesr   rcParamsupdateloadsargvlowerr)   rl   r   r   raisesrq   r   rV   rW   subplotsr   r   r/   r   get_window_titler   plotr   draw_rubberband	new_timeradd_callback_processmpl_connectprintBytesIOsavefigshowpausegetvalue)rU   r   r   r   rs   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 !jjll		# 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+++?? 5 5 7 7777777s   D$$D(+D(r   r   toolbar2r   rL   )rerunsc                    | d         dk    r|dk    rt          j        d           | d         dk    rt          j        d           | d         dk    r|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   rR   r   z*toolmanager is not implemented for macosx.rP   2wx backend is deprecated; tests failed on appveyorrQ   zMTemporarily deactivated: show() changes figure height and thus fails the testr   timeout	extra_envz,Subprocess failed to test intended behavior

CloseEventr&   )rs   ru   _run_helperr   r   dumps_test_timeoutr   CalledProcessErrorfailstrstderrr   count)r   r   procerrs       r"   test_interactive_backendr      sG    <H$$m##KDEEE
<D  HIII
<G##=(@(@ . 	/ 	/ 	/
"J	7+,,!	
 
 
 (   ;#*oo	 	 	 	 	 	 	 	 ;\**a//////s   .1B   C"/)CC"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&   rL      r   r   rP   )concurrent.futuresr   r   r   r   r   r   r   submitr   r   r   r   r   drawr   r   rl   flush_events)r   r   r   r   r   futures         r"   _test_thread_implr    s]   555555((((((L"'      llnnGCIIcNNN!!(()))<<F
MMOOOJ=%000!!((99FIIcNNN
MMOOOIIKKK
|I$$&&11$77 "
!!!!!" "r#   r   rG   )r   rP   rR   )parsez10.16T)r   strictr8   rA   rO   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929)r_   r  r\   ra   r`   rb   rc   re   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	  K  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
isinstancer   _backend_modr   )r   r   bks      r"   &_impl_test_lazy_auto_backend_selectionr  R  s    ######			!	!)	,	,B"c"""""###HHQKKK'''			!	!)	,	,Bb#r#   c                  <    t          t          t                     d S Nr   )r   r  r   r9   r#   r"    test_lazy_auto_backend_selectionr  `  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  e  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   n  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#  w  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   rT   rX   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   rT   rX   s     r"   r=   z-test_qt5backends_uses_qt5.<locals>.<listcomp>  r&  r#   )r>   r  r   need both QT6 and QT5 bindingsr  pycairo)lenrs   ru   r   r  r   rU   rV   rW   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@   rA   r?   z(Failed to import any of the following Qt)matchr6   z^(?:(?!(PySide6|PyQt6)).)*$qt5agg)r   r  r  r   rs   r   rq   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   r9   r#   r"   test_qt_missingr4    s    }555555r#   c                  P   dd l } dd l}dd l}|j        \  }}} | j        | d            | j        | d          }dd l} | j        | d          }|                    dg          }	|                    ddt                     |j	        j
                                         d S )Nr   z.QtCorez
.QtWidgetszmpl testingerrorz.*Mixing Qt major.*)messagecategory)rU   r   warningsr   import_modulematplotlib.backends.backend_qtQApplicationfilterwarningsUserWarningbackends
backend_qt_create_qApp)
rU   r   r9  _host_bindingmpl_bindingmpl_binding_qwidgetsr   host_qwidgetshost_apps
             r"   _impl_test_cross_Qt_importsrH    s    JJJOOO#&8 A|[I{333444292k3M3M3MNN))))+I+|,G,G,GHHM))=/::HG-C%0  2 2 2"//11111r#   c               #   (  K   d dD             } d dD             }t          |           dk    st          |          dk    r9t          j        d d t          j                            d          g          V  d S | D ]}|D ]}||g||gfE d {V  d S )Nc                 P    g | ]#}t           j                            |          !|$S r   rT   rX   s     r"   r=   z%qt5_and_qt6_pairs.<locals>.<listcomp>  r&  r#   )r@   rA   c                 P    g | ]#}t           j                            |          !|$S r   rT   rX   s     r"   r=   z%qt5_and_qt6_pairs.<locals>.<listcomp>  r&  r#   )r>   r?   r   r(  )r   )r*  rs   r   rt   ru   )r+  r,  qt5qt6s       r"   qt5_and_qt6_pairsrN    s      +  L +  L <A\!2!2a!7!7l4"(+"2"23S"T"T!UW W W 	W 	W 	W 0 0 	0 	0Cc
S#J/////////	00 0r#   r4   r[   r^   z	host, mplc                     	 t          t          | |t                    }|j        }n## t          j        $ r}|j        }Y d }~nd }~ww xY wd|v sJ d S )Nr  z2Mixing Qt major versions may not work as expected.)r   rH  r   r   r   r   )hostr   r   r   exs        r"   test_cross_Qt_importsrR    s    
	6c#02 2 2  (    	 @6IIIIIIs   ' AAAz,this test fails an azure for unknown reasonsr   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   )rs   importorskipr   Popenr   
executableinspect	getsourcer   r   r   r   r   timeperf_counterr   pollurllibrequesturlopenr6  URLErrorr   r   send_signalsignalSIGINTwaitkill)r   urlr   retcodeconns        r"   test_webaggrm    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&   rg   DISPLAYWAYLAND_DISPLAYrF   )r   r   r   splitr   popr  r  r   get_backendrU   r:  r1  exitrq   )r   r   r   r{   rY   r   s         r"   _lazy_headlessru    sh   IIIJJJHQRRLMGT::c??D JNN9d###JNN$d+++ & &#+%%%%% $#####??%%%% & &#+%%%%%  " "$$$ck!!!!!7### 	    s   C2 2
D ?D zthis a linux-only testc           
          t          t          |                     d          |                     d          t          i | ddd          }d S )Nr   rf   r%   )ro  rp  r   )r   ru  rr  r   r  s     r"   test_lazy_linux_headlessrw    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&   rb   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 blittingrM   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  j  sX     $msL L LD [{++Fv>>>>>>>>>>>>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   )MockCIrb   r   r|  r&   Tr   )r   unittest.mockr  r  r   getenvr   r   r   r   r   r   stop
call_countsingle_shotr   )r   r  r   
pause_timer   r   mocks          r"   _impl_test_interactive_timersr  x  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 CIrP   r   r   )r   r  rs   ru   r   r  r   rW  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GenerateConsoleCtrlEventrf  ri  getpidrg  )r  rf  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  r9   )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   rz  r   intervalr{  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   qtrR   -SIGINT currently only tested on qt and macosxrU  z
_test_sigint_impl(rZ   )r  r  r  )rm   rl   rs   ru   r	   r   r[  r\  r]  r  r-   communicater   	Exceptionri  )r   r  r    r   r   r   rB  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  r9   )rf  r  r   r1  r  r   r   r   r   r  r   r   r  r  )	r   r  r    rf  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          j	        dk    r>|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:# t0          $ r- |                                 |                                \  }} w xY wt3          |           d|v sJ d S )Nr   r  r  rR   zmacosx backend is buggyr^   r`   r   zQt backend is buggy on macOSrU  z'
_test_other_signal_before_sigint_impl(rZ   r  r  r  r  r  )rm   rl   rs   ru   node
add_markerrt   rv   r   r   r	   r[  r\  r]  r  r-   r   ri  pidrf  r  rg  r  r   r  r   )r   r  r    rb  r   r   r   rB  s           r"   test_other_signal_before_sigintr    s    ggl##G.// ECDDD( 1 19R 1 S STTT
|xFf$4$4
 	K%CDD	F 	F 	F			@	A	A
4
4 
4"
4 
4(.
4 
4 
4
4	56 6D
	f
&.)))i   
&-((($$]$;;	   		$$&&	 
&MMMs   BF 7G)R	functoolsrU   r   r\  r   r   r   rf  r   r   r   r^  urllib.requestra  PILr   rs   r   r   r   matplotlib.backend_toolsr   matplotlib.testingr   r   r   rZ  r	   	lru_cacher   r   r   r   r   rt   parametrizeflakyr   r  _thread_safe_backendsr   valuesr   r   rr   rv   r   packaging.versionr  mac_verTimeoutExpiredrm   python_implementationr   rw   r	  r  r  r  r   r#  r-  r2  r4  rH  rN  skipifrh   rR  rm  ru  rw  r  _blit_backendsru   r  r  r  r  r  r  r  r9   r#   r"   <module>r     sC
                 				       



                  ( ( ( ( ( ( 3 3 3 3 3 3 V V V V V V V V    **   > = = =@E E E )(**2* * *.P8 P8 P8f  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2 2 2$0 0 0& LGH$F$5$F$H$H H4  6 6 &<(9(9(;(;&<==J J >=6 6J 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/     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#   