
    ^j9u              	          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Zd dlm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	j4                        Ze j8                  d        Zd	 Z e       rd
ndZ e       rdnd Z d Z!d Z"ejF                  jI                  d e             ejF                  jI                  dddg      ejF                  jK                  e       d                      Z&d Z' e       Z(e(D ]E  Z)e)jT                  d    d   Z+de+v r@e)jX                  j[                  ejF                  j]                  e	j^                               Ze+dk(  r@e)jX                  j[                  ejF                  j]                  e	j^                               e+dk(  rqd dl0m1Z1  ejd                         d    Z2e2s e1e2       e1d      k  se)jX                  j[                  ejF                  j]                  e	jf                  d             e)jT                  d    ji                  d      d k(  rAe)jX                  j[                  ejF                  j]                  e	j^                               we+d!k(  rL ejj                         d"k7  r8e)jX                  j[                  ejF                  j]                  d#d$             e+d!k(  sd%ejl                  v sd&ejl                  v se
j                  d'k(  se
jn                  dd( d)k  se)jX                  j[                  ejF                  j]                  d*             H ejF                  jI                  de(      ejF                  jK                  e       d+               Z8d, Z9d- Z:d. Z;d/ Z<d0 Z=d1 Z>d2 Z?d3 Z@d4 ZAd5 ZBejF                  j                  e
j                  d6k(  xr  ej                          d78      ejF                  jI                  d9g  eB             d:               ZEejF                  j                  d%ejl                  v d;8      ejF                  j                  e
j                  d<k(  d=8      d>               ZFd? ZGejF                  j                  e
j                  d6k7  d@8      ejF                  jI                  d e             dA               ZHdB ZI e       ZJeJD ]>  Z)e)jT                  d    d   Z+e+dCk(  r5e)jX                  j[                  ejF                  j                  dD             Pe+dEk(  r5e)jX                  j[                  ejF                  j                  dF             e+dk(  r5e)jX                  j[                  ejF                  j                  dG             e+d!k(  sd%ejl                  v sd&ejl                  v se
j                  d'k(  se
jn                  dd( d)k  se)jX                  j[                  ejF                  j]                  d*             A ejF                  jI                  deJ      ejF                  jK                  e       dH               ZLdI ZMdJ ZNdK ZOejF                  jI                  d e             dL        ZPdM ZQejF                  jI                  d e             ejF                  jI                  dNdOdPdifdQdRdSifg      dT               ZRdU ZSejF                  j                  e
j                  d<k(  dV8      ejF                  jI                  d e             ejF                  jI                  dNdOdPdifdQdRdSifg      dW                      ZTy)X    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	        |   |i |i t        j                  dddt        j                  dd y )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      u/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/tests/test_backends_interactive.pyr   z_WaitForStringPopen.__init__   s[    <<7"&0&C&CF?#	=	= N2::MUM??t		=    c                     d}	 | j                   j                  d      }|st        d|      ||z  }|j                  |      r|S D)z%Read until the terminator is reached.    z)Subprocess died before emitting expected )r   readRuntimeErrorendswith)r   
terminatorbufcs       r!   wait_forz_WaitForStringPopen.wait_for'   sY      #A"?
~NP P1HC||J'
 r"   )__name__
__module____qualname____doc__r   r,   __classcell__)r    s   @r!   r	   r	      s    =
r"   r	   c                  R   t         j                  dk(  xr t        j                          } t         j                  dk(  xr t        j                          }g }g dD cg c]
  }|gd|df c}dD cg c]  }|dgd|df c}dD cg c]  }dD ]  }d	d
gdd| | if  c}}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 	cg c]$  }	t
        j                  j                  |	      r#|	& }
}	|
r!dj                  dj                  |
            }n|r|d   dk(  s|d   j                  d      rd}n| rd}n|d   dk(  r"t        j                  j                  d      rd}nU|d   j                  d      rA	 dd l}|j                  j!                         }|j#                  d      }|d   d   }| d|vrd}g }|r6|j'                  t(        j*                  j-                  d| d|               nV|d   j                  d      rBt         j                  d!k(  r/|j'                  t(        j*                  j/                  d"              |j'                  i |d#d$j                  |      i|f        |S c c}w c c}w c c}}w c c}	w # t$        $ r g }Y w xY w)%Nlinux)PyQt6PySide6PyQt5PySide2qtagg)r   QT_API	cairocffiqtcairo)      )aggcairor?   gir   gtktkintertkaggwxwxaggzmatplotlib.backends._macosxmacosxz{} cannot be imported, z$DISPLAY is unset'$DISPLAY and $WAYLAND_DISPLAY are unsetTF_BUILDzmacosx backend fails on Azurer   Gtkr<   z.0zno usable GTK bindingsz	Skipping z	 because reasondarwinzgithub #16849BACKEND_DEPS,)r   r   r   display_is_validxdisplay_is_valid	importlibutil	find_specformatjoin
startswithr   r   getr@   
Repositoryget_defaultenumerate_versionsImportErrorappendpytestmarkskipxfail)_is_linux_and_display_invalid_is_linux_and_xdisplay_invalidenvsqt_apiversionrendererdepsr   rL   depmissingr@   gi_repoavailable_gtk_versionsmarkss                  r!   #_get_available_interactive_backendsrn   8   s=   %(\\W%< &N):)K)K)M%M "&)llg&= 'P*;*M*M*O&O #D EF x%8: F EF $'6:< F	 $F4DF(0 WIhZ/H IJ FJ F [<12 VlD)* VlG,- ,,|X.FG 0F	c "&L3inn.F.Fs.K3LL,33DIIg4FGF+L!W,|$//5(F*>F(*rzz~~j/I4F))%0	K --335)0)C)CE)J&,'*G"~%;;1LL))9SE6(1S)TU))$/CLLH4LLL**/*BC<<^SXXd^<eDEa0Fb KaFFF M  , *,&	,s0   J2J
J$J8JJJ&%J&c                      t               D  cg c]E  \  } }t        j                  i | g |dj                  d | j	                         D                    G c}} S c c}} w )N-c              3   0   K   | ]  \  }}| d |   yw)=N ).0kvs      r!   	<genexpr>z5_get_testable_interactive_backends.<locals>.<genexpr>v   s     $HDAqs!A3Z$Hs   )rm   id)rn   r^   paramrV   items)r   rm   s     r!   "_get_testable_interactive_backendsr{   s   s^     BCEU LLC%HH$HCIIK$HHJ E E Es   A
Ax      r<   c                    t        j                         5 }t        j                  dd      }t        j
                  j                  |d      |j                          G fddt              }| j                  j                  j                  }| j                  j                  j                  }|j                  d|       |j                  dd       d d d        y # 1 sw Y   y xY w)NLA)   r   ztest_la_icon.pngc                       e Zd ZW  ZdZy)5_test_toolbar_button_la_mode_icon.<locals>.CustomToolr$   N)r-   r.   r/   imagedescription)tmp_img_paths   r!   
CustomToolr      s     EKr"   r   testgroup)tempfileTemporaryDirectoryr   newr   pathrV   saver   canvasmanagertoolmanagertoolbaradd_tool)figtempdirimgr   r   r   r   s         @r!   !_test_toolbar_button_la_mode_iconr      s     
	$	$	& *'iih'ww||G-?@	 	 jj((44**$$,,VZ0)* * *s   B=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}m	} j                  j                  ddi       j                  j                   |j                  |j                  d                j                  d   j                         }|j                  d      r|j!                  d	      sj#                         }j%                  |       |d
k7  r2 |j&                  t(              5  j+                  d
d       d d d        fd}	| j,                  j/                  d      r |	|d d dz           |	d       j+                  |d       j1                         \  }}
t3        |j4                        j6                  d| k(  sJ |j4                  j8                  j;                         dk(  sJ j                  d   dk(  rt=        |       |
j?                  ddgddg       |j4                  j@                  r)|j4                  j@                  jC                  d dddd       |dk(  r2|jD                  dk\  r#dd l#}|jI                  |jK                                |j4                  jM                  d      jO                   |d|j4                  d      jP                         |j4                  jS                  dfd       |j4                  jS                  d tT               |jW                         }|jY                  |d!d"#       j[                          j]                  d$       t3        |j4                        |k(  sJ t_        |j4                               |jW                         }|jY                  |d!d"#       |j                  d      r$|ja                         |ja                         k(  sJ y y # 1 sw Y   xY w)%Nr   pyplot)KeyEventFigureCanvasBasewebagg.open_in_browserFr%   backendr>   )rA   webrC   Tforcec                     j                  | d       j                         }t        |j                        j                  d|  k(  sJ j                  d       y )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   sX    GGKtG,**,C$//2;-@A B AIIer"   r:   r?   svgr   zFigure 1r   r      r<   g      ?g       @webagg)r<      key_press_eventq
draw_eventc                 $    j                         S Nstart)eventtimers    r!   <lambda>z(_test_interactive_impl.<locals>.<lambda>   s    u{{} r"   close_eventpngd   )rU   dpi      ?)1importlib.utiliojsonr   r^   
matplotlibr   matplotlib.backend_basesr   r   rcParamsupdateloadsargvlowerr(   rW   r   r   raisesr\   r   rS   rT   subplotsr   r   r.   r   get_window_titler   plotr   draw_rubberbandversion_infoasyncioset_event_loopnew_event_loop	new_timeradd_callback_processmpl_connectprintBytesIOsavefigshowpausestrgetvalue)rR   r   r   r   r^   r   r   r   r   r   axr   resultresult_afterr   r   r   s                 @@@r!   _test_interactive_implr      s   (CLL %  LL


388A;/0ll9%++-Gw'9'9.'Ijjl		# g{+ -t,-	 >>##K0gcrlW45% GGG4G llnGC

&&,H	*RRRR::..0J>>>
||I-/)#.GGQFQF
zz

**4QA>(s//7:w5578JJ  $E	x 13::sCLLMJJ<)DEJJ=%0ZZ\FKKu#K.HHJ IIcN 

//@SZZ@/::<LKKUK4  L$9$9$;;;; i- -s   :OOr   r   toolbar2r   )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        | 
      }j                  j                  d      dk(  sJ y # t        j                  $ r5}t        j                  dt        |j                        z          Y d }~dd }~ww xY w)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   timeout	extra_envz,Subprocess failed to test intended behavior

CloseEventr%   )r^   r`   _run_helperr   r   dumps_test_timeoutr   CalledProcessErrorfailr   stderrr   count)r   r   procerrs       r!   test_interactive_backendr      s     <H$m#KKDE
<D HI
<G#=(@ . 	/
"JJ	7+,!	
 ;;\*a///	 (( ;#**o	 	s   #,B0 0C8+C33C8c                     ddl m}  dd l}ddlm} |j                  j                  ddd       |j                         \  }}|j                  d        |        j                  |j                  g d      }|j                          |j                  j                  d	t                |        j                  |j                  j                        }|j                  d       |j                          |j                  }|j                          |j                  d
   j!                         j#                  d      r|j%                          y y )Nr   )ThreadPoolExecutorr   Fr%   )r   zwebagg.port_retriesr   )r%   r<      r   r   rD   )concurrent.futuresr   r   r   r   r   r   r   submitr   r   r   r   r   drawr   r   rW   flush_events)r   r   r   r   r   futurer   s          r!   _test_thread_implr   
  s    5(LL"'   llnGCIIcN!(()<F
MMOJJ=%0!((9FIIcN
MMO ZZFIIK
||I$$&11$7 8r"   r   r?   )r   rD   rF   )parsez10.16T)r   strictr9   r7   rC   CPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929)rL   r   rI   GITHUB_ACTIONrM   r   )r<      z%Tk version mismatch on Azure macOS CIc                 p    t        t        t        |       }|j                  j	                  d      dk(  sJ y )Nr   r   r%   )r   r   r   r   r   r   r   s     r!   test_interactive_thread_safetyr  P  s0     (-3OD;;\*a///r"   c                  &   dd l } dd lm} | j                  j	                  d      }t        |t              rJ |j                  J |j                  d       |j                  J | j                  j	                  d      }t        |t              sJ y )Nr   r      )	r   matplotlib.pyplotr   r   _get
isinstancer   _backend_modr   )r   r   bks      r!   &_impl_test_lazy_auto_backend_selectionr  W  s    #				!	!)	,B"c"""###HHQK'''				!	!)	,Bb#r"   c                  .    t        t        t               y Nr   )r   r  r   rs   r"   r!    test_lazy_auto_backend_selectionr  e  s    6%'r"   c                      dd l } dd l}d|j                  vsJ d|j                  vsJ d|j                  v sd|j                  v sJ y y Nr   r4   pyside6r6   pyside2)"matplotlib.backends.backend_qt5aggr   modulesr   r   s     r!   _implqt5aggr  j  sO    -#++%%%CKK'''ckk!Y#++%===%=!r"   c                      dd l } dd l}d|j                  vsJ d|j                  vsJ d|j                  v sd|j                  v sJ y y r  )$matplotlib.backends.backend_qt5cairor   r  r  s     r!   
_implcairor  s  sO    /#++%%%CKK'''ckk!Y#++%===%=!r"   c                      dd l } dd l}d|j                  vsJ d|j                  vsJ d|j                  v sd|j                  v sJ y y r  )matplotlib.backends.backend_qt5r   r  r  s     r!   	_implcorer  |  sO    *#++%%%CKK'''ckk!Y#++%===%=!r"   c                     dD  cg c]#  } t         j                  j                  |       | % }} dD  cg c]#  } t         j                  j                  |       | % }} t        |      dk(  st        |      dk(  rt	        j
                  d       t        t        t               t         j                  j                  d      t        t        t               t        t        t               y c c} w c c} w )N)r6   r  )r4   r  r   need both QT6 and QT5 bindingsr  pycairo)rR   rS   rT   lenr^   r`   r   r  r   r  r  )ri   qt5_bindingsqt6_bindingss      r!   test_qt5backends_uses_qt5r%    s    +>>##C(4 	L 
 ,>>##C(4 	L  <A\!2a!745]3~~	*6J6	=1s
   (C-(C2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  |j                  d       d d d        t	        j
                  t        d	      5  |j                  d
       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr   r4   r6   r7   r5   z(Failed to import any of the following Qt)matchr8   z^(?:(?!(PySide6|PyQt6)).)*$qt5agg)r   r  r  r   r^   r   r\   switch_backend)r   r   s     r!   _impl_missingr*    s    CKKCKK!CKK	!CKK	#	{*T	U $7#$ 
{*G	H %8$% %$ $% %s   "B2B>2B;>Cc                  .    t        t        t               y r  )r   r*  r   rs   r"   r!   test_qt_missingr,    s    }5r"   c                  ^   dd l } dd l}dd l}|j                  \  }}} | j                  | d        | j                  | d      }dd l} | j                  | d      }|j                  dg      }	|j                  ddt               |j                  j                  j                          y )Nr   z.QtCorez
.QtWidgetszmpl testingerrorz.*Mixing Qt major.*)messagecategory)rR   r   warningsr   import_modulematplotlib.backends.backend_qtQApplicationfilterwarningsUserWarningbackends
backend_qt_create_qApp)
rR   r   r1  _host_bindingmpl_bindingmpl_binding_qwidgetsr   host_qwidgetshost_apps
             r!   _impl_test_cross_Qt_importsr@    s    #&88 A|[I{m7342922k]*3MN)+I++|nJ,GHM))=/:HG-C%0  2""//1r"   c               #     K   dD  cg c]#  } t         j                  j                  |       | % }} dD  cg c]#  } t         j                  j                  |       | % }} t        |      dk(  st        |      dk(  r9t	        j
                  d d t        j                  j                  d      g       y |D ]  }|D ]  }||g||gfE d {      y c c} w c c} w 7 w)N)r6   r7   )r4   r5   r   r   )rm   )rR   rS   rT   r"  r^   ry   r_   r`   )ri   r#  r$  qt5qt6s        r!   qt5_and_qt6_pairsrD    s     +>>##C(4 	L 
 ,>>##C(4 	L  <A\!2a!7ll4"(++"2"23S"T!UW 	W 0 	0Cc
S#J///	00 0s'   C(CC(CA,C	C
Cr3   rH   rK   z	host, mplc                     	 t        t        | |t              }|j                  }d|v sJ y # t        j
                  $ r}|j                  }Y d }~+d }~ww xY w)Nr  z2Mixing Qt major versions may not work as expected.)r   r@  r   r   r   r   )hostr   r   r   exs        r!   test_cross_Qt_importsrH    sW    
	6c#02 ?6III ((  	s   , 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              dz   } d}t        t        j                  d| |g      5 }	 |j                  d      }t        j                  d|      j                  d      }t        j                         t        z   }	 	 |j                         }|J t         j"                  j%                  |      5  	 d d d        |j-                  t.        j0                         |j3                  t        	      d
k(  sJ 	 |j                         |j5                          	 d d d        y # 1 sw Y   nxY wnR# t         j&                  j(                  $ r2 t        j                         |kD  rt        j*                  d       nY Y nw xY w# |j                         |j5                          w w xY w# 1 sw Y   y xY w)Ntornadoz
_test_interactive_impl()z{"backend": "webagg"}-czPress Ctrl+Czvisit (https?:\/\/\S+)r%   z'Failed to connect to the webagg server.r  r   )r^   importorskipinspect	getsourcer   r	   r   
executabler,   researchr   timeperf_counterr   pollurllibrequesturlopenr.  URLErrorr   send_signalsignalSIGINTwaitkill)sourcercr   r*   urlr   retcodes          r!   test_webaggrb    s    	" 67*+F	 B	cnndFB?	@ D	--/C))5s;AA!DC'')M9G!"iikG"?*?//4  V]]+99]93q888yy{"		-    ||,, !((*W4$MN  O!   yy{"		 #+ sh   GAF)&3EEE#:F)!GE	EF)A
F$F)#F$$F))#GGGc                     dd l } dd l}|j                  dd  \  }}|j                  d      }| j                  j                  dd        | j                  j                  dd        |D ]  }||j                  vrJ  dd lm} |j                         dk(  sJ |D ]  }||j                  vrJ  |D ]'  }t        j                  |       ||j                  v r'J  	 |j                  |        |j                  d       y # t        $ r Y y w xY w)Nr   r%   rO   DISPLAYWAYLAND_DISPLAYr>   )r   r   r   splitr   popr  r  r   get_backendrR   r2  r)  exitr\   )r   r   r   rh   ri   r   s         r!   _lazy_headlessrj    s   HHQRLMGT::c?D JJNN9d#JJNN$d+ &#++%%%& $??%%% &#++%%%&  "$ckk!!!"
7# 	  s   C> >	D
	D
zthis a linux-only testc           
      ~    t        t        | j                  d      | j                  d      t        i | ddd      }y )Nr   rN   r$   )rd  re  r   )r   rj  rg  r   r  s     r!   test_lazy_linux_headlessrl  #  s:     sww~6?S?RB?	Dr"   c                     dd l m}  | j                         \  }}|j                  ddgddgd      \  }| j	                  d       | j                  d       |j                  j                  d	t               |j                  j                  |j                        }|j                  |       |j                  j                  |j                         t        d
      D ]  }|j                  j                  |       |j                  ddgddg      \  }|j                  |       |j                  j                  |j                         |j                  j                           | j                  d       y )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{  .  s   #llnGC ''1a&1a&4'
0CB HH5HIIcNJJ</ 
	"	"388	,BNN2JJOOCHH2Y "

!!"% ggq!fq!f%
r

!

!" IIcNr"   	gtk3cairoz#gtk3cairo does not support blitting	gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingc                     t        t        t        |       }|j                  j	                  d      }d|cxk  rdk  sJ  J y )Nr   	DrawEventr   r  )r   r{  r   r   r   )r   r   ndrawss      r!   test_blitting_eventsr  o  sA     $msLD [[{+Fv>>>>r"   c                      dd l mc m}  dd l}| j                  j                          |j                  j                          y )Nr   )IPython.core.interactiveshellcoreinteractiveshellr  InteractiveShellinstancer   r   )ipshr   s     r!   _fallback_checkr  }  s/    00""$r"   c                  X    t        j                  d       t        t        t              } y )NIPythonr  )r^   rL  r   r  r   )responses    r!   "test_fallback_to_different_backendr    s    
	" ?MBHr"   c                  d   ddl m}  dd lm} d}|j	                         }|j                  |       |j                  j                  d      } |        }|j                  |       |j                          |j                  |       |j                          |j                  dkD  sJ |j                          d|_        |j                          |j                  |       |j                  dk(  sJ |j                          |j                  |       |j                  dk(  sJ |j                  d       y )	Nr   )Mockr   rq  r%   Tr   r   )unittest.mockr  r  r   r   r   r   r   r   r   stop
call_count
reset_mocksingle_shotr   )r  r   
pause_timer   r   mocks         r!   _impl_test_interactive_timersr    s    
 ##J
**,CIIjJJ  %E6D	t	KKMIIj	JJL??Q 	OOE	KKMIIj??a 
KKM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        |        y )Nr   r|  CIz)gtk3cairo timers do not work in remote CIrD   r   r   )r   getenvr^   r`   r   r  r   )r   s    r!   test_interactive_timersr    sP    
<K'BIIdO?@
<D HI-%6r"   c                 z  	
 dd l 	dd lm} dd ldd l}|j                  |        	fd}t        ||      }|j                  d|      
|j                         }|j                  j                  dd        |j                  j                  d
fd       	  |d
i | y # t        $ r t        dd	       Y y w xY w)Nr   c                  0   j                   dk(  rVddlm} m} | j                  j
                  }|j                  |j                  g|_        |j                  |_	         |dd       y dd l
} j                   j                         |j                         y )Nr   r   )windllwintypes)r   ctypesr  r  kernel32GenerateConsoleCtrlEventDWORDargtypesBOOLrestyperZ  r]  getpidr[  )r  r  r  rZ  r   r   s       r!   interrupterz&_test_sigint_impl.<locals>.interrupter  sn    <<7"/'-'O'O$190P$-/7}}$,$Q*BGGIBIIK/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                  $    j                         S r   r   )r   r   s    r!   r   z#_test_sigint_impl.<locals>.<lambda>  s    ekkm r"   SUCCESSTr  rs   )r   r  r   r   	threadingr)  getattrTimerr   r   r   KeyboardInterruptr   )r   target_namer   r   r  r  targetr   r   r   r   s           @@@r!   _test_sigint_implr    s    #w	0 S+&FOOA{+E
**,CJJ/ JJ#% %it$%s   B! !B:9B:ztarget, kwargsr   ro  r   intervalrp  c                    | j                  d      }|j                  d      st        j                  d       t	        j
                  t              d|d|d|dz   }t        t        j                  d|g      5 }	 |j                  d       |j                  t        	      \  }}d
|v sJ 	 d d d        y # t        $ r% |j                          |j                         \  }} w xY w# 1 sw Y   y xY w)Nr   qtrF   -SIGINT currently only tested on qt and macosxz
_test_sigint_impl(rG   )rK  r  r  r  )rX   rW   r^   r`   rM  rN  r  r	   r   rO  r,   communicater   	Exceptionr]  )r   r  r   r   r^  r   r   r:  s           r!   test_sigintr    s     ggl#G./CD 12$WKr&2fZqIJF	cnndF;	< #	MM&!(((?IFA
 F"""# #  	IIK((*IFA		# #s$   :C'<*B6&C'6.C$$C''C0c                    dd l }dd lm} |j                  |        t	        ||      }|j                         }|j                  j                  dd        |j                  j                  d      d_	        j                  t        dd       fd	} |j                   |j                  |       	  |di | y # t        $ r t        d
d       Y y 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    uV47P r"   r%   )r  TSIGUSR1r  c                 &    j                          y r   r   )signumframer   s     r!   custom_signal_handlerzD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handler  s    r"   r  rs   )rZ  r  r   r)  r  r   r   r   r   r  r   r   r  r  )	r   r  r   rZ  r   r  r   r  r   s	           @r!   %_test_other_signal_before_sigint_implr    s    #wS+&F
**,CJJ<)PQJJ  ! ,EE	uit4FMM&.."78% %it$%s   4B= =CCz,No other signal available to send on Windowsc                    | j                  d      }|j                  d      st        j                  d       |dk(  r9|j                  j                  t        j                  j                  d             t        j                  dk(  r>|dk(  r9|j                  j                  t        j                  j                  d	             t        j                  t              d
|d|d|dz   }t        t        j                  d|g      5 }	 |j                  d       t!        j"                  |j$                  t&        j(                         |j                  d       t!        j"                  |j$                  t&        j*                         |j-                  t.              \  }}	 d d d        t3               d|v sJ y # t0        $ r% |j#                          |j-                         \  }} w xY w# 1 sw Y   LxY w)Nr   r  r  rF   zmacosx backend is buggyrK   rM   r   zQt backend is buggy on macOSz'
_test_other_signal_before_sigint_impl(rG   r  rK  r  r  r  r  )rX   rW   r^   r`   node
add_markerr_   ra   r   r   rM  rN  r  r	   rO  r,   r   r]  pidrZ  r  r[  r  r   r  r   )	r   r  r   rV  r   r^  r   r   r:  s	            r!   test_other_signal_before_sigintr  	  s    ggl#G./CD( 1 19R 1 ST
||xFf$4
 	KK%CD	F EF82fZr&166F 
cnndF;	< 
		MM&!GGDHHfnn-MM)$GGDHHfmm,(((?IFA
 
&M  	IIK((*IFA	
 
s   	G.BF==.G++G..G7)U	functoolsrR   r   rM  r   r   r   rP  rZ  r   r   r   rR  urllib.requestrU  PILr   r^   r   r   matplotlib.backend_toolsr   matplotlib.testingr   r   r   Popenr	   	lru_cachern   r{   r   _retry_countr   r   r_   parametrizeflakyr   r   _thread_safe_backendsry   valuesr   rm   r]   ra   r   packaging.versionr   mac_verTimeoutExpiredrX   python_implementationr   r   r  r  r  r  r  r  r%  r*  r,  r@  rD  skipifrP   rH  rb  rj  rl  r{  _blit_backendsr`   r  r  r  r  r  r  r  r  r  rs   r"   r!   <module>r     s1        	  	   
      ( 3 V*** > 7 7tE )*%'qQ*.W<t  B DEZ$?@,'0 ( A F0.B ;< "  HEll1ol+G' 	KKZ%B%BC	E	DKKZ%B%BC	E	H	+"(""$Q' uW~g6KK!!)B)B)- " /0 
a		X	&)	3KKZ%B%BC	E	G	 > > > @I MKKK  	
 W
#"**'D
,,(
"s'7'7';g'EKKEF	H? HF  56,'0 ( 70
'
>>>2"% 62$0& LLGH$F$5$F$F$H H4  6 &<(9(;&<=J >6J J"**,I  KCLLG+4TU VK<B CLLG+4LM B DE F N&R 45 
Ell1ol+G+KKBC	E	K	KKBC	E	DKK;<	>
W
#"**'D
,,(
"


2A

(KKEF	
%
. /,' ( 0C@  B DE6 F6!%H  B DE)gt_z2, #	 F
#"%2 CLLG+I  K B DE)gt_z2, 	 FKr"   