
    z%i.                    T   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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mZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d d	lm#Z#  ejH                  d
      Z% ejL                          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/m0Z0 d dl)m1Z1 	 d dl)m2Z2 e2jf                  Z4	 d dl6m7Z7m8Z8 dZ9	 d dl)m:Z: dZ;	 d dl<Z< ejz                  d      r e j|                  d      d Z?d Z@d ZAe	j                  dk(  r	d dl)mCZC d ZDe1j                  ZFdZGdZHeHrd\  ZIZJZKnd\  ZIZJZKej                  ZMdZN eOe%dd       ZPej                  dk(  ZRd  ZS	  e	j                  d!      ZUd#d$gZV	 d d%lWmXZXmYZYmZZZm[Z[ d& Z]d' Z^ G d( d)e j                        Z` G d* d+e\      Za G d, d-e\      Zbd. Zc G d/ d0      Zd G d1 d2eb      Ze G d3 d4e)j                        Zg G d5 d6eb      Zhd7 Zid8 Zj G d9 d:eb      Zk G d; d<eb      Zl G d= d>eb      Zm G d? d@eb      Zn G dA dBeb      Zo G dC dDe\      ZpdE Zq G dF dGe\      Zr G dH dIe\      Zs G dJ dKeb      Zt G dL dMeb      Zu G dN dOeb      Zv G dP dQeb      ZwddRZxdS ZydT ZzdU Z{ G dV dWe\      Z| G dX dYe}      Z~dZ Z G d[ d\eb      Zd] Zd^ Z G d_ d`eb      Z G da dbeb      Zd dcl,mZmZmZ  G dd dee\      Zdf Z G dg dhe      Z G di dje      Zej                  dkel       ej                  dmedno       ej                  dpeeq        G dr dseb      Z ej                         Zdt Z G du dve      Zej                  dwel        G dx dye      Zej                  dw       dzZ G d{ d|eb      Z ej*                  d}       G d~ deb             Z e?d      Z G d deb      Z G d deb      Z G d deb      Z G d deb      Z e j8                  e4d       ej*                  d}       G d deb                    Z G d deb      Z G d deX      Z G d deb      Z e j8                  e;d       ej*                  d}       G d deb                    Z G d deb      Z G d de j                        Z G d deb      Z G d deb      Z G d de j                        Z ej*                  d}       G d de j                               Z ej*                  d       ej*                  d}       G d de j                                      Zd Z ej*                  d}       G d de j                               Zd Zd Zd Zd Z G d de\      Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z G d de j                        Z e jt                  ej                  dk(  d       G d de j                               Z G dĄ de j                        Z G dƄ de j                        Z ej*                  d}       G dȄ de j                               Z G dʄ de j                        Z G d̄ de j                        Z G d΄ de\      Z G dЄ de      Z G d҄ de      Z G dԄ de      Z	 ddքZ e jt                   ee%d׫       dث       e jt                  ej                  dk7  dګ       G dۄ de j                                      Zy# e5$ r dZ4Y w xY w# e5$ r dZ9Y w xY w# e5$ r dZ;Y w xY w# e5$ r dZ<Y w xY w#  d"ZUY ^xY w# e5$ r e\ZXdxZYxZZZ[Y `w xY w)    N)support)hashlib_helper)import_helper)	os_helper)script_helper)socket_helper)threading_helper)warnings_helper_multiprocessing)waitAuthenticationError)util)	reductionF)ValuecopyT)shared_memory)addressz(libasan has a pthread_create() dead lockc                 $    | j                  d      S )Nlatin)encode)ss    N/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/_test_multiprocessing.pyr   r   W   s    88G    c                     t        | t        j                  j                        r!| j	                          | j                          y y N)
isinstancemultiprocessingqueuesQueueclosejoin_thread)queues    r   close_queuer#   [   s2    %//556 7r   c                 .    t        j                  |        y r   )r	   r!   )processs    r   join_processr&   a   s       )r   posix)resource_trackerc                 4    t        j                  |   |        y r   )r(   _CLEANUP_FUNCS)namertypes     r   _resource_unlinkr-   j   s    ''.t4r   皙?)g=
ףp=?gffffff?gffffff?)r.   r.   r.         @HAVE_BROKEN_SEM_GETVALUEwin32c                 .    ||dk  rd }t        | g|      S )N        r   )handletimeouts     r   wait_for_handler7      s"    w}'""r   SC_OPEN_MAX   __main__z$test.test_multiprocessing_forkserver)	Structurec_intc_double
c_longlongc                      d} 	 t        j                  d      }|dk(  s|| k\  ryt	        j
                  d| z        # t        t        f$ r Y yw xY w)zACheck that the system supports enough semaphores to run the test.r9   SC_SEM_NSEMS_MAXNzHThe OS doesn't support enough semaphores to run the test (required: %d).)ossysconfAttributeError
ValueErrorunittestSkipTest)	nsems_minnsemss     r   check_enough_semaphoresrJ      sl     I

-. {ey(


 >@IJ K K J' s   < AAc                       fd}|S )a  Returns a decorator: raises SkipTest when SM != spawn at test time.

    This can be useful to save overall Python test suite execution time.
    "spawn" is the universal mode available on all platforms so this limits the
    decorated test to only execute within test_multiprocessing_spawn.

    This would not be necessary if we refactored our test suite to split things
    into other test files when they are not start method specific to be rerun
    under all start methods.
    c                 F     t        j                          fd       }|S )Nc                  |    t        j                         x}dk7  rt        j                  d|d        | i |S )Nspawnstart_method=z, not 'spawn'; )r   get_start_methodrF   rG   )argskwargsstart_methodreason	test_items      r   spawn_check_wrapperzKonly_run_in_spawn_testsuite.<locals>.decorator.<locals>.spawn_check_wrapper   sG     / @ @ BBwN''=</(QRRd-f--r   )	functoolswraps)rU   rV   rT   s   ` r   	decoratorz.only_run_in_spawn_testsuite.<locals>.decorator   s&    		#	. 
$	.
 #"r    )rT   rY   s   ` r   only_run_in_spawn_testsuiter[      s    # r   c                   \    e Zd ZdZ ej
                  ej                  dk(  d      d        Zy)TestInternalDecoratorszBLogic within a test suite that could errantly skip tests? Test it!r1   ztest requires that fork exists.c                    t        j                         dk7  rt        j                  d      	 t	        d      d        }t        j                  d      }	 t        j                  dd       | j                          d	       t        j                  d
d       | j                  t        j                        5 } |        d d d        | j                  dt        j                               | j                  dt        |j                               t        j                  |d       y # t
        $ r}| j                  d|        Y d }~d }~ww xY w# 1 sw Y   xY w# t        j                  |d       w xY w)NrN   z'only run in test_multiprocessing_spawn.ztesting this decoratorc                       yN   rZ   rZ   r   r   return_four_if_spawnzUTestInternalDecorators.test_only_run_in_spawn_testsuite.<locals>.return_four_if_spawn   s    r   z.expected decorated `def` not to raise; caught T
allow_noneforcera   forkrO   )r   rP   rF   rG   r[   	Exceptionfailset_start_methodassertEqualassertRaisesassertInstr	exception)selfrb   errorig_start_methodctxs        r    test_only_run_in_spawn_testsuitez7TestInternalDecorators.test_only_run_in_spawn_testsuite   sA   ++-8##$MNN	N()AB C
 ,<<M		L,,WDA13Q7,,V4@""8#4#45 '$&'MM2C4FGMM/3s}}+=>,,->dK  	NIIFseLMM	N' '
 ,,->dKs=   D, A$E# :EAE# ,	E5EEE E# #E<N)	__name__
__module____qualname____doc__rF   skipIfsysplatformrt   rZ   r   r   r]   r]      s1    LX__S\\W,.OPL QLr   r]   c                       e Zd Zd Zd Zy)TimingWrapperc                      || _         d | _        y r   )funcelapsed)rp   r   s     r   __init__zTimingWrapper.__init__   s    	r   c                     t        j                         }	  | j                  |i |t        j                         |z
  | _        S # t        j                         |z
  | _        w xY wr   )time	monotonicr   r   )rp   rQ   kwdsts       r   __call__zTimingWrapper.__call__   sM    NN	0499d+d+>>+a/DL4>>+a/DLs   A A"Nru   rv   rw   r   r   rZ   r   r   r}   r}      s    0r   r}   c                   &    e Zd ZdZd Zd Zd ZeZy)BaseTestCase)	processesmanagerthreadsc                 8    t         r| j                  ||d       y y N   )CHECK_TIMINGSassertAlmostEqualrp   abs      r   assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEqual   s    ""1a+ r   c                 P    	  || }| j                  ||      S # t        $ r Y y w xY wr   )rk   NotImplementedError)rp   valuer   rQ   ress        r   assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplemented  s9    	0+C ##E3// # 		s    	%%c                     t        d      )Nz#shouldn't try to pickle a test case)r   )rp   rQ   s     r   
__reduce__zBaseTestCase.__reduce__  s    !"GHHr   N)ru   rv   rw   ALLOWED_TYPESr   r   r   __reduce_ex__rZ   r   r   r   r      s    7M,0I Mr   r   c                     	 | j                         S # t        $ rA 	 | j                  cY S # t        $ r% 	 | j                  cY cY S # t        $ r t        w xY ww xY ww xY wr   )	get_valuerD   _Semaphore__value_valuer   rp   s    r   r   r     sg    	*~~ *	*))) 	**{{"! *))*	**s9    	A*A	AAA AAAAc                       e Zd Zd Zy)DummyCallablec                 &    |j                  d       y N   put)rp   qcs      r   r   zDummyCallable.__call__&  s    	ar   N)ru   rv   rw   r   rZ   r   r   r   r   %  s    r   r   c                   2   e Zd ZdZd Zd Z ej                  d      d        Ze	d        Z
d Ze	d        Zd	 Ze	d
        Zd Ze	d        Ze	d        Zd Z ej(                  ej,                  d      d        Ze	d        Ze	d        Ze	d        Zd Zd Zd Zd Zd Ze	d        Z d Z!e	d        Z"d Z#e	d.d       Z$d Z% ej                  d       d!        Z&d" Z'e	d#        Z(d$ Z)e	d%        Z*d& Z+e	i fd'       Z,d( Z-d) Z.e	d/d*       Z/d+ Z0d, Z1d- Z2y)0_TestProcessr   r   c                    | j                   dk(  r*| j                  dj                  | j                                | j                         }|j                  }| j                  |j                                | j                  |j                          | j                  |t               | j                  t        |      dkD         | j                  |j                  t        j                                | j                  |j                  d        y )Nr   test not appropriate for {}r   )TYPEskipTestformatcurrent_processauthkey
assertTrueis_alivedaemonassertIsInstancebyteslenrk   identrB   getpidexitcode)rp   currentr   s      r   test_currentz_TestProcess.test_current/  s    99	!MM7>>tyyIJ&&(//((*+GNN*+gu-Gq()		4))40r   c                    | j                   dk(  r| j                  d| j                           t        j                  t        j                  j	                         t        j                  t        j                        g}|D ]_  }| j                  |       | j                         }|j                          |j                          | j                  |j                  d       a y )Nr   ztest not appropriate for r   )r   r   rz   
executabler   pathlibPathset_executableProcessstartjoinrk   r   )rp   pathspathps       r   test_set_executablez _TestProcess.test_set_executable=  s    99	!MM5dii[ABNNNN!!#LL(

  	,D%AGGIFFHQZZ+	,r   cpuc           	         dddgdf}t         t        f}t        j                  ||      }|D ]  \  }}| j	                  ||      5  | j                  d      }| j                  | j                   |||f            }d|_        |j                          |j                         }| j                  ||       |j                          t        |       d d d         y # 1 sw Y   xY w)Nr   rn   r   )rQ   	args_typetargetrQ   T)listtuple	itertoolsproductsubTestr   r   
_test_argsr   r   getrk   r   r#   )	rp   
args_cases
args_types
test_casesrQ   r   r   r   
child_argss	            r   test_args_argumentz_TestProcess.test_args_argumentL  s     T*
E]
&&z:>
) 
	OD)49= 	JJqMLLiD	>RLS	UUW
  T2A	 	
		 	s   BCC$	c                 &    |j                  |       y r   r   )clsr   args      r   r   z_TestProcess._test_argsa  s    	c
r   c                    | j                   dk(  r*| j                  dj                  | j                                | j                  | j                        }| j                  |j                  | j                         j                         | j                  | j                  d      }| j                  |j                         | j                  | j                  d      }| j                  |j                         y )Nr   r   r   Tr   r   F)
r   r   r   r   _testrk   r   r   r   assertFalse)rp   proc0proc1proc2s       r   test_daemon_argumentz!_TestProcess.test_daemon_argumente  s    99	!MM7>>tyyIJ DJJ/t';';'='D'DEDJJt<%DJJu=&r   c                 <   | j                         }|j                  |       |j                  |       |j                  |j                         | j                  dk7  r@|j                  t	        |j
                               |j                  |j                         y y )Nr   )r   r   r+   r   r   r   pid)r   r   rQ   r   r   s        r   r   z_TestProcess._testq  sl    %%'	d	d	gll88y EE%()EE'++ !r   c                 p   | j                   dk(  r*| j                  dj                  | j                                | j                  | j	                                | j                  d      \  }}| j                  | j                  |f      }|j                          |j                          |j                         \  }}| j                  || j                         j                         | j                  |t        j                                | j                  || j                         j                          y )Nr   r   Fduplexr   )r   r   r   assertIsNoneparent_processPiper   _test_send_parent_processr   r   recvrk   r   r   rB   r   r+   )rp   rconnwconnr   
parent_pidparent_names         r   test_parent_process_attributesz+_TestProcess.test_parent_process_attributes{  s    99	!MM7>>tyyIJ$--/0yyy.uLL > >eXLN			"'**,
KT%9%9%;%?%?@RYY[1d&:&:&<&A&ABr   c                 r    ddl m} |j                   |       j                   |       j                  g       y )Nr   r   )multiprocessing.processr   sendr   r+   r   r   r   s      r   r   z&_TestProcess._test_send_parent_process  s(    :

N$((.*:*?*?@Ar   c                 p   | j                   dk(  r*| j                  dj                  | j                                | j                  d      \  }}| j	                  | j
                  |f      }|j                          |j                  t        j                        st        d      |j                         }| j                  |d       |j                          |j                          |j                  t        j                        st        d      |j                         }| j                  |d	       y )
Nr   r   Fr   r   r6   z(Could not communicate with child processalive	not alive)r   r   r   r   r   _test_create_grandchild_processr   pollr   LONG_TIMEOUTAssertionErrorr   rk   	terminater   )rp   r   r   r   parent_process_statuss        r   test_parent_processz _TestProcess.test_parent_process  s    99	!MM7>>tyyIJ
 yyy.uLL77ui  I		zz'"6"6z7 !KLL %

.8		zz'"6"6z7 !KLL %

.<r   c                     | j                  | j                  |f      }|j                          t        j                  d       y )Nr   i,  )r   _test_report_parent_statusr   r   sleep)r   r   r   s      r   r  z,_TestProcess._test_create_grandchild_process  s0    KKs==UIKN		

3r   c                    ddl m} |j                   |       j                         rdnd        |       j	                  t
        j                         |j                   |       j                         rd       y d       y )Nr   r   r  r  r  )r   r   r   r   r   r   SHORT_TIMEOUTr   s      r   r  z'_TestProcess._test_report_parent_status  sZ    :

n.7797{Kg&;&;<

n.7797K{Kr   c                    | j                  d      }| j                         }|ddf}ddd}d}| j                  | j                  |||      }d|_        | j                         }| j                  d	k7  r&| j                  |j                  |j                         | j                  |j                         d
       | j                  |j                  d       | j                  || j                                | j                  t        | j                               t        u        | j                  |j                  d        |j!                          | j                  |j                  d        | j                  |j                         d       | j#                  || j                                | j                  |j%                         |dd         | j                  |j%                         |       | j                  |j%                         |j&                         | j                  d	k7  rT| j                  |j%                         |j                         | j                  |j%                         |j(                         |j+                          | j                  |j                  d       | j                  |j                         d
       | j                  || j                                t-        |       y )Nr         gRQ@)hellobyeSomeProcess)r   rQ   rR   r+   Tr   Fr   )r   Eventr   r   r   r   r   rk   r   r   assertNotInactive_childrenr   typer   r   r   rm   r   r+   r   r   r#   )rp   r   erQ   rR   r+   r   r   s           r   test_processz_TestProcess.test_process  s.   JJqMJJL1ayD)LL::Dd   &&(99	!QYY8u-4(D0023T1134<=T*		T*t,a--/0$qr(+&)!&&)99	!QUUWgoo6QUUWaee,	Q'u-D0023Ar   zneeds native_idc                    | j                   dk(  r*| j                  dj                  | j                                t        j                         j
                  }| j                  d      }| j                  | j                  |f      }|j                          |j                         }|j                          t        |       | j                  ||       y )Nr   r   r   r   )r   r   r   	threadingmain_thread	native_idr   r   "_test_process_mainthread_native_idr   r   r   r#   assertNotEqual)rp   current_mainthread_native_idr   r   child_mainthread_native_ids        r   !test_process_mainthread_native_idz._TestProcess.test_process_mainthread_native_id  s    99	!MM7>>tyyIJ'0'<'<'>'H'H$JJqMLL G GqdLS		%&UUW"	A8:TUr   c                 b    t        j                         j                  }|j                  |       y r   )r  r  r   r   )r   r   mainthread_native_ids      r   r!  z/_TestProcess._test_process_mainthread_native_id  s$    (446@@	"#r   c                 .    t        j                  d       y )Nd   r   r  r   s    r   _sleep_somez_TestProcess._sleep_some  s    

3r   c                 .    t        j                  |       y r   r*  )r   delays     r   _test_sleepz_TestProcess._test_sleep  s    

5r   c                 "   | j                   dk(  r*| j                  dj                  | j                                | j                  | j                        d_        j                          | j                  j                         d       | j                  | j                                | j                  j                  d        t        j                        }| j                   |d      d        | j                  |j                  d       | j                  j                         d       | j                   |d      d        | j                  |j                  d       | j                  j                         d       t!        j"                  d        |       t%        t&        d	      rfd
}t'        j&                  t&        j(                  |      }	 t'        j*                  d       | j                   |       d        t'        j*                  d       t'        j&                  t&        j(                  |       n| j                   |       d        | j                  |j                  d       | j                  j                         d       | j-                  | j                                j                          j                  S # t'        j*                  d       t'        j&                  t&        j(                  |       w xY w)Nr   r   r   Tr   r3   rA   r   alarmc                       t        dz        )Nzjoin took too long: %sRuntimeError)rQ   r   s    r   handlerz+_TestProcess._kill_process.<locals>.handler  s    "#;a#?@@r   
   F)r   r   r   r   r,  r   r   rk   r   rm   r  r   r}   r   r   r   r   r  hasattrsignalSIGALRMr1  r  )rp   methr   r5  old_handlerr   s        @r   _kill_processz_TestProcess._kill_process  s   99	!MM7>>tyyIJLL 0 0L1		t,a--/0T*QVV$a$'$$T\\37t,b4($$T\\37t, 	

1Q67#A --@K;R   .Qfnnk:TVT*$$T\\37u-D0023	zz Qfnnk:s   ,K ;Lc                     | j                  t        j                  j                        }t        j
                  dk7  r"| j                  |t        j                          y y Nnt)	r<  r   r   r	  rB   r+   rk   r8  SIGTERMrp   r   s     r   test_terminatez_TestProcess.test_terminate.  sD    %%o&=&=&G&GH77d?X7 r   c                     | j                  t        j                  j                        }t        j
                  dk7  r"| j                  |t        j                          y y r>  )	r<  r   r   killrB   r+   rk   r8  SIGKILLrA  s     r   	test_killz_TestProcess.test_kill3  sD    %%o&=&=&B&BC77d?X7 r   c                     	 t        j                         }| j                  t	        |      t
        u        | j                  |dk\         y # t        $ r d}Y Bw xY wr   )r   	cpu_countr   r   r  int)rp   cpuss     r   test_cpu_countz_TestProcess.test_cpu_count8  sR    	",,.D 	T
c)*	" # 	D	s   A AAc                    | j                  t        | j                               t               | j	                  t
        j                  t        f      }| j                  || j                                d|_	        |j                          | j                  || j                                |j                          | j                  || j                                y Nr   T)rk   r  r  r   r   r   r  DELTAr  r   r   rm   r   rp   r   s     r   test_active_childrenz!_TestProcess.test_active_children@  s    d2245t<LL

%L:D0023		a--/0	D0023r   c                     |j                  |       t        |      dk  rTt        d      D ]E  }| j                  | j                  |||gz   f      }|j                          |j                          G y y Nr  r   )r   r   ranger   _test_recursionr   r   )r   r   idir   s        r   rT  z_TestProcess._test_recursionM  sl    

2r7Q;1X KK..eRV_    	 r   c                 R   | j                  d      \  }}| j                  |g        t        j                  t               g }|j                         r0|j                  |j                                |j                         r0g dgddgddgdgddgddgg}| j                  ||       y )NFr   r   r   )	r   rT  r   r  rN  r  appendr   rk   )rp   r   r   resultexpecteds        r   test_recursionz_TestProcess.test_recursionX  s    yyy.uUB'

5jjlMM%**,' jjl cAAcAA 	*r   c                 &    |j                  d       y )N      $@r4   r   events     r   _test_sentinelz_TestProcess._test_sentinell  s    

4r   c                    | j                   dk(  r*| j                  dj                  | j                                | j                         }| j	                  | j
                  |f      }| j                  t              5  |j                   d d d        |j                          | j                  |j                         |j                  }| j                  |t               | j                  t        |d             |j!                          |j                          | j#                  t        |d             y # 1 sw Y   xY w)Nr   r   r   r3   r  r   )r   r   r   r  r   r`  rl   rE   sentinelr   
addCleanupr   r   rI  r   r7   setr   )rp   r_  r   rb  s       r   test_sentinelz_TestProcess.test_sentinelp  s    99	!MM7>>tyyIJ

LL 3 35(LCz* 	JJ			::h,3?@			!<=	 	s   =D88ENc                 R    ||j                          t        j                  |       y r   )r   rz   exit)r   rcr   s      r   _test_closez_TestProcess._test_close  s    =EEGr   c                    | j                   dk(  r*| j                  dj                  | j                                | j                         }| j	                  | j
                  d|i      }d|_        |j                          | j                  |j                         d       | j                  t              5  |j                          d d d        |j                  d        |j                          | j                  |j                         d       | j                  |j                  d       |j                          | j                  t              5  |j                          d d d        | j                  t              5  |j                          d d d        | j                  t              5  |j!                          d d d        |j                          t#        j$                  |      }~t'        j(                          | j+                   |       d        t-        |       y # 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   r   )r   rR   TFr   )r   r   r   r   r   ri  r   r   rk   r   rl   rE   r    r   r   r   r	  weakrefrefgccollectassertIsr#   )rp   r   r   wrs       r   
test_closez_TestProcess.test_close  s   99	!MM7>>tyyIJJJLLL 0 0#qLB		t,z* 	GGI	 	
d	u-Q'		z* 	JJL	z* 	FFH	z* 	KKM			[[^


bdD!A+	 		 		 		 	s0   5H"H/>H;,I"H,/H8;IIwalltimec                    | j                   dk(  r*| j                  dj                  | j                                t        j                         }|dk(  rdnd}t        |      D cg c]  }| j                  | j                  d      ! }}|D ]  }|j                           |D ]  }t        |        |D ]  }| j                  |j                  d         t        |      D cg c]  }| j                  | j                  	        }}|D ]  }|j                           t        j                  d
       |D ]  }|j                           |D ]  }t        |        t         j"                  dk7  rit$        j&                   g}t(        j*                  dk(  r |j-                  t$        j.                          |D ]  }| j1                  |j                  |         y y c c}w c c}w )Nr   r   rN   r   r)  ){Gz?r   r   r   MbP?r?  darwin)r   r   r   r   rP   rS  r   r/  r   r&   rk   r   r,  r   r  r	  rB   r+   r8  r@  rz   r{   rX  rE  rm   )rp   smNrV  procsr   	exitcodess          r   test_many_processesz _TestProcess.test_many_processes  s   99	!MM7>>tyyIJ--/wAC  ($ T%5%5GD $ $ 	AGGI	 	AO	 	,AQZZ+	,  ($ T%5%56 $ $ 	AGGI	

5 	AKKM	 	AO	77d? ..)I||x'   &..1 5ajj)45 %$$s   $$G##Gc                 z   t               }t        j                  |      }| j                         }| j	                  |||f      }~|j                          |j                          t        j                          | j                   |       d        | j                  |j                         d       t        |       y )Nr   r   )r   rk  rl  r   r   r   r   rm  rn  ro  rk   r   r#   )rp   r   rp  r   r   s        r   test_lose_target_refz!_TestProcess.test_lose_target_ref  s    O[[^JJLLLAL/			


bdD!!$Ar   c                 j    |j                  t        j                                |j                          y r   )r   r   fd_countr   )rp   evtr   s      r   _test_child_fd_inflationz%_TestProcess._test_child_fd_inflation  s     	i  "#
r   c                 B   | j                   dk(  r*| j                  dj                  | j                                t        j                         }|dk(  r | j                  dj                  |             d}| j                         }| j                         }t        |      D cg c]!  }| j                  | j                  ||f      # }}|D ]  }|j                           	 t        |      D cg c]  }|j                          }}| j                  t        t        |            d|       |j                          |D ]  }|j                           t!        |       y c c}w c c}w # |j                          |D ]  }|j                           t!        |       w xY w)Nr   r   rg   r   r   r   )r   r   r   r   rP   r  r   rS  r   r  r   r   rk   r   rd  r   r#   )	rp   rw  rx  r  r   rV  ry  r   	fd_countss	            r   test_child_fd_inflationz$_TestProcess.test_child_fd_inflation  se    99	!MM7>>tyyIJ--/< MM7>>rBCjjlJJL  ($ T%B%B#qR $ $ 	AGGI		*/(3Q3I3SY0!Y? GGI N$ 4 GGI Ns$   "&E "E* /E%'E* %E* *4Fc                     fd}fd}t        j                  |      j                          t        j                  |d      j                          y )Nc                  P    t        j                  d        j                          y )N      ?r   r  rd  r  s   r   func1z2_TestProcess._test_wait_for_threads.<locals>.func1  s    JJsOGGIr   c                  P    t        j                  d        j                          y )N   )r   r  clearr  s   r   func2z2_TestProcess._test_wait_for_threads.<locals>.func2  s    JJrNIIKr   r   Tr   )r  Threadr   )rp   r  r  r  s    `  r   _test_wait_for_threadsz#_TestProcess._test_wait_for_threads  s?    		 	&,,.d399;r   c                 P   | j                   dk(  r*| j                  dj                  | j                                | j                         }| j	                  | j
                  |f      }|j                          |j                          | j                  |j                                y )Nr   r   r   )
r   r   r   r  r   r  r   r   r   is_set)rp   r  procs      r   test_wait_for_threadsz"_TestProcess.test_wait_for_threads  su     99	!MM7>>tyyIJjjl||4#>#>cV|L

		

%r   c                     |j                         D ]B  \  }}|dk(  r%t        j                         }|j                          nd }t	        t
        |d        D |j                          y )Nr    )itemsioStringIOr    setattrrz   rd  )rp   r  break_std_streamsstream_nameactionstreams         r   _test_error_on_stdio_flushz'_TestProcess._test_error_on_stdio_flush  sY    #4#:#:#< 	,K  Cd+	, 		r   c           	         t        j                         d g}|d   j                          dD ]  }|D ]  }t        t        |      }t        t        ||       	 | j                         }| j                  | j                  |f      }|j                          |j                          | j                  |j                                | j                  |j                  d       t        t        ||         y # t        t        ||       w xY w)Nr   stdoutstderrr   )r  r  r    getattrrz   r  r  r   r  r   r   r   r  rk   r   )rp   streamsr  r  
old_streamr  r  s          r   test_error_on_stdio_flush_1z(_TestProcess.test_error_on_stdio_flush_1   s    ;;=$'
/ 	:K! :$S+6
[&1	:**,C<<t/N/N.1V ( 5DJJLIIKOOCJJL1$$T]]A6Cj9:	: Cj9s   B	C55Dc           	         dD ]  }dD ]  }t        t        |      }	 | j                         }| j                  | j                  |||if      }|j                          |j                          | j                  |j                                | j                  |j                  d       t        t        ||         y # t        t        ||       w xY w)Nr  )r    remover   r   )r  rz   r  r   r  r   r   r   r  rk   r   r  )rp   r  r  r  r  r  s         r   test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_23  s     0 	:K- :$S+6
	:**,C<<t/N/N.1K3H-I ( KDJJLIIKOOCJJL1$$T]]A6Cj9:	: Cj9s   BB>>Cc                 N    t        j                  |       |j                          y r   r  )rp   r  r.  s      r   _sleep_and_set_eventz!_TestProcess._sleep_and_set_eventD  s    

5	r   c                    | j                   dk(  r*| j                  dj                  | j                                t        j                         }|dk7  r | j                  dj                  |             ddlm} |j                          d}| j                         }| j                  | j                  ||f      }|j                          |j                  }t        j                  ||       t        j                   |dz         | j                         }| j                  | j                  |f      }	|	j                          |	j#                          | j%                  |j'                                | j)                  |	j*                  d       |j#                          | j%                  |j'                                | j-                  |j*                  d	       y )
Nr   r   
forkserverr   )_forkserverr  r          @)r      )r   r   r   r   rP   multiprocessing.forkserverr  ensure_runningr  r   r  r   _forkserver_pidrB   rD  r   r  r   r   r  rk   r   rm   )
rp   signumrw  r  r.  r  r  r   evt2r   s
             r   check_forkserver_deathz#_TestProcess.check_forkserver_deathI  sU    99	!MM7>>tyyIJ--/ MM7>>rBC:""$ jjl||4#<#<C<|P

))
V

53;zz|D$=$=TGL

&+		

%dmmX.r   c                 B    | j                  t        j                         y r   )r  r8  SIGINTr   s    r   test_forkserver_sigintz#_TestProcess.test_forkserver_siginto  s    ##FMM2r   c                 j    t         j                  dk7  r | j                  t        j                         y y r>  )rB   r+   r  r8  rE  r   s    r   test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkills  s$    77d?''7 r   )r   Nr3   )3ru   rv   rw   r   r   r   r   requires_resourcer   classmethodr   r   r   r   r   r  r  r  r  rF   
skipUnlessr  _HAVE_THREAD_NATIVE_IDr%  r!  r,  r/  r<  rB  rF  rK  rP  rT  r[  r`  re  ri  rq  r{  r}  r  r  r  r  r  r  r  r  r  r  r  rZ   r   r   r   r   +  s   ,M1, Wu% &(  
'  C B B=2  
 L L&P X99;LMV NV  $ $    1f8
8
#4  +(  >   
@ Wz*!5 +!5F  > 
< 
<
& @B 	 	:&:"  $/L38r   r   c                   $    e Zd Zd Zd Zd Zd Zy)_UpperCaserc                     t         j                  j                  |        t        j                         \  | _        | _        y r   )r   r   r   r   
child_connparent_connr   s    r   r   z_UpperCaser.__init__  s.    ((.,;,@,@,B))r   c                    | j                   j                          t        | j                  j                  d       D ]+  }| j                  j                  |j                                - | j                  j                          y r   )r  r    iterr  r   r   upperrp   r   s     r   runz_UpperCaser.run  s\     doo**D1 	,AOO  +	,r   c                 l    | j                   j                  |       | j                   j                         S r   )r  r   r   r  s     r   submitz_UpperCaser.submit  s+    a $$&&r   c                     | j                   j                  d        | j                   j                          | j                  j                          y r   )r  r   r    r  r   s    r   stopz_UpperCaser.stop  s8    d# r   N)ru   rv   rw   r   r  r  r  rZ   r   r   r  r  }  s    C '
 r   r  c                   B    e Zd ZdZd Zd Zed        Zed        Zd Z	y)_TestSubclassingProcessr   c                 
   t               }d|_        |j                          | j                  |j	                  d      d       | j                  |j	                  d      d       |j                          |j                          y )NTr  HELLOworldWORLD)r  r   r   rk   r  r  r   )rp   
uppercasers     r   test_subclassingz(_TestSubclassingProcess.test_subclassing  sg     ]
 
**73W=**73W=r   c                 "   | j                   dk(  r*| j                  dj                  | j                                t        j                  }| j                  t        j                  |       | j                  | j                  |f      }|j                          |j                          t        |d      5 }|j                         }| j                  d|       | j                  d|       | j                  d|       d d d        y # 1 sw Y   y xY w)	Nr   r   r   utf-8encodingZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)r   r   r   r   TESTFNrc  unlinkr   _test_stderr_flushr   r   openreadrm   )rp   testfnr  frq   s        r   test_stderr_flushz)_TestSubclassingProcess.test_stderr_flush  s    99	!MM7>>tyyIJ!!	((&1||4#:#:&|K

		&7+ 	/q&&(CMM-s3MM3S9MM.#.	/ 	/ 	/s   5ADDc                     t        j                  |t         j                  t         j                  z  t         j                  z        }t        |ddd      t
        _        ddz   y )Nwr  Fr  closefdr   r   )rB   r  O_WRONLYO_CREATO_EXCLrz   r  )r   r  fds      r   r  z*_TestSubclassingProcess._test_stderr_flush  sA    WWVR[[2::5		AB"cGUC
	!r   c                     t        j                  |t         j                  t         j                  z  t         j                  z        }t        |ddd      t
        _        t        j                  |       y )Nr  r  Fr  )rB   r  r  r  r  rz   r  rg  )r   rT   r  r  s       r   _test_sys_exitz&_TestSubclassingProcess._test_sys_exit  sF    WWVR[[2::5		AB"cGUC
r   c                    | j                   dk(  r*| j                  dj                  | j                                t        j                  }| j                  t        j                  |       g ddfD ]  }| j                  | j                  ||f      }d|_	        |j                          t        |       | j                  |j                  d       t        |d	      5 }|j                         }d d d        | j                  j!                         t#        |             t%        j                  |        g d
}|D ]  \  }}| j'                  |      5  | j                  t(        j*                  |      }d|_	        |j                          t        |       | j                  |j                  |       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   r   r     zignore thisr   Tr   r  r  )))Tr   )Fr   ))   r  )r   r   )rZ   r   rQ   )r   r   r   r   r  rc  r  r   r  r   r   r&   rk   r   r  r  rstriprn   rB   r   rz   rg  )	rp   r  rT   r   r  contentcasesrQ   rZ  s	            r   test_sys_exitz%_TestSubclassingProcess.test_sys_exit  s   99	!MM7>>tyyIJ!!	((&1 
 	F D$7$7vv>NOAAHGGIOQZZ+fw/ #1&&(#W^^-s6{;IIf	  $ 	7ND(4( 7LLtL<	Q  X67 7	7# #7 7s   F?A G?G	G	N)
ru   rv   rw   r   r  r  r  r  r  r  rZ   r   r   r  r    s>    "M/"    
&7r   r  c                 `    t        | d      r| j                         S | j                         dk(  S )Nemptyr   )r7  r  qsize)r   s    r   queue_emptyr    s(    q'wwywwyA~r   c                 `    t        | d      r| j                         S | j                         |k(  S )Nfull)r7  r  r  )r   maxsizes     r   
queue_fullr     s(    q&vvxwwyG##r   c                       e Zd Zed        Zd Zed        Zd Zed        Zd Z	d Z
ed        Zd	 Zd
 Zd Zd Zd Zd Zy)
_TestQueuec                     |j                          t        d      D ]  }|j                           |j                          y )N   )r   rS  r   rd  )r   r"   child_can_startparent_can_continuerV  s        r   	_test_putz_TestQueue._test_put  s6    q 	AIIK	!r   c                    d}| j                  |      }| j                         }| j                         }| j                  | j                  |||f      }d|_        |j                          | j                  t        |      d       | j                  t        ||      d       |j                  d       |j                  dd       |j                  ddd        |j                  d	d       |j                  d
dd        |j                  d       t        j                  t               | j                  t        |      d       | j                  t        ||      d       t        |j                        }t        |j                        }| j                  t         j"                  |dd       | j%                  |j&                  d       | j                  t         j"                  |ddd        | j%                  |j&                  d       | j                  t         j"                  |d       | j%                  |j&                  d       | j                  t         j"                  |ddt(               | j%                  |j&                  t(               | j                  t         j"                  |ddt*               | j%                  |j&                  d       | j                  t         j"                  |ddt,               | j%                  |j&                  t,               |j/                          |j1                          | j                  t        |      d       | j                  t        ||      d       |j3                          t5        |       y )Nr  r  r   TFr   r  r  ra   r      r   r  )r   r  r   r  r   r   rk   r  r   r   
put_nowaitr   r  rN  r}   rl   pyqueueFullr   r   TIMEOUT1TIMEOUT2TIMEOUT3rd  r   r   r#   )rp   MAXSIZEr"   r  r  r  r   r  s           r   test_putz_TestQueue.test_put  s   

7
+**,"jjl||>>*=>   

U+T2E73U;		!		!T		!T4 		!U		!UD! 	

5U+U3E73T:EII&"5#3#34
',,Q6$$S[[!4',,Qt<$$S[[!4',,
A6$$Z%7%7;',,Qh?$$S[[(;',,Qx@$$S[[!4',,QhG$$S[[(;  "U+T2E73U;		Er   c                     |j                          |j                  d       |j                  d       |j                  d       |j                  d       |j                          y )Nr  r  ra   r   )r   r   rd  r   r"   r  r  s       r   	_test_getz_TestQueue._test_get<  sF    		!		!		!		!!r   c                    | j                         }| j                         }| j                         }| j                  | j                  |||f      }d|_        |j                          | j                  t        |      d       |j                          |j                          t        j                  t               | j                  t        |      d       | j                  |j                  dd       d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                         d	       | j                  t        |      d       t        |j                        }t        |j                        }| j!                  t"        j$                  |d       | j'                  |j(                  d
       | j!                  t"        j$                  |dd        | j'                  |j(                  d
       | j!                  t"        j$                  |       | j'                  |j(                  d
       | j!                  t"        j$                  |dt*               | j'                  |j(                  t*               | j!                  t"        j$                  |dt,               | j'                  |j(                  d
       | j!                  t"        j$                  |t.               | j'                  |j(                  t.               |j1                          t3        |       y )Nr   TFr  r  r   r  ra   r   r   )r   r  r   r  r   r   rk   r  rd  r   r   r  rN  r   
get_nowaitr}   rl   r  Emptyr   r   r  r  r  r   r#   )rp   r"   r  r  r  r   r  s          r   test_getz_TestQueue.test_getF  s[   

**,"jjl||>>*=>   

U+T2  "

5U+U3 	4.24!,1-q1))+Q/U+T2EII&"5#3#34
'--e4$$S[[!4'--eT:$$S[[!4'--4$$Z%7%7;'--dH=$$S[[(;'--eX>$$S[[!4'--h?$$S[[(;		Er   c                 H    t        dd      D ]  }|j                  |        y )Nr6  r  )rS  r   )r   r"   rV  s      r   
_test_forkz_TestQueue._test_fork{  s"    r2 	AIIaL	r   c                    | j                         }t        d      D ]  }|j                  |        t        j                  t
               | j                  | j                  |f      }d|_        |j                          t        d      D ]"  }| j                  |j                         |       $ | j                  t        j                  |j                  d       |j                          t!        |       y )Nr6  r   Tr  F)r   rS  r   r   r  rN  r   r  r   r   rk   r   rl   r  r  r   r#   )rp   r"   rV  r   s       r   	test_forkz_TestQueue.test_fork  s     

 r 	AIIaL	 	

5 LLuhL?		 r 	-AUYY[!,	-'--E:	Er   c                 @   | j                         }	 | j                  |j                         d       |j                  d       | j                  |j                         d       |j                  d       | j                  |j                         d       |j                          | j                  |j                         d       |j                          | j                  |j                         d       t        |       y # t        $ r | j	                  d       Y w xY w)Nr   zqsize method not implementedr   r   r  )r   rk   r  r   r   r   r   r#   rp   r   s     r   
test_qsizez_TestQueue.test_qsize  s    JJL	:QWWY* 	
aA&	aA&	A&	A&A # 	:MM89	:s    D   DDc                     t        |j                  d       D ]+  }t        j                  t               |j                          - y r   )r  r   r   r  rN  	task_done)r   r   objs      r   _test_task_donez_TestQueue._test_task_done  s1    t$ 	CJJuKKM	r   c                    | j                         }t        d      D cg c]   }| j                  | j                  |f      " }}|D ]  }d|_        |j                           t        d      D ]  }|j                  |        |j                          |D ]  }|j                  d         |D ]  }|j                           t        |       y c c}w )Nra   r   Tr6  )	JoinableQueuerS  r   r$  r   r   r   r   r#   )rp   r"   rV  workersr   s        r   test_task_donez_TestQueue.test_task_done  s    ""$ "!H& <<t';';5(<K & &  	AAHGGI	 r 	AIIaL	 	

 	AIIdO	  	AFFH	E#&s   %Cc                    t        j                         5  d}t        |dz   dd      5 }|j                  d       d d d        t	        j
                  t        j                               5  	 t        |       d d d        d d d        y # 1 sw Y   NxY w# t        j                  $ r | j                  d       Y Cw xY w# 1 sw Y   HxY w# 1 sw Y   y xY w)Nimported_by_an_imported_modulez.pyr  r  r  zif 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r   temp_cwdr  writer   DirsOnSysPathrB   getcwd
__import__r  r  ri   )rp   module_namer  s      r   test_no_import_lock_contentionz)_TestQueue.test_no_import_lock_contention  s    ! 	3:KkE)3A 	Q  	 ,,RYY[9 33{+3	3 	3	 	 }} 3II 2 333 3	3 	3sW   C
B/C
*B>,B7C
B	C
$B;8B>:B;;B>>C	C

Cc                    t        j                         }t        j                         }| j	                  t
        j                  |j                  dd       t        j                         |z
  }| j                  |d       t        |       y )NTg?r.   )
r   r   r   r   rl   r  r  r   assertGreaterEqualr#   )rp   r   r   deltas       r   test_timeoutz_TestQueue.test_timeout  sb    !!# '--e< 5( 	u-Ar   c                    | j                   dk7  r*| j                  dj                  | j                                 G d dt              }t        j
                  j                         5  | j                         }|j                   |              |j                  d       | j                  |j                  t
        j                               t        |       d d d        t        j
                  j                         5  | j                  d      }|j                   |              |j                  d       	 | j                  |j                         d       | j                  |j                  t
        j                               | j                  |j!                                t        |       d d d        y # 1 sw Y   xY w# t        $ r Y yw xY w# 1 sw Y   y xY w)	Nr   r   c                       e Zd Zd Zy)F_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec                     t         r   )rD   r   s    r   r   zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__  s    $$r   Nru   rv   rw   r   rZ   r   r   NotSerializabler8    s    %r   r;  Tr  r   r	  )r   r   r   objecttestr   captured_stderrr   r   r   r   r  r#   rk   r  r   r  )rp   r;  r   s      r   "test_queue_feeder_donot_stop_onexcz-_TestQueue.test_queue_feeder_donot_stop_onexc  sf   99#MM7>>tyyIJ	%f 	% \\))+ 	

AEE/#$EE$KOOAEE'*?*?E@AN	 \\))+ 	 

1
%AEE/#$EE$K  A.
 OOAEE'*?*?E@AOOAGGI&N	 		 	 '  	 	s>   'A2F<?:G: GAG<G	GGGGG c                    | j                   dk7  r*| j                  dj                  | j                                 G d dt               G fddt        j
                  j                        }        }t        j                  j                         5   |t	        j                               }|j                  |       |j                  d       | j                  |j                  t        j                  	             d d d        | j                  |j                         | j                  |j                          y # 1 sw Y   @xY w)
Nr   r   c                       e Zd ZdZd Zd Zy)K_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc                      d| _         d| _        y NF)reduce_was_called on_queue_feeder_error_was_calledr   s    r   r   zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__  s    ).&8=5r   c                     d| _         t        NT)rE  rD   r   s    r   r   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__  s    )-&$$r   N)ru   rv   rw   rx   r   r   rZ   r   r   r;  rB    s    ,>%r   r;  c                   &    e Zd ZdZe fd       Zy)E_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                 P    t        | t              rt        |      rd|_        y y y rH  )r   rD   rF  )r  r#  r;  s     r   _on_queue_feeder_errorz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_error  s)    q.1"38;?C8 9 2r   N)ru   rv   rw   rx   staticmethodrL  )r;  s   r   	SafeQueuerJ    s    C@ @r   rN  )rs   Tr  )r   r   r   r<  r   r   r   r=  r   r>  get_contextr   r   r   r  rE  rF  )rp   rN  not_serializable_objr   r;  s       @r   'test_queue_feeder_on_queue_feeder_errorz2_TestQueue.test_queue_feeder_on_queue_feeder_error  s     99#MM7>>tyyIJ	%f 	%	@..44 	@  /0\\))+ 	Bo99;<AEE&' EE$KOOAEE'*?*?E@A	B 	,>>?,MMN	B 	Bs   A-E  E	c                 l   t        j                         t        j                         fD ]q  }|j                          | j	                  t
        d      5  |j                  d       d d d        | j	                  t
        d      5  |j                          d d d        s y # 1 sw Y   ;xY w# 1 sw Y   xY w)Nz	is closedfoo)r   r   r&  r    assertRaisesRegexrE   r   r   r  s     r   $test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptions1  s     &&(/*G*G*II 	AGGI''
K@ e''
K@  		  s   BB*B'	*B3	N)ru   rv   rw   r  r  r  r  r  r  r  r   r$  r(  r1  r5  r?  rQ  rU  rZ   r   r   r  r    s     " "9v " "3j  8   
,3*	@$OLr   r  c                       e Zd Zd Zd Zd Zy)	_TestLockc                 F   | j                         }| j                  |j                         d       | j                  |j                  d      d       | j                  |j                         d        | j	                  t
        t        j                  f|j                         y NTF)Lockrk   acquirereleaserl   rE   r  ThreadErrorrp   locks     r   	test_lockz_TestLock.test_lock>  sq    yy{.e,e4.:y'<'<=t||Lr   c                    | j                         }| j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d        | j                  |j                         d        | j                  |j                         d        | j	                  t
        t        f|j                         y rH  )RLockrk   r[  r\  rl   r  r4  r^  s     r   
test_rlockz_TestLock.test_rlockE  s    zz|......><8$,,Gr   c                 P    | j                         5  	 d d d        y # 1 sw Y   y xY wr   rZ  r   s    r   test_lock_contextz_TestLock.test_lock_contextO  s#    YY[ 		 	 	s   %N)ru   rv   rw   r`  rc  rf  rZ   r   r   rW  rW  <  s    MHr   rW  c                   $    e Zd Zd Zd Zd Zd Zy)_TestSemaphorec                 Z   | j                  dt        |       | j                  |j                         d       | j                  dt        |       | j                  |j                         d       | j                  dt        |       | j                  |j                  d      d       | j                  dt        |       | j                  |j	                         d        | j                  dt        |       | j                  |j	                         d        | j                  dt        |       y )Nr  Tr   r   F)r   r   rk   r[  r\  rp   sems     r   _test_semaphorez_TestSemaphore._test_semaphoreV  s    ''9c:-''9c:-''9c:U+U3''9c:-''9c:-''9c:r   c                 $   | j                  d      }| j                  |       | j                  |j                         d        | j	                  dt
        |       | j                  |j                         d        | j	                  dt
        |       y )Nr  r  ra   )	Semaphorerl  rk   r\  r   r   rj  s     r   test_semaphorez_TestSemaphore.test_semaphorec  sn    nnQS!-''9c:-''9c:r   c                 H    | j                  d      }| j                  |       y Nr  )BoundedSemaphorerl  rj  s     r   test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphorek  s     ##A&S!r   c                    | j                   dk7  r*| j                  dj                  | j                                | j                  d      }t	        |j
                        }| j                   |d      d       | j                  |j                  d       | j                   |dd       d       | j                  |j                  d       | j                   |dt              d       | j                  |j                  d       | j                   |dt              d       | j                  |j                  t               | j                   |t              d       | j                  |j                  t               y )Nr   r   r   Fr3   Tr  )r   r   r   rn  r}   r[  rk   r   r   r  r  r  )rp   rk  r[  s      r   r5  z_TestSemaphore.test_timeouts  s   99#MM7>>tyyIJnnQ,/$$W__c:-u5$$W__c:159$$W__a8x0%8$$W__h?2E:$$W__h?r   N)ru   rv   rw   rl  ro  rs  r5  rZ   r   r   rh  rh  T  s    ;;"@r   rh  c                       e Zd Zedd       Zd Zd Zd Zd Zd Z	d Z
ed	        Z ej                  ed
      d        Zed        Z ej                  ed
      d        Zed        Zd Zy)_TestConditionNc                     |j                          |j                          |j                  |       |j                          |j                          y r   )r[  r\  r   )r   condsleepingwokenr6   s        r   r  z_TestCondition.f  s5    		'r   c                     t        d      D ])  }	  |       |k(  r n	 t        j                  t               + t        j                  t               | j                  ||       y # t        $ r Y  8w xY wNr6  )rS  r   r   r  rN  r   )rp   r   r   rV  s       r   assertReachesEventuallyz&_TestCondition.assertReachesEventually  sk    r 	A6U? # JJu	 	

5''t4	 ' s   
A$$	A10A1c                 &   | j                   dk(  rs	 |j                  j                         |j                  j                         z
  }| j	                  |d       | j	                  |j
                  j                         d       y y # t        $ r Y y w xY w)Nr   r   )r   _sleeping_countr   _woken_countrk   _wait_semaphorer   )rp   rx  sleeperss      r   check_invariantz_TestCondition.check_invariant  s    99# 00::< --779:  1-  !5!5!?!?!A1E $ ' s   A1B 	BBc                    | j                         }| j                  d      }| j                  d      }| j                  | j                  |||f      }d|_        |j                          | j                  |j                         t        j                  | j                  |||f      }d|_        |j                          | j                  |j                         |j                          |j                          t        j                  t               | j                  dt        |       |j                          |j!                          |j#                          t        j                  t               | j                  dt        |       |j                          |j!                          |j#                          t        j                  t               | j                  dt        |       | j%                  |       |j                          y )Nr   r   Tr   r  )	Conditionrn  r   r  r   r   rc  r   r  r  r[  r   r  rN  r   r   notifyr\  r  )rp   rx  ry  rz  r   s        r   test_notifyz_TestCondition.test_notify  sq   ~~>>!$q!LLdHe-DLE		DFF$%1HI		 	 	

5''9e< 	 	

5''9e< 	 	

5''9e< 	T"	r   c                 z   | j                         }| j                  d      }| j                  d      t        d      D ]  }| j                  | j                  ||t
        f      }d|_        |j                          | j                  |j                         t        j                  | j                  ||t
        f      }d|_        |j                          | j                  |j                          t        d      D ]  }|j                           t        d      D ]  }j                           | j                  dt               | j                  |       t        d      D ]  }| j                  | j                  ||f      }d|_        |j                          | j                  |j                         t        j                  | j                  ||f      }d|_        |j                          | j                  |j                          t        d      D ]  }|j                           t!        j"                  t$               | j                  dt               |j                          |j'                          |j)                          | j+                  fdd       | j                  |       y )Nr   r  r   Tr  c                      t               S r   r   rz  s   r   <lambda>z0_TestCondition.test_notify_all.<locals>.<lambda>      Yu-= r   )r  rn  rS  r   r  r  r   r   rc  r   r  r  r[  r   r   r  r   r  rN  
notify_allr\  r}  rp   rx  ry  rV  r   r   rz  s         @r   test_notify_allz_TestCondition.test_notify_all  s;   ~~>>!$q! q 	$ADFF#'5("C  EAAHGGIOOAFF#  '+Xuh&GIAAHGGIOOAFF#	$ q 	A	 q 	AMMO	''9e< 	T" q 		$ADFF$%1HIAAHGGIOOAFF#  dHe5LMAAHGGIOOAFF#		$ q 	A	 	

5''9e< 	 	$$%=qA 	T"r   c                 J   | j                         }| j                  d      }| j                  d      t        d      D ]  }| j                  | j                  ||f      }d|_        |j                          | j                  |j                         t        j                  | j                  ||f      }d|_        |j                          | j                  |j                          t        d      D ]  }|j                           t        j                  t               | j                  dt                |j                          |j#                  d       |j%                          | j'                  fdd       |j                          |j#                  d	       |j%                          | j'                  fd
d       |j                          |j#                  d       |j%                          | j                  dt                | j)                  |       y )Nr   r  r   Tr  r  )nc                      t               S r   r  r  s   r   r  z._TestCondition.test_notify_n.<locals>.<lambda>4  r  r   ra   c                      t               S r   r  r  s   r   r  z._TestCondition.test_notify_n.<locals>.<lambda>;  r  r   )r  rn  rS  r   r  r   r   rc  r   r  r  r[  r   r  rN  r   r   r  r\  r}  r  r  s         @r   test_notify_nz_TestCondition.test_notify_n  s   ~~>>!$q! q 		$ADFF$%1HIAAHGGIOOAFF#  dHe5LMAAHGGIOOAFF#		$ q 	A	 	

5''9e< 	a 	$$%=qA 	a$$%=qA 	a''9e< 	T"r   c                 
   | j                         }t        |j                        }|j                           |t              }|j                          | j                  |d       | j                  |j                  t               y rD  )	r  r}   r   r[  r  r\  rk   r   r   )rp   rx  r   r   s       r   r5  z_TestCondition.test_timeoutG  s[    ~~TYY'8ne$$$T\\8<r   c                     |5  d_         |j                          |j                  fd      }|rj                   dk7  rt        j                  d       d d d        y # 1 sw Y   y xY w)Nr   c                  "     j                   dk(  S r`   r   states   r   r  z0_TestCondition._test_waitfor_f.<locals>.<lambda>U      EKKN r   ra   r   )r   r  wait_forrz   rg  )r   rx  r  rY  s     ` r   _test_waitfor_fz_TestCondition._test_waitfor_fP  sS     	EKKKM]]#:;FU[[A-	 	 	s   AAA(zneeds sharedctypesc                 v   | j                         }| j                  dd      | j                  | j                  |f      }d|_        |j                          |5  |j                  fd      }| j                  |       | j                  j                  d       d d d        t        d      D ]G  }t        j                  d       |5  xj                  d	z  c_	        |j                          d d d        I t        |       | j                  |j                  d       y # 1 sw Y   xY w# 1 sw Y   xY w)
NrV  rA   r   Tc                  "     j                   dk(  S Nr   r  r  s   r   r  z-_TestCondition.test_waitfor.<locals>.<lambda>d  r  r   r   ra   rt  r   )r  r   r   r  r   r   r  r   rk   r   rS  r   r  r  r&   r   )rp   rx  r   rY  rV  r  s        @r   test_waitforz_TestCondition.test_waitforY  s    ~~

3#LL 4 4D%=LI		 	-]]#:;FOOF#U[[!,	-
 q 	AJJt q  	 	QQ'	- 	- s   AD#&D/#D,/D8	c                    |j                          |5  d}t        j                         }|j                  fd|      }t        j                         |z
  }|s|dz  |cxk  r|dz  k  r
n nd|_        d d d        y # 1 sw Y   y xY w)Nr.   c                  "     j                   dk(  S r`   r  r  s   r   r  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>w  r  r   r  g333333?r]  T)r\  r   r   r  r   )r   rx  r  successrk  rZ  dtrY  s     `     r   _test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_fq  sw     	%H!B]]#:H]MF!B&BhnrCHtOC $	% 	% 	%s   A!A>>Bc                 j   | j                         }| j                  dd      }| j                  dd      }| j                  d      }| j                  | j                  ||||f      }d|_        |j                          | j                  |j                  t        j                               t        d      D ]G  }t        j                  d       |5  |xj                  d	z  c_        |j                          d d d        I t!        |       | j                  |j                         y # 1 sw Y   zxY w)
NrV  r   Fr   Tr  r  rt  r   )r  r   rn  r   r  r   r   r   r[  r   r  rS  r   r  r   r  r&   )rp   rx  r  r  rk  r   rV  s          r   test_waitfor_timeoutz#_TestCondition.test_waitfor_timeout}  s     ~~

3"**S%(nnQLL < <#UGS9  ;		G,@,@AB q 	AJJt q  	 	Q& s   &D))D2	c                     |5  |j                          d d d        t        j                  d       |%t        j                  |t
        j                         y y # 1 sw Y   FxY wr   )r  r   r  rB   rD  r8  r  )r   r   r   s      r   _test_wait_resultz _TestCondition._test_wait_result  sJ     	HHJ	

1?GGC' 	 	s   AA"c                 J   t        | t              r(t        j                  dk7  rt	        j
                         }nd }| j                         }|5  | j                  |j                  d             | j                  |j                  d             | j                  | j                  ||f      }|j                          | j                  |j                  d             |!| j                  t        |j                  d       |j                          d d d        y # 1 sw Y   y xY w)Nr1   r   r.   r   <   )r   ProcessesMixinrz   r{   rB   r   r  r   r   r   r  r   r   rl   KeyboardInterruptr   )rp   r   r   r   s       r   test_wait_resultz_TestCondition.test_wait_result  s    dN+0G))+CCNN 	QVVAY'QVVC[)D$:$:!SJAGGIOOAFF2J'!!"3QVVR@FFH	 	 	s   CDD"r   )ru   rv   rw   r  r  r}  r  r  r  r  r5  r  rF   r  HAS_SHAREDCTYPESr  r  r  r  r  rZ   r   r   rv  rv    s     	5	+Z<#|0#d=   X)+?@( A(. 	% 	% X)+?@' A'. ( (r   rv  c                   *    e Zd Zed        Zd ZddZy)
_TestEventc                 V    t        j                  t               |j                          y r   )r   r  r  rd  r^  s     r   _test_eventz_TestEvent._test_event  s    

8		r   c                 |   | j                         }t        |j                        }| j                  |j	                         d       | j                   |d      d       | j                  |j                  d       | j                   |t              d       | j                  |j                  t               |j                          | j                  |j	                         d       | j                   |       d       | j                  |j                  d       | j                   |t              d       | j                  |j                  d       |j                          | j                  | j                  |f      }d|_        |j                          | j                   |       d       |j                          y )NFr3   Tr   )r  r}   r   rk   r  r   r   r  rd  r  r   r  r   r   r   )rp   r_  r   r   s       r   
test_eventz_TestEvent.test_event  sF   

UZZ( 	/ 	cE*$$T\\37h/$$T\\8<		 	.&$$T\\37h.$$T\\37 	 LL 0 0xL@		&	r   Nc                    | j                         }| j                  dk(  rr| j                  t        |      d       |j	                          | j                  t        |      d       |j                          | j                  t        |      d       y | j                  dk(  rG| j                  t        |      d       |j	                          | j                  t        |      d       y y )Nr   z<Event at .* unset>z<Event at .* set>r   z(<EventProxy object, typeid 'Event' at .*)r  r   assertRegexreprrd  r  )rp   r_  s     r   	test_reprz_TestEvent.test_repr  s    

99#T%[*@AIIKT%[*>?KKMT%[*@AYY)#T%[*UVIIKT%[*UV $r   )returnN)ru   rv   rw   r  r  r  r  rZ   r   r   r  r    s      !FWr   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)
_DummyListc                     t         j                  j                  t        j                  d            }t        j
                         }| j                  ||f       d| j                  d<   y )NrV  r   )r   heapBufferWrapperstructcalcsizerZ  __setstate__
_lengthbuf)rp   wrapperr_  s      r   r   z_DummyList.__init__  sO    !&&44V__S5IJ##%7D/*r   c                 ~    |\  | _         | _        | j                   j                         j                  d      | _        y )NrV  )_wrapper_lockcreate_memoryviewcastr  )rp   r  s     r   r  z_DummyList.__setstate__  s/    &+#
--99;@@Er   c                 2    | j                   | j                  fS r   )r  r  r   s    r   __getstate__z_DummyList.__getstate__  s    tzz**r   c                 t    | j                   5  | j                  dxx   dz  cc<   d d d        y # 1 sw Y   y xY wNr   r   r  r  )rp   _s     r   rX  z_DummyList.append  s2    ZZ 	$OOA!#	$ 	$ 	$s   .7c                 d    | j                   5  | j                  d   cd d d        S # 1 sw Y   y xY wr  r  r   s    r   __len__z_DummyList.__len__  s*    ZZ 	&??1%	& 	& 	&s   &/N)ru   rv   rw   r   r  r  rX  r  rZ   r   r   r  r    s    F+$&r   r  c                  .    t        j                  d       y )Nrt  r*  rZ   r   r   _waitr  	  s    JJtr   c                   6    e Zd ZdZd	dZd Zd Zd Zd Zd Z	y)
Bunchz
    A bunch of threads.
    c                    || _         || _        || _        |j                         | _        |j                         | _        |j                         | _        |s| j                  j                          g }t        |      D ]F  }|j                  | j                        }d|_        |j                          |j                  |       H d }	t        j                   | |	|      | _        y)z
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        r   Tc                 2    | D ]  }|j                           y r   )r   )r   r   s     r   finalizez Bunch.__init__.<locals>.finalize(  s     r   N)r  rQ   r  	DummyListstartedfinishedr  	_can_exitrd  rS  r   taskr   r   rX  rk  r  
_finalizer)
rp   	namespacer  rQ   r  wait_before_exitr   rV  r   r  s
             r   r   zBunch.__init__  s     	 **,!++-"*NN q 	A!!!3AAHGGINN1			 "**47Cr   c                 x   t        j                         }| j                  j                  |       	  | j                  | j
                    | j                  j                  |       | j                  j                  d       y # | j                  j                  |       | j                  j                  d       w xY w)N   )	rB   r   r  rX  r  rQ   r  r  r   rp   r   s     r   r  z
Bunch.task.  s    iikC 	+DFFDIIMM  %NN# MM  %NN#s   B 8B9c                     t        | j                        | j                  k  r.t                t        | j                        | j                  k  r-y y r   )r   r  r  r  r   s    r   wait_for_startedzBunch.wait_for_started8  s3    $,,$&&(G $,,$&&(r   c                     t        | j                        | j                  k  r.t                t        | j                        | j                  k  r-y y r   )r   r  r  r  r   s    r   wait_for_finishedzBunch.wait_for_finished<  s3    $-- 466)G $-- 466)r   c                 8    | j                   j                          y r   )r  rd  r   s    r   	do_finishzBunch.do_finish@  s    r   c                 $    | j                          y r   )r  r   s    r   r    zBunch.closeC  s    r   Nr  )
ru   rv   rw   rx   r   r  r  r  r  r    rZ   r   r   r  r    s&    D8+r   r  c                       e Zd Zd Zd Zy)
AppendTruec                     || _         y r   )r#  )rp   r#  s     r   r   zAppendTrue.__init__H  s	    r   c                 :    | j                   j                  d       y rH  )r#  rX  r   s    r   r   zAppendTrue.__call__J  s    r   Nr   rZ   r   r   r  r  G  s    r   r  c                      e Zd ZdZdZdZd Zd Zd Zd Z	e
d        Zdd	Zd
 Ze
d        Zd Ze
d        Zd Ze
d        Zd Ze
d        Zd Ze
d        Zd Ze
d        Zd Ze
d        Zd Zd Ze
d        Zd Zy)_TestBarrierz$
    Tests for Barrier objects.
    r   g      >@c                 \    | j                  | j                  | j                        | _        y )Nr  )Barrierrx  defaultTimeoutbarrierr   s    r   setUpz_TestBarrier.setUpU  s     ||DFFD4G4G|Hr   c                 F    | j                   j                          d | _         y r   )r  abortr   s    r   tearDownz_TestBarrier.tearDownX  s    r   c                     | j                   dk(  rg S | j                   dk(  r| j                  j                         S t               S )Nr   r   )r   r   r   r  r   s    r   r  z_TestBarrier.DummyList\  s:    99	!IYY)#<<$$&&<r   c                     t        | ||| j                  dz
        }	  ||  |j                          |j                          y # |j                          w xY wr   )r  rx  r  r    )rp   r  rQ   r   s       r   run_threadsz_TestBarrier.run_threadsd  sE    $4*	tH!GGIAGGIs   A Ac                     |j                   }t        |      D ]J  }|d   j                  d       |j                          |d   j                  d       |j                          L y # t        $ r Y y w xY w)Nr   Tr   )partiesrS  rX  r   r   )r   r  resultsr  mrV  s         r   	multipassz_TestBarrier.multipassl  sk    OOq 	AAJd#LLNAJd#LLN		" 		s   &	A21A2c                     | j                         | j                         g}| j                  | j                  | j                  ||f       y)z;
        Test that a barrier is passed in lockstep
        N)r  r  r  r  )rp   passesr   s      r   test_barrierz_TestBarrier.test_barrier}  s;     >>#T^^%56$,,)HIr   c                 $    | j                  d      S )zC
        Test that a barrier works for 10 consecutive runs
        r6  )r  r   s    r   test_barrier_10z_TestBarrier.test_barrier_10  s       $$r   c                 F    |j                         }|j                  |       y r   )r   r   )r   r  r"   r   s       r   _test_wait_return_fz _TestBarrier._test_wait_return_f  s    lln		#r   c                 6   | j                         }| j                  | j                  | j                  |f       t	        | j
                        D cg c]  }|j                          }}| j                  |j                  d      d       t        |       yc c}w )z9
        test the return value from barrier.wait
        r   r   N)
r   r  r	  r  rS  rx  r   rk   countr#   )rp   r"   rV  r   s       r   test_wait_returnz_TestBarrier.test_wait_return  su     

11DLL%3HI(-dff61599;66q)1-E 7s   Bc                 L    |j                          t        |      dk7  rt        y r   )r   r   r4  )r   r  r   s      r   _test_action_fz_TestBarrier._test_action_f  s"    w<1 r   c                     | j                         }| j                  | j                  t        |            }| j	                  | j
                  ||f       | j                  t        |      d       y)z,
        Test the 'action' callback
        )r  r   N)r  r  rx  r  r  r  rk   r   )rp   r   r  s      r   test_actionz_TestBarrier.test_action  sZ     ..",,tvvj.A,B,,w.@AWq)r   c                     	 |j                         }|| j                  dz  k(  rt        |j                          |j                  d       y # t        j
                  $ r |j                  d       Y y t        $ r |j                          Y y w xY wNr  T)r   rx  r4  rX  r  BrokenBarrierErrorr  )r   r  results1results2rV  s        r   _test_abort_fz_TestBarrier._test_abort_f  sn    		ACEE1H}""LLNOOD!++ 	"OOD! 	MMO	s   A	A $B2BBc                 f   | j                         }| j                         }| j                  | j                  | j                  ||f       | j	                  t        |      d       | j	                  t        |      | j                  dz
         | j                  | j                  j                         y)zK
        Test that an abort will put the barrier in a broken state
        r   r   N)	r  r  r  r  rk   r   rx  r   broken)rp   r  r  s      r   
test_abortz_TestBarrier.test_abort  s     >>#>>#++,,(;	=X*Xq1++,r   c                    |j                         }|| j                  dz  k(  r_|j                  | j                  dz
  k  r2t        j                  d       |j                  | j                  dz
  k  r2|j                          n"	 |j                          |j                  d       |j                          |j                  d       y # t        j                  $ r |j                  d       Y Hw xY w)Nr  r   ru  T)	r   rx  	n_waitingr   r  resetrX  r  r  )r   r  r  r  results3rV  s         r   _test_reset_fz_TestBarrier._test_reset_f  s    LLNq=##ceeAg-

5! ##ceeAg-MMO&% 		 // &%&s   !C $C-,C-c                    | j                         }| j                         }| j                         }| j                  | j                  | j                  |||f       | j	                  t        |      d       | j	                  t        |      | j                  dz
         | j	                  t        |      | j                         y)zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   r   N)r  r  r  r  rk   r   rx  )rp   r  r  r  s       r   
test_resetz_TestBarrier.test_reset  s     >>#>>#>>#++,,(HE	GX*Xq1X/r   c                    	 |j                         }|| j                  dz  k(  rt        |j                          |j                  d       |j                         | j                  dz  k(  r|j                          |j                          |j                          |j                  d       y # t        j
                  $ r |j                  d       Y t        $ r |j                          Y w xY wr  )r   rx  r4  rX  r  r  r  r  )r   r  barrier2r  r  r  rV  s          r   _test_abort_and_reset_fz$_TestBarrier._test_abort_and_reset_f  s    		ACEE1H}""LLNOOD! ==?ceeQh&MMO ++ 	"OOD! 	MMO	s   A	B- -$C.C.-C.c                    | j                         }| j                         }| j                         }| j                  | j                        }| j                  | j                  | j
                  ||||f       | j                  t        |      d       | j                  t        |      | j                  dz
         | j                  t        |      | j                         y)zF
        Test that a barrier can be reset after being broken.
        r   r   N)r  r  rx  r  r#  r  rk   r   )rp   r  r  r  r"  s        r   test_abort_and_resetz!_TestBarrier.test_abort_and_reset  s     >>#>>#>>#<<'55,,(HhO	QX*Xq1X/r   c                     |j                         }|| j                  dz  k(  rt        j                  d       	 |j                  d       y # t        j
                  $ r |j                  d       Y y w xY w)Nr        ?r  T)r   rx  r   r  r  r  rX  r   r  r   rV  s       r   _test_timeout_fz_TestBarrier._test_timeout_f  sY    LLNq=JJsO	!LL++ 	!NN4 	!s   A $A21A2c                     | j                         }| j                  | j                  | j                  |f       | j	                  t        |      | j                  j                         y)z$
        Test wait(timeout)
        N)r  r  r)  r  rk   r   r  )rp   r   s     r   r5  z_TestBarrier.test_timeout  sM     .."--g/FGWt||';';<r   c                     |j                  | j                        }|| j                  dz  k(  rt        j                  d       	 |j                          y # t
        j                  $ r |j                  d       Y y w xY w)Nr  r'  T)r   r  rx  r   r  r  r  rX  r(  s       r   _test_default_timeout_fz$_TestBarrier._test_default_timeout_f  s_    LL++,q=JJsO	!LLN++ 	!NN4 	!s   A $A<;A<c                     | j                  | j                  d      }| j                         }| j                  | j                  ||f       | j                  t        |      |j                         y)z4
        Test the barrier's default timeout
        r  r  N)r  rx  r  r  r,  rk   r   r  )rp   r  r   s      r   test_default_timeoutz!_TestBarrier.test_default_timeout#  sY     ,,tvvs,3.."557IJWw7r   c                 f    | j                  d      }|j                          |j                          y r   )r  r   )rp   r   s     r   test_single_threadz_TestBarrier.test_single_thread,  s!    LLO		r   c                     t        |      D ].  }|j                          |5  |j                  |       d d d        0 y # 1 sw Y   ;xY wr   )rS  r   r   )r   r  r  connr_  rV  s         r   _test_thousand_fz_TestBarrier._test_thousand_f1  sF    v 	ALLN 		! 	 s	   >A	c                 6   | j                   dk(  r*| j                  dj                  | j                                d}| j                         }| j	                  d      \  }}t        | j                        D ]X  }| j                  | j                  | j                  |||f      }|j                          | j                  |j                         Z t        |      D ]<  }t        | j                        D ]"  }| j                  |j                         |       $ > y )Nr   r     Fr   )r   r   r   rZ  r   rS  rx  r   r3  r  r   rc  r   rk   r   )rp   r  r_  r2  r  jr   rV  s           r   test_thousandz_TestBarrier.test_thousand8  s    99	!MM7>>tyyIJyy{99U+jtvv 	$AD$9$9!%vz4 H  JAGGIOOAFF#		$ v 	1A466] 1  a01	1r   Nr   )ru   rv   rw   rx   rx  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r   r#  r%  r)  r5  r,  r.  r0  r3  r7  rZ   r   r   r  r  N  s    	
ANI  " " J%    
* 
 

-  "0  *0 ! != ! !8
  1r   r  c            	       f    e Zd ZdZddddd ed       ed      fgZd	 Zed
        ZddZ	d Z
d Zy)
_TestValuer  )rV  i  i^  )dg      @g      )hi   )r                   r   xyc                 4    t         s| j                  d       y y Nz%requires multiprocessing.sharedctypesr  r   r   s    r   r  z_TestValue.setUpX      MMAB  r   c                 T    t        || j                        D ]  \  }}|d   |_         y rq  )zipcodes_valuesr   )r   valuessvcvs       r   r   z_TestValue._test\  s-    &#"2"23 	FB!uBH	r   c           	      h   |r2| j                   D cg c]  \  }}}| j                  ||       }}}}n1| j                   D cg c]  \  }}}| j                  ||       }}}}t        || j                         D ]$  \  }}| j	                  |j
                  |d          & | j                  | j                  |f      }d|_        |j                          |j                          t        || j                         D ]$  \  }}| j	                  |j
                  |d          & y c c}}}w c c}}}w )Nr   r   Tr  )rG  RawValuer   rF  rk   r   r   r   r   r   r   )	rp   rawcoder   r  rH  rI  rJ  r  s	            r   
test_valuez_TestValue.test_valueb  s(   ,0,=,=? ?($q mmD%0 ?F ? -1,=,=? ?($q jju- ?F ? &$"3"34 	.FBRXXr!u-	. ||4::VI|>

		&$"3"34 	.FBRXXr!u-	.??s   D&D-c                 (    | j                  d       y NT)rM  )rO  r   s    r   test_rawvaluez_TestValue.test_rawvalueu  s    D!r   c                    | j                  dd      }|j                         }|j                         }| j                  ddd       }|j                         }|j                         }| j                         }| j                  dd|      }|j                         }	|j                         }
| j	                  ||	       | j                  ddd      }| j                  t        |d             | j                  t        |d             | j                  t        | j                   ddd       | j                  dd      }| j                  t        |d             | j                  t        |d             y )NrV  r   r_  Fget_lockget_objnavalue)
r   rU  rV  rZ  rk   r   r7  rl   rD   rL  )rp   val1lock1obj1val2lock2obj2r_  val3lock3obj3arr4arr5s                r   test_getobj_getlockz_TestValue.test_getobj_getlockx  s,   zz#q!||~zz#qtz,||~yy{zz#qtz,||~u%zz#quz-z23y12.$**c19M}}S!$z23y12r   Nr  )ru   rv   rw   r   r   rG  r  r  r   rO  rR  rc  rZ   r   r   r9  r9  L  sW    "M 		eCj%*%
LC  
.&"3r   r9  c                       e Zd ZdZed        Z ej                  edu d      d	d       Z	 ej                  edu d      d        Z
 ej                  edu d      d        Z ej                  edu d      d        Zy)

_TestArrayr  c                 ^    t        dt        |            D ]  }||xx   ||dz
     z  cc<    y r   )rS  r   )r   seqrV  s      r   r  z_TestArray.f  s2    q#c(# 	AFc!A#hF	r   Nzrequires _ctypesc                    g d}|r| j                  d|      }n| j                  d|      }| j                  t        |      t        |             | j                  |d   |d          | j                  t	        |dd       t	        |dd              t        j
                  dg d      x|dd |dd | j                  t	        |d d        |       | j                  |       | j                  | j                  |f	      }d
|_        |j                          |j                          | j                  t	        |d d        |       y )N)
i  ir  i  i5        i$  i  i  i?  rV  r  r  r
  )r   r  r  ra   ra   r  r   T)RawArrayArrayrk   r   r   arrayr  r   r   r   r   )rp   rM  rg  arrr   s        r   
test_arrayz_TestArray.test_array  s   @--S)C**S#&CS3s8,QQ(c!Ahc!Ah8#kk#|<<Aa3q8c!fs+sLLcVL4			c!fs+r   c           	      8   d}t        d      D ]  }| j                  d|      }| j                  t        |      |       | j                  t	        |      dg|z         t        d      |d d  | j                  t	        |      t	        t        d                   ~ y )Nr6  r  rV  r   )rS  rl  rk   r   r   )rp   sizer  rn  s       r   test_array_from_sizez_TestArray.test_array_from_size  s    
 q 	A**S$'CSXt,T#Yd
32YCFT#YU2Y8	r   c                 (    | j                  d       y rQ  )ro  r   s    r   test_rawarrayz_TestArray.test_rawarray  s    D!r   c                    | j                  dt        t        d                  }|j                         }|j	                         }| j                  dt        t        d            d       }|j                         }|j	                         }| j                         }| j                  dt        t        d            |      }|j                         }	|j	                         }
| j                  ||	       | j                  dt        d      d      }| j                  t        |d             | j                  t        |d             | j                  t        | j                   dt        d      d       | j                  dt        d            }| j                  t        |d             | j                  t        |d             y )NrV  r6  rT  FrU  rV  notalock)rl  r   rS  rU  rV  rZ  rk   r   r7  rl   rD   rk  )rp   arr1rY  rZ  arr2r\  r]  r_  arr3r_  r`  ra  rb  s                r   test_getobj_getlock_objz"_TestArray.test_getobj_getlock_obj  sX   zz#tE"I/||~zz#tE"ITz:||~yy{zz#tE"ITz:||~u%zz#uRyuz5z23y12.**c59: 	 	G }}S%),z23y12r   r  )ru   rv   rw   r   r  r  rF   ry   r<   ro  rr  rt  rz  rZ   r   r   re  re    s    "M  X__Ud]$67, 8,0 X__Ud]$67 8 X__Ud]$67" 8" X__Ud]$673 83r   re  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)_TestContainersr   c                    | j                  t        t        d                  }| j                  |d d  t        t        d                   | j                         }| j                  |d d  g        |j                  t        t        d                   | j                  |d d  t        t        d                   | j                  |d   d       | j                  |dd g d       |dz  }| j                  |d d  g d       | j                  |ddgz   g d       | j                  |d d  t        t        d                   ||g}| j                  |      }| j                  |D cg c]  }|d d  	 c}g dg dg       | j                  |g      }|j	                  d	       | j                  |d
   d d  g d       y c c}w )Nr6  r   r  )r  r  ra   )
r   r   r  r  ra   r   r   r  r  ra   r  )r   r   r  r  ra   r   r   r  r  ra   r   r  )
r   r   r  r  ra   r   r  r
  r  	   r  r   )r   r   r  r  ra   r   r  r
  r  r  r  )r   rS  rk   extendrX  )rp   r   r   r:  r  elementr  s          r   	test_listz_TestContainers.test_list  sz   IId59o&1tE"I/IIK1r"	eAh 1tE!H~.1q!1R'*	Q1=>aV%IJ1tE"I/FIIaL'()GWQZ)+-KL	
 IIqcN	1a"IJ *s   &F>c                 F   | j                  t        t        d                  }t        |      }| j                  t        |      t        t        d                   | j                  t        |      g        t        |      }d|d<   | j                  t	        |      d       y )Nr6  r)  r   )r   rS  r  rk   next)rp   r   its      r   test_list_iterz_TestContainers.test_list_iter	  sw    IId59o&!Wb4b	?3b2&!W!b3'r   c           
         | j                  t        d      D cg c]  }| j                  t        d             c}      }| j                  |D cg c]  }|d d  	 c}g dgdz         d|d   d<   | j                  |d   d d  g d       t        dd      D ]  }| j                  ||   d d  g d        | j                  |d   j                         d       | j                  t	        |d         d       t        ddd      D ]   }| j                  t	        ||         d       " ~| j                         }|j                  |       ~y c c}w c c}w )	Nr  )r   r   r  7   r   rA   )r   r   r  r   r  )r   rS  rk   popr   rX  )rp   _ir   innerrV  r   s         r   test_list_proxy_in_listz'_TestContainers.test_list_proxy_in_list	  s,   IIU1X>rtyyq*>?2u%(2YK!OD!R1a*-q! 	1AQqT!Wi0	1 	1Q'QqTA&q!Q 	+AS1Y*	+ IIK	# ?2s   !EEc           
      B   | j                         }t        t        dd            }|D ]  }t        |      ||<    | j	                  |j                         t        d |D                     | j	                  t        |j                               |       | j	                  t        |j                               |D cg c]  }t        |       c}       | j	                  t        |j                               |D cg c]  }|t        |      f c}       y c c}w c c}w )NA   F   c              3   6   K   | ]  }|t        |      f  y wr   )chr.0rV  s     r   	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>+	  s     'ECF'Es   )
dictr   rS  r  rk   r   sortedkeysrH  r  )rp   r:  indicesrV  s       r   	test_dictz_TestContainers.test_dict&	  s    IIKuR}% 	Aq6AaD	4'EW'E#EF)73
+g-Fc!f-FG	*',JQaQ[,JK .G,Js   ;D
;D
c                 f   | j                         }t        t        dd            }|D ]  }t        |      ||<    t	        |      }| j                  t        |      |       | j                  t        |      g        t	        |      }|j                          | j                  t        t        |       y )Nr  r  )
r  r   rS  r  r  rk   r  rl   r4  r  )rp   r:  r  rV  r  s        r   test_dict_iterz_TestContainers.test_dict_iter0	  s    IIKuR}% 	Aq6AaD	!Wb7+b2&!W		,b1r   c                    | j                  dd      }| j                  dd      }| j                  ||      }| j                  |d   d       | j                  |d	   d   d       d
|d	   d<   | j                  |d   d
       | j                  |d	   d   d
       d|d	   d<   | j                  |d   d       | j                  |d	   d   d       ~~| j                  |d   d   d       d|d	   d<   | j                  |d	   d   d       |d   }|d	   }d|d<   | j                  |d   d       | j                  |d	   d   d       |j                          | j                  t        |      d       | j                  |d   d       | j                  |d   d       | j	                  ||g      }d|d   d<   | j                  |d   d       | j                  |d   d   d       ~~| j                  |d   d   d       | j	                  ddg|g      }| j                  |d   t               | j                  |d   d   d   d       y )Nr  ra   )ferretshamstersr6  r  )waterfeed)petssuppliesr  r  r   blanketsr
  r  r     r   r  r   marmotsX   c   rA   r  )r  rk   r  r   r   r   )rp   r  r  r:  louters         r   test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nested=	  sf   yyQy/992A9.II4(I3'*B/:w/4$%*j!*-q1:z2A6!"*g'*A.:w/369-q1$&*j!:z2B7yZ='*A.:w/3		Q#'*A.j)1-IItX&'!Yi!,1i!,1i!,		B8Q-(eAh-r2v.2r   c                    | j                         }|j                  | j                                |d   j                  d       | j	                  |d   j                         d       | j                         }| j                         |d<   |d   j                  d       | j	                  |d   j                         d       y )Nr   {     )r   rX  r   r   rk   r   r  r   s      r   test_nested_queuez!_TestContainers.test_nested_queuek	  s    IIK		!1S)IIKzz|!	!1S)r   c                 F   | j                         }d|_        d|_        d|_        | j	                  |j                  |j                  fd       |`| j	                  t        |      d       | j                  t        |d             | j                  t        |d              y )NBobBuilderhidden)r  r  zNamespace(name='Bob')r+   job)	Namespacer+   r  _hiddenrk   rn   r   r7  )rp   r  s     r   test_namespacez_TestContainers.test_namespaceu	  s    NN	!&&!%%*<=EQ!896*+GAu--.r   N)ru   rv   rw   r   r  r  r  r  r  r  r  r  rZ   r   r   r|  r|    s2     MK>((L2,3\*	/r   r|  c                 6    t        j                  |       | | z  S r   r*  )r?  r   s     r   sqrr  	  s    JJtQ3Jr   c                     | |z  S r   rZ   )r?  r@  s     r   mulr  	      Q3Jr   c                 H    t        j                  |        t        ddz        )Nr?  i   )r   r  rE   r4   s    r   raise_large_valuerrorr  	  s    JJt
S7]
##r   c                     | S r   rZ   r?  s    r   identityr  	  s    Hr   c                       e Zd ZdZd Zd Zy)CountedObjectr   c                 V    | xj                   dz  c_         t        j                  |       S r   )n_instancesr<  __new__r+  s    r   r  zCountedObject.__new__	  s    1~~c""r   c                 @    t        |       xj                  dz  c_        y r   )r  r  r   s    r   __del__zCountedObject.__del__	  s    T
!#r   N)ru   rv   rw   r  r  r  rZ   r   r   r  r  	  s    K#$r   r  c                       e Zd Zy)SayWhenErrorNru   rv   rw   rZ   r   r   r  r  	  s    r   r  c              #   t   K   |dk(  rt        d      t        |       D ]  }||k(  rt        d      |  y w)NrA   zSomebody said when)r  rS  )totalwhenrV  s      r   exception_throwing_generatorr  	  sD     rz/005\ 9344s   68c                        e Zd Ze fd       Ze fd       Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zd Zed        Zd Zd Zd Zd Zd Z  xZ!S )	_TestPoolc                 N    t         |           | j                  d      | _        y r`   )super
setUpClassPoolpoolr   	__class__s    r   r  z_TestPool.setUpClass	  s    88A;r   c                     | j                   j                          | j                   j                          d | _         t        |           y r   )r  r	  r   r  tearDownClassr  s    r   r  z_TestPool.tearDownClass	  s2    r   c                     | j                   j                  }| j                   |t        d      t        d             | j                   |t        dddi      t        d             y )N)r   r   rZ   r?  r  r  )r  applyrk   r  )rp   papplys     r   
test_applyz_TestPool.test_apply	  sK    T*CF3R#a138<r   c                    | j                   j                  }| j                   |t        t	        t        d                  t	        t        t        t	        t        d                               | j                   |t        t	        t        d            d      t	        t        t        t	        t        d                               y )Nr6  r)  r  	chunksize)r  maprk   r  r   rS  )rp   pmaps     r   test_mapz_TestPool.test_map	  s|    yy}}c4b	?3T#c4b	?:S5TUc4c
#3rBc#tE#J'789	;r   c           
         | j                   j                  }t        t        t	        d      t	        ddd                  }| j                   |t        |      t        t        j                  t        |                   t        t        t	        d      t	        ddd                  }| j                   |t        |d      t        t        j                  t        |                   y )Nr6  r  rA   r)  r  r  r  )r  starmapr   rF  rS  rk   r  r   )rp   psmaptupless      r   test_starmapz_TestPool.test_starmap	  s    		!!c%)U1R_56sF+i//V<=	?c%*eBr2&678sFb9i//V<=	?r   c           
         t        t        t        d      t        ddd                  }| j                  | j                  j                  t        |      j                         t        t        j                  t        |                   y )Nr)  r  rA   )
r   rF  rS  rk   r  starmap_asyncr  r   r   r  )rp   r  s     r   test_starmap_asyncz_TestPool.test_starmap_async	  s_    c%*eBr2&67800f=AACi//V<=	?r   c                     | j                  | j                  j                  t        t	        t        d                  j                         t	        t        t        t	        t        d                               y r|  )rk   r  	map_asyncr  r   rS  r   r  r   s    r   test_map_asyncz_TestPool.test_map_async	  sK    ,,S$uRy/BFFHc#tE"I78	:r   c                 <   | j                   dk(  r| j                  j                         ng }| j                  j	                  t
        dg|j                  |j                        j                          | j                  dt        |             | j                  dg|d          | j                  j	                  t
        dg|j                  |j                        j                          | j                  dt        |             | j                  |d   t               y )Nr   1)callbackerror_callbackr   r   r   r  )r   r   r   r  r  rI  rX  r   rk   r   r   rE   )rp   	call_argss     r   test_map_async_callbacksz"_TestPool.test_map_async_callbacks	  s    +/99	+ADLL%%'r			C#%.%5%5+4+;+; 	 	==ATVC	N+!il+		C#%.%5%5+4+;+; 	 	==ATVC	N+ilJ7r   c                 :   | j                   dk(  r*| j                  dj                  | j                                 G d dt              }| j	                  t
              5  | j                  j                  t         |       gdz         d d d        y # 1 sw Y   y xY w)Nr   r   c                       e Zd Zd Zy)*_TestPool.test_map_unplicklable.<locals>.Ac                     t        d      )Nzcannot pickler3  r   s    r   r   z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__	  s    "?33r   Nr:  rZ   r   r   Ar  	  s    4r   r  r6  )	r   r   r   r<  rl   r4  r  r  r  )rp   r  s     r   test_map_unplicklablez_TestPool.test_map_unplicklable	  su    99	!MM7>>tyyIJ	4 	4 |, 	)IIMM#uRx(	) 	) 	)s   *BBc                     	 | j                   j                  t        g d      j                  t               y # t
        j                  $ r | j                  d       Y y w xY w)Nr   r  r  z2pool.map_async with chunksize stalled on null list)r  r  r  r   r  r   TimeoutErrorri   r   s    r   test_map_chunksizez_TestPool.test_map_chunksize	  sS    	LIIR1599(9K++ 	LIIJK	Ls   69 $A A c                    | j                   dk(  r*| j                  dj                  | j                                | j                  t              5  | j
                  j                  t        t        dd      d       d d d        | j                  t              5  | j
                  j                  t        t        dd      d       d d d        | j                  t              5  | j
                  j                  t        t        dd      d       d d d         G d d      }| j                  t              5  | j
                  j                  t         |       d       d d d        | j                  t              5  | j
                  j                  t         |       d       d d d        y # 1 sw Y   /xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   y xY w)	Nr   r   r   rA   r6  r  c                       e Zd Zd Zd Zd Zy)E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                     | S r   rZ   r   s    r   __iter__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__	  s    r   c                     t         r   )r  r   s    r   __next__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__ 
  s    ""r   c                      yr   rZ   r   s    r   r  zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__
  s    r   N)ru   rv   rw   r  r  r  rZ   r   r   SpecialIterabler   	  s    #r   r  )	r   r   r   rl   r  r  r  r  r  )rp   r  s     r   "test_map_handle_iterable_exceptionz,_TestPool.test_map_handle_iterable_exception	  s~   99	!MM7>>tyyIJ |, 	GIIMM#;ArBAF	G |, 	GIIMM#;ArBAF	G |, 	GIIMM#;BBAF	G	 	 |, 	5IIMM#0!4	5|, 	5IIMM#0!4	5 	5%	G 	G	G 	G	G 	G	5 	5	5 	5s<   ,F(,F5!,G4'G8'G(F25F>G
GG"c                     | j                   j                  t        dt        f      }t	        |j
                        }| j                   |       d       | j                  |j                  t               y )Nr
  1   )	r  apply_asyncr  r  r}   r   rk   r   r   rp   r   r   s      r   
test_asyncz_TestPool.test_async	
  sP    ii##C!X8CGG$#$$S[[(;r   c                    | j                   j                  t        dt        dz   f      }t	        |j
                        }| j                  t        j                  |t               | j                  |j                  t               y )Nr  r'  r  )r  r
  r  r  r}   r   rl   r   r  r   r   r  s      r   test_async_timeoutz_TestPool.test_async_timeout
  s^    ii##C!X^)<=CGG$/66XN$$S[[(;r   c                    | j                   j                  t        t        t	        d                  }| j                  t        |      t        t        t        t        t	        d                               | j                   j                  t        t        t	        d                  }t	        d      D ]   }| j                  t        |      ||z         " | j                  t        |j                         | j                   j                  t        t        t	        d            d      }t	        d      D ]   }| j                  t        |      ||z         " | j                  t        |j                         y Nr6  r5  r)  r  )r  imapr  r   rS  rk   r  r  rl   StopIterationr  rp   r  rV  s      r   	test_imapz_TestPool.test_imap
  s   YY^^CeBi1b4CeBi(A#BCYY^^CeBi1r 	,AT"Xqs+	,-5YY^^CeDk!2c^Bt 	,AT"Xqs+	,-5r   c                 x   | j                   dk(  r*| j                  dj                  | j                                | j                  j	                  t
        t        dd      d      }| j                  t        |j                         | j                  j	                  t
        t        dd      d      }| j                  t        |j                         | j                  j	                  t
        t        dd      d      }t        d      D ]   }| j                  t        |      ||z         " | j                  t        |j                         | j                  j	                  t
        t        dd      d	      }t        d
      D ]   }| j                  t        |      ||z         " | j                  t        |j                         | j                  j	                  t
        t        dd      d      }t        d      D ]   }| j                  t        |      ||z         " | j                  t        |j                         y )Nr   r   r   rA   r6  r  r  r
  r  r  ra   )r   r   r   r  r  r  r  rl   r  r  rS  rk   r  r  s      r   #test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exception#
  s   99	!MM7>>tyyIJ YY^^C!=a!DaH,4YY^^C!=a!DaH,4YY^^C!=b!!DaHq 	,AT"Xqs+	,,4 YY^^C!=b!!DaHq 	,AT"Xqs+	,,4YY^^C!=b!!DaHq 	,AT"Xqs+	,,4r   c                    | j                   j                  t        t        t	        d                  }| j                  t        |      t        t        t        t        t	        d                               | j                   j                  t        t        t	        d            d      }| j                  t        |      t        t        t        t        t	        d                               y r  )r  imap_unorderedr  r   rS  rk   r  r  )rp   r  s     r   test_imap_unorderedz_TestPool.test_imap_unordered=
  s    YY%%c4b	?;T#c4b	?*C%DEYY%%c4d+<%LT#c4d3D*E%FGr   c           
         | j                   dk(  r*| j                  dj                  | j                                | j                  j	                  t
        t        dd      d      }| j                  t        |j                         | j                  j	                  t
        t        dd      d      }| j                  t        |j                         | j                  j	                  t
        t        dd      d      }t        t        t
        t        t        d                        }| j                  t              5  t        d      D ]0  }t        |      }| j                  ||       |j                  |       2 	 d d d        | j                  j	                  t
        t        dd      d	      }t        t        t
        t        t        d                        }| j                  t              5  t        d      D ]0  }t        |      }| j                  ||       |j                  |       2 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   r   r   rA   r6  r  r  r
  r  )r   r   r   r  r  r  r  rl   r  r  r   r  rS  r  rm   r  )rp   r  expected_valuesrV  r   s        r   -test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exceptionD
  s   99	!MM7>>tyyIJ YY%%c&B1b&I&') 	,4YY%%c&B1b&I&') 	,4YY%%c&B2q&I&') s3U2Y89|, 	.2Y .Re_5&&u-.	. YY%%c&B2q&I&') s3U2Y89|, 	.2Y .Re_5&&u-.	. 	.	. 	.	. 	.s   ;?H7.?I7I Ic                    | j                   dk(  rt        nt        }| j                  || j                  d       | j                  || j                  d       | j                   dk7  rX| j	                  d      }	 | j                  dt        |j                               |j                          |j                          y y # |j                          |j                          w xY w)Nr   rA   r   r  )
r   RemoteErrorrE   rl   r  rk   r   _poolr    r   )rp   expected_errorr   s      r   test_make_poolz_TestPool.test_make_poolh
  s    )-i)?+) 	 	.$))R8.$))Q799	!		!A  CL1	 "
 	s   7%B> >"C c                 L   | j                   j                  t        j                  t	        d      D cg c]  }d c}d      }| j                   j                          t        | j                   j                        } |        | j                  |j                  d       y c c}w )Ni'  r.   r   r  r  )
r  r  r   r  rS  r	  r}   r   
assertLessr   )rp   rV  rY  r   s       r   rB  z_TestPool.test_terminatew
  su    $$JJeEl33q %  			TYY^^,c* 4s   	B!
c                    | j                  d      }| j                  |j                  t        g       g        | j                  t	        |j                  t        g             g        | j                  t	        |j                  t        g             g        | j                  |j                  t        g       j                         g        |j                          |j                          y r   )r  rk   r  r  r   r  r  r  r   r    r   rO  s     r   test_empty_iterablez_TestPool.test_empty_iterable
  s    IIaLsB,affS"o.3a..sB78"=S"-113R8			r   c                    | j                   dk(  rt        t        d            }|D cg c]  }t        |       }}| j	                  d      5 }|j                  t        |      }| j                  |j                         |       d d d        j                          | j                  t        |j
                  t        |       y y c c}w # 1 sw Y   FxY w)Nr   r6  r  )r   r   rS  r  r  r  rk   r   r   rl   rE   )rp   LrV  rZ  r   rs         r   test_contextz_TestPool.test_context
  s    99#U2YA()*1A*H*1 4KKQ'  (34 FFHj!++sA> $*4 4s   C7C		Cc                     t        d      )Nr  r3  r+  s    r   _test_tracebackz_TestPool._test_traceback
  s    3r   c                    | j                   dk(  r| j                  d      5 }	 |j                  | j                         | j	                  d       d d d        j                          | j                  t              t               | j                  |j                  d       |j                  }| j                  t        |      t        j                  j                         | j!                  d|j"                         t$        j&                  j)                         5 }	 |y y # t
        $ r}|}Y d }~d }~ww xY w# 1 sw Y   xY w# t        $ r' t+        j,                  t+        j.                           Y nw xY w	 d d d        n# 1 sw Y   nxY w| j!                  dj1                                | j                  d      5 }	 |j3                  t4        t7        dd      d       | j	                  d       n# t
        $ r}|}Y d }~nd }~ww xY w| j                  t        |      t8               | j                  |j                  d        d d d        n# 1 sw Y   nxY w|j                          O)Nr   r   zexpected RuntimeError)r  z&raise RuntimeError(123) # some commentrA   zexpected SayWhenError)r   r  r  r+  ri   rh   r   ro  r  r4  rk   rQ   	__cause__r   r  RemoteTracebackrm   tbr=  r   r>  rz   
excepthookexc_infogetvaluer  r  r  r  )rp   r   r  exccausef1s         r   test_tracebackz_TestPool.test_traceback
  s    99#1 77GGD001 II567 FFHMM$s)\2SXXv.MMEMM$u+';';'K'KLMMBEHHM--/ 424I# $ ! C7 7" $ 4NNCLLN343	4 4 4
 MMB++-) 1 37EE#;ArBAF II56 ! C d3i6cmmT23 3 3 FFHs   D:D"D:FE"	D7+D2-D:2D77D::E-E63F5E66FF I!G5#I5	H
>H IH

>IIc                     t        d      )NrS  r3  r+  s    r   _test_wrapped_exceptionz!_TestPool._test_wrapped_exception
  s    5!!r   c                     | j                  d      5 }| j                  t              5  |j                  | j                         d d d        d d d        j                          y # 1 sw Y   "xY w# 1 sw Y   &xY wr   )r  rl   r4  r  r8  r   rO  s     r   test_wrapped_exceptionz _TestPool.test_wrapped_exception
  sd    YYq\ 	6Q""<0 64456	6 	
6 6	6 	6s"   A1A%A1%A.	*A11A:c                 ,   t        j                         }| j                  t              5  | j	                  d      5 }	 |j                  t        ddg       t        j                  d       |j                          |j                          	 d d d        d d d        | j                  t        j                         |z
  d       y # t        j                  d       |j                          |j                          w xY w# 1 sw Y   sxY w# 1 sw Y   wxY w)Nr  r   r   r  g?)r   r   rl   rE   r  r  r  r  r    r   assertGreater)rp   t_startr   s      r   test_map_no_failfastz_TestPool.test_map_no_failfast
  s     .."z* 	1 EE/!Q8JJsOGGIFFH	 	4>>+g5s; JJsOGGIFFH 	 	s9   D
C>C5C>D
7C;;C>>D	D

Dc                    t        d      D cg c]  }t                }}|D cg c]  }t        j                  |       }}| j                  j                  t        |       ~t        j                          t        j                  t               | j                  t        d |D              d h       | j                  t        j                  d       y c c}w c c}w )Nr6  c              3   *   K   | ]  } |         y wr   rZ   )r  rp  s     r   r  z3_TestPool.test_release_task_refs.<locals>.<genexpr>
  s     1bRT1s   r   )rS  r  rk  rl  r  r  r  rm  rn  r   r  rN  rk   rd  r  )rp   rV  objsorefss        r   test_release_task_refsz _TestPool.test_release_task_refs
  s     */r3A33(,-1A--		h%




51D11D6: 	22A6 4-s
   CCc                 :   | j                   dk(  r| j                  d       | j                  d      }|5  	 d d d        | j                  t              5  |5  	 d d d        d d d        |j                          y # 1 sw Y   DxY w# 1 sw Y   .xY w# 1 sw Y   2xY w)Nr   test not applicable to managerr   )r   r   r  rl   rE   r   rp   r  s     r   
test_enterz_TestPool.test_enter
  s    99	!MM:;yy| 		
 z* 	 	 				 	 	 	s/   A9BBB9BB	
BBc                 p   | j                   dk(  r| j                  d       | j                  d      }|j                          |j	                          t
        j                  j                  |_        t        j                  dt        f      5  d }t        j                          d d d        y # 1 sw Y   y xY w)Nr   rF  r   z%unclosed running multiprocessing pool)r   r   r  r	  r   r   r  RUN_stater
   check_warningsResourceWarningr   
gc_collectrG  s     r   test_resource_warningz_TestPool.test_resource_warning
  s    99	!MM:;yy|		 &**..++8/JL 	!D 	! 	! 	!s   B,,B5)"ru   rv   rw   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  rB  r%  r)  r+  r6  r8  r:  r>  rD  rH  rO  __classcell__r  s   @r   r  r  	  s         =
;??
:8)L54<<654H".H+
?    $L " "<(7 !r   r  c                      t        d      )Nkey)KeyErrorrZ   r   r   raisingrU    s    
5/r   c                      d S )Nc                       y)N*   rZ   rZ   r   r   r  z%unpickleable_result.<locals>.<lambda>      r   rZ   rZ   r   r   unpickleable_resultrZ    s    r   c                       e Zd ZdZd Zd Zy)_TestPoolWorkerErrorsr  c                 H   t        j                  d      }d gfd}|j                  t        |      }| j	                  t
        |j                         | j                  d          | j                  d   t
               |j                          |j                          y )Nr  c                     | d<   y r  rZ   r3  
scratchpads    r   errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback  s    JqMr   r  r   )r   r  r
  rU  rl   rT  r   r   r   r    r   )rp   r   ra  r   r`  s       @r   test_async_error_callbackz/_TestPoolWorkerErrors.test_async_error_callback  s}      #V
	  mmGGm<(CGG,
1&jmX6			r   c                    ddl m} t        j                  d      }t	        d      D ]  }d gfd}|j                  t        |      }| j                  ||j                         d   }| j                  |       | j                  d   |       | j                  |j                         | j                  |j                          |j                          |j                          y )Nr   )MaybeEncodingErrorr  r  c                     | d<   y r  rZ   r_  s    r   ra  z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback/  s     #
1r   rb  )multiprocessing.poolre  r   r  rS  r
  rZ  rl   r   r   r   assertIsNotNoner3  r   r    r   )rp   re  r   	iterationra  r   wrappedr`  s          @r   test_unpickleable_resultz._TestPoolWorkerErrors.test_unpickleable_result'  s    ;  # r 	0IJ$ -- 3G-LC0#'': mGOOG$!!*Q-1CD  -  /	0 	
		r   N)ru   rv   rw   r   rc  rk  rZ   r   r   r\  r\    s    #Mr   r\  c                   (    e Zd ZdZd Zd Zd Zd Zy)_TestPoolWorkerLifetimer  c                    t        j                  dd      }| j                  dt        |j                               |j                  D cg c]  }|j
                   }}g }t        d      D ](  }|j                  |j                  t        |f             * t        |      D ].  \  }}| j                  |j                         t        |             0 |j                          d}|rYt        d |j                  D              s=|dz  }t        j                  t                |rt        d |j                  D              s=|j                  D cg c]  }|j
                   }	}| j#                  d |       | j#                  d |	       | j%                  t'        |      t'        |	             |j)                          |j+                          y c c}w c c}w )Nr  r6  maxtasksperchildr)  2   c              3   <   K   | ]  }|j                           y wr   r   )r  r  s     r   r  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>Q  s     #BQAJJL#B   r   )r   r  rk   r   r  r   rS  rX  r
  r  	enumerater   _repopulate_poolallr   r  rN  r  r"  r  r    r   )
rp   r   r  origworkerpidsr   rV  r6  r   	countdownfinalworkerpidss
             r   test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetime@  ss     R8CL))*1A!%%11s 	6ANN1==qe45	6 "'* 	0HQSWWYA/	0 	
 	#B!''#B BNIJJu #B!''#B B +,''2Q15522~./F>2F?4KL			1 2" 3s   GGc                 \   t        j                  dd      }g }t        d      D ])  }|j                  |j	                  t
        |df             + |j                          |j                          t        |      D ].  \  }}| j                  |j                         t        |             0 y )Nr  r   ro  r  g333333?)r   r  rS  rX  r
  r  r    r   ru  rk   r   )rp   r   r   rV  r6  r   s         r   %test_pool_worker_lifetime_early_closez=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_close]  s       Q7q 	9ANN1==q#h78	9			!'* 	0HQSWWYA/	0r   c                     dD ]7  }| j                  t              5  t        j                  d|       d d d        9 y # 1 sw Y   DxY w)N)r   rA   r  12r  ro  )rl   rE   r   r  )rp   r   s     r   "test_pool_maxtasksperchild_invalidz:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalidj  sP    ' 	@E"":. @$$Q?@ @	@@ @s	   >A	c                     d}t         j                  j                  j                  d|      \  }}}| j	                  |d       y )Na  if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        -cr   )r=  r   r   assert_python_okrk   rp   cmdrh  outrq   s        r   >test_worker_finalization_via_atexit_handler_of_multiprocessingzV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingo  s=     ||11BB4MCQr   N)ru   rv   rw   r   r{  r}  r  r  rZ   r   r   rm  rm  =  s    #M:0@
 r   rm  )BaseManager	BaseProxyr  c                       e Zd Zd Zd Zd Zy)FooBarc                      y)Nf()rZ   r   s    r   r  zFooBar.f  s    r   c                     t         r   )rE   r   s    r   gzFooBar.g  s    r   c                      y)N_h()rZ   r   s    r   _hz	FooBar._h  s    r   N)ru   rv   rw   r  r  r  rZ   r   r   r  r    s    r   r  c               #   :   K   t        d      D ]	  } | | z    y wr|  )rS  )rV  s    r   bazr    s"     2Y c	s   c                       e Zd ZdZd Zd Zy)IteratorProxy)r  c                     | S r   rZ   r   s    r   r  zIteratorProxy.__iter__  s    r   c                 $    | j                  d      S )Nr  )_callmethodr   s    r   r  zIteratorProxy.__next__  s    
++r   N)ru   rv   rw   	_exposed_r  r  rZ   r   r   r  r    s    I,r   r  c                       e Zd Zy)	MyManagerNr  rZ   r   r   r  r    s    r   r  Foo)callableBar)r  r  )r  exposedr  )r  	proxytypec                   (    e Zd ZdZd Zd Zd Zd Zy)_TestMyManagerr}  c                     t        t              }|j                          | j                  |       |j	                          | j                  |j                  j                  dt        j                   f       y N)shutdown_timeoutr   )
r  SHUTDOWN_TIMEOUTr   commonshutdownrm   _processr   r8  r@  rp   r   s     r   test_mymanagerz_TestMyManager.test_mymanager  sU    -=>G
 	g&&//!fnn_1EFr   c                     t        t              }|5  | j                  |       d d d        | j                  |j                  j
                  dt        j                   f       y # 1 sw Y   AxY wr  )r  r  r  rm   r  r   r8  r@  r  s     r   test_mymanager_contextz%_TestMyManager.test_mymanager_context  sX    -=> 	!KK 	!
 	g&&//!fnn_1EF	! 	!s   A%%A.c                     t        t              }|j                          |5  | j                  |       d d d        | j	                  |j
                  j                  d       y # 1 sw Y   0xY wr  )r  r  r   r  rk   r  r   r  s     r   !test_mymanager_context_prestartedz0_TestMyManager.test_mymanager_context_prestarted  sV    -=> 	!KK 	!))22A6	! 	!s   A$$A-c                    |j                         }|j                         }|j                         }dD cg c]  }t        ||      s| }}dD cg c]  }t        ||      s| }}| j	                  |ddg       | j	                  |ddg       | j	                  |j                         d       | j                  t        |j                         | j	                  |j                  d      d       | j                  t        |j                  d       | j	                  |j                         d       | j	                  |j                         d       | j	                  |j                  d      d       | j	                  |j                  d      d       | j	                  t        |      t        d      D cg c]  }||z  	 c}       y c c}w c c}w c c}w )N)r  r  r  r  r  r  r  r  r6  )r  r  r  r7  rk   r  rl   rE   r  r  r  r  r   rS  )	rp   r   rS  barr  r+   foo_methodsbar_methodsrV  s	            r   r  z_TestMyManager.common  so   kkmkkmkkm(8OGC<NtOO(8OGC<NtOOsCj1sDk2%(*cee,-u5+s=%(6*-u5.7c%)$<QQqS$<=! PO %=s   GGG#G7G
N)ru   rv   rw   r   r  r  r  r  rZ   r   r   r  r    s     M	GG7>r   r  c                      t         S r   )_queuerZ   r   r   	get_queuer    s    Mr   c                       e Zd ZdZy)QueueManagerz$manager class used by server processNru   rv   rw   rx   rZ   r   r   r  r    s    .r   r  r  c                       e Zd ZdZy)QueueManager2z@manager class which specifies the same interface as QueueManagerNr  rZ   r   r   r  r    s    Jr   r  	xmlrpclibc                   8    e Zd ZdZg dZedd Zed        Zd Zy)_TestRemoteManagerr}  )hello worldNT      @u   hallå världenu   привіт світs   hall vrldenNc                     t        ||t        t              }|j                          |j	                         }|j                  t        | j                               y )Nr   r   
serializerr  )r  
SERIALIZERr  connectr  r   r   rH  r   r   r   r   r"   s        r   _putterz_TestRemoteManager._putter  sE    W-/ 	!!#		%

#$r   c                    t        j                  d      }t        t        j                  df|t
        t              }|j                          | j                  |j                         | j                  | j                  |j                  |f      }d|_        |j                          t        |j                  |t
        t              }|j                          |j!                         }| j#                  |j%                         | j&                         | j)                  t*        |j,                  t.        j0                         ~y )N    r   r  r   T)rB   urandomr  r   HOSTr  r  r   rc  r  r   r  r   r   r  r  r  rk   r   rY  rl   rh   r   r   r  )rp   r   r   r   manager2r"   s         r   test_remotez_TestRemoteManager.test_remote   s    **R."''+W-/ 	(()LLGOOW3MLN		 OOW-/ 	""$dkk2 	)UYY

; r   )	ru   rv   rw   r   rH  rY  r  r  r  rZ   r   r   r  r    s0     MF
 AYF% %r   r  sha256c                   "    e Zd Zed        Zd Zy)_TestManagerRestartc                     t        ||t        t              }|j                          |j	                         }|j                  d       y )Nr  r  )r  r  r  r  r  r   r  s        r   r  z_TestManagerRestart._putter   s<    W-/ 	!!#		- r   c                    t        j                  d      }t        t        j                  df|t
        t              }	 |j                         }|j                  }|j                  j                          |j                          | j                  | j                  |j                  |f      }|j                          |j                          |j                         }| j!                  |j#                         d       ~t%        |d      r|j'                          	 t        ||t
        t              }	 |j                          | j)                  |j&                         y # t%        |d      r|j'                          w w xY w# t*        $ r}|j,                  t,        j.                  k7  r t1        j2                  d       t        ||t
        t              }t%        |d      r | j)                  |j&                         Y d }~y Y d }~y d }~ww xY w)Nr  r   r  r   r  r  r'  )rB   r  r  r   r  r  r  
get_serverr   listenerr    r   r   r  r   r  rk   r   r7  r  rc  OSErrorerrno
EADDRINUSEr   r  )rp   r   r   srvraddrr   r"   r  s           r   test_rapid_restartz&_TestManagerRestart.test_rapid_restart)  s   **R."''+W!4DF	#%%'D<<D MM!MMODLL7QRAGGIFFH%%'EUYY[-8w
+  "'j-/	2MMOOOG,,- w
+  " ,  
	2ww%*** JJsO"g*!13G w
+ 0 011 ,
	2s%   C E 3+F E>	H

A1HH
N)ru   rv   rw   r  r  r  rZ   r   r   r  r    s     ! !'2r   r   c            	          e Zd ZdZed        Zd Zd Zd Zd Z	ed        Z
edd       Z ej                  ed	      d
        Z ej                  ed	       ej                   ej$                  dk(  d       ej                   edk  d       ej                   eed      d      d                             Zed        Z ej                  ed	       ej                   ej$                  dk(  d      d               Zd Zy)_TestConnectionr   c                     t        |j                  t              D ]  }|j                  |        |j	                          y r   )r  
recv_bytesSENTINEL
send_bytesr    )r   r2  msgs      r   _echoz_TestConnection._echo\  s1    2 	!COOC 	!

r   c                    | j                         \  }}| j                  | j                  |f      }d|_        |j	                          g d}t        d      }|dz  }t        j                  dt        t        d                  }| j                  dk(  r-| j                  t        |j                               t               | j                  |j                  |      d        | j                  |j                         |       | j                  |j!                  |      d        | j                  |j#                         |       | j                  dk(  rt        j                  dd	gdz        }t        |      d	gdt%        |      z
  z  z   }	| j                  |j!                  |      d        | j                  |j'                  |      t%        |      |j(                  z         | j                  t        |      |	       t        j                  dd	gdz        }d	gd
z  t        |      z   d	gdt%        |      z
  z  z   }	| j                  |j!                  |      d        | j                  |j'                  |d
|j(                  z        t%        |      |j(                  z         | j                  t        |      |	       t+        t        d            }| j                  |j!                  |      d        	 |j'                  |      }
| j-                  d|
z         t5        |j6                        }| j                   |       d       | j9                  |j:                  d	       | j                   |d      d       | j9                  |j:                  d	       | j                   |t<              d       | j9                  |j:                  t<               |j                  d        t?        j@                  d       | j                   |t<              d       | j9                  |j:                  d	       | j                  |j                         d        t        d      dz  }|j!                  |       | j                  |j#                         |       |j!                  tB               |jE                          | j                  dk(  rx| j                  |jF                  d       | j                  |jH                  d       | jK                  tL        |j                         | jK                  tL        |j"                         |jO                          y # t.        j0                  $ r(}| j                  |j2                  |f       Y d }~hd }~ww xY w)Nr   T)r   r  Nr  r6  rV  ra   r   r   r  r
  z(                                        zexpected BufferTooShort, got %sFrA   r.   Xi   )(r   r   r  r   r   r   rm  r   rS  r   rk   r  filenorI  r   r   r  r  r   recv_bytes_intoitemsize	bytearrayri   r   BufferTooShortrQ   r}   r  r   r   r  r   r  r  r    readablewritablerl   EOFErrorr   )rp   r2  r  r   rg  r  longmsgrn  bufferrZ  r   r  r  really_big_msgs                 r   test_connectionz_TestConnection.test_connectionb  s2   99;jLL

*L?		M"(kk#tE!H~.99#T$++-0#63.c*-t4*C099#[[qc"f-FCyA3"s3x-#88HT__S148T11&9 X79T&\84[[qc"f-FsQwc*aSFSX4E-FFHT__S148T11&!foo:MN X79T&\84uX/FT__W5t<C**62 		;cABTYY''$$T\\15b5)$$T\\15h/$$T\\8<		$

2h.$$T\\15d+s'78'*N;!99#T]]D1T]]D1h		2h8	K #11 5  '445s   4U VVVc                 r   | j                  d      \  }}| j                  |j                  d      d        | j                  |j                         d       | j                  dk(  r| j                  |j
                  d       | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d       | j                  t        |j                  d       | j                  t        |j                         | j                  t        |j                         y y )NFr   r   r   Tr  )
r   rk   r   r   r   r  r  rl   r  r  )rp   readerwriters      r   test_duplex_falsez!_TestConnection.test_duplex_false  s    %0Q.*99#V__d3V__e4V__e4V__d3gv{{A6gv{{3gv{{3 $r   c                    | j                         \  }}| j                  | j                  |f      }d|_        |j	                          |j                          t        d      }|j                  |       | j                  |j                         |       |j                  t               |j                          |j                          y )Nr   Tr  )r   r   r  r   r   r    r   r  rk   r  r  r   )rp   r2  r  r   r  s        r   test_spawn_closez _TestConnection.test_spawn_close  s      99;jLL

*L?		Gn*C0!

	r   c                 2   | j                   dk7  r*| j                  dj                  | j                                t        d      }| j	                         \  }}|j                  |       | j                  |j                         |       |j                  |d       | j                  |j                         |dd         |j                  |dd       | j                  |j                         |dd        |j                  |d       | j                  |j                         t        d	             |j                  |dd
       | j                  |j                         t        d	             | j                  t        |j
                  |d       | j                  t        |j
                  |dd       | j                  t        |j
                  |dd       | j                  t        |j
                  |d       | j                  t        |j
                  |dd       y )Nr   r   abcdefghijklmnopqrstuvwxyzr   r
  r        r  r         r   rA   ra   )
r   r   r   r   r   r  rk   r  rl   rE   )rp   r  r   r   s       r   test_sendbytesz_TestConnection.test_sendbytes  s   99#MM7>>tyyIJ01yy{1	S-	S!QR1	S!QQs4	S"r3	S"a r3*allC<*allCQ?*allCQ?*allC<*allCB?r   c                     	 t        j                  |       y# t        $ r(}|j                  t        j                  k(  rY d }~y d }~ww xY wrY  )rB   fstatr  r  EBADF)r   r  r  s      r   _is_fd_assignedz_TestConnection._is_fd_assigned  s?    	HHRL   	ww%++%	s    	A	AAA	c                 j   |rGt        dd      D ]8  }| j                  |      rt        j                  |j	                         |       : t        j                  |      }t        r$t        j                  |t        j                        }t        j                  ||       t        j                  |       y )Nr   r9   )rS  r  rB   dup2r  r   recv_handlemsvcrtopen_osfhandler  r,  r    )r   r2  datacreate_dummy_fdsrV  r  s         r   _writefdz_TestConnection._writefd  s    1c] .**1-GGDKKM1-. ""4(&&r2;;7B
T
r   $test needs multiprocessing.reductionc                    | j                   dk7  r| j                  d       | j                  d      \  }}| j                  | j                  |df      }d|_        |j                          | j                  t        j                  t        j                         t        t        j                  d      5 }|j                         }t        rt        j                  |      }t        j                   |||j"                         d d d        |j%                          t        t        j                  d      5 }| j'                  |j)                         d       d d d        y # 1 sw Y   ]xY w# 1 sw Y   y xY w)	Nr   only makes sense with processesTr   s   foor   wbrb)r   r   r   r   r  r   r   rc  r   r  r  r  r  r  get_osfhandler   send_handler   r   rk   r  )rp   r2  r  r   r  r  s         r   test_fd_transferz _TestConnection.test_fd_transfer
  s   99#MM;<99D91jLLZ4HLI			(()*:*:;)""D) 	3QB))"-!!$AEE2		3
 	
)""D) 	/QQVVXv.	/ 	/	3 	3	/ 	/s   4AE3!E)E&)E2r1   *test semantics don't make sense on Windowsr9   z)largest assignable fd number is too smallr  ztest needs os.dup2()c                    | j                   dk7  r| j                  d       | j                  d      \  }}| j                  | j                  |ddf      }d|_        |j                          | j                  t        j                  t        j                         t        t        j                  d      5 }|j                         }t        dt              D ]  }| j                  |      r n | j!                  d	       t#        j$                  |       	 t'        j(                  |||j*                         t#        j,                  |       	 d d d        |j/                          t        t        j                  d
      5 }| j1                  |j3                         d       d d d        y # t#        j,                  |       w xY w# 1 sw Y   wxY w# 1 sw Y   y xY w)Nr   r  Tr   s   barr   r  r9   z2could not find an unassigned large file descriptorr  )r   r   r   r   r  r   r   rc  r   r  r  r  r  rS  MAXFDr  ri   rB   r  r   r  r   r    r   rk   r  )rp   r2  r  r   r  r  newfds          r   test_large_fd_transferz&_TestConnection.test_large_fd_transfer  ss    99#MM;<99D91jLLZ4NLO			(()*:*:;)""D) 	 QBsE* P++E2P 		NOGGB %%dE1559	  	
)""D) 	/QQVVXv.	/ 	/ 	  	 	/ 	/s6   55G+*G!F)7G?!G)G  GGGc                 L    t        j                  |j                         d       y )N    )rB   r,  r  rp   r2  s     r   _send_data_without_fdz%_TestConnection._send_data_without_fd>  s    
&r   zdoesn't make sense on Windowsc                 B   | j                   dk7  r| j                  d       | j                  d      \  }}| j                  | j                  |f      }d|_        |j                          | j                  t        t        j                  |       |j                          y )Nr   r  Tr   r   )r   r   r   r   r  r   r   rl   r4  r   r  r   rp   r2  r  r   s       r   test_missing_fd_transferz(_TestConnection.test_missing_fd_transferB  s}    
 99#MM;<99D91jLL : :*LO		,	(=(=tD	r   c                 ~   | j                         \  }}|5  |5  |j                  d       | j                  |j                         d       | j                  dk(  r6| j                  |j                         | j                  |j                         d d d        d d d        | j                  dk(  rw| j                  |j                         | j                  |j                         | j                  t        |j                         | j                  t        |j                         y y # 1 sw Y   xY w# 1 sw Y   xY wN  r   )
r   r   rk   r   r   r   closedr   rl   r  r   s      r   r)  z_TestConnection.test_contextQ  s    yy{1 	+ 	+FF4LQVVXt,yyK'  *  *	+ 	+ 99#OOAHH%OOAHH%gqvv.gqvv.	 $	+ 	+ 	+ 	+s#   D3A7D'D3'D0	,D33D<Nr  )ru   rv   rw   r   r  r  r  r  r  r  r  r  rF   r  HAS_REDUCTIONr  ry   rz   r{   r  r7  rB   r  r  r  r)  rZ   r   r   r  r  X  sc   ,M 
M^4*@@   	 	 X(NO/ P/$ X(NOX__S\\W,ACX__Uc\@BXV,/1/1BC P/4 ' ' X(NOX__S\\W,.MN O P/r   r  c                   b    e Zd ZdZd Zd Z ej                  ej                  d      d        Z
y)_TestListenerr  c                    | j                   j                  D ]o  }| j                   j                  |      }| j                  |j                         | j                  t        | j                   j                  |j                  |       q y )Nfamily)
connectionfamiliesListenerrc  r    rl   r  r   )rp   r)  r  s      r   test_multiple_bindz _TestListener.test_multiple_binde  sg    oo.. 	1F(((7AOOAGG$gt'?'?ii1	1r   c                    | j                   j                         5 }| j                   j                  |j                        5 }|j	                         5 }|j                  d       | j                  |j                         d       d d d        d d d        d d d        | j                  dk(  r!| j                  t        j                         y y # 1 sw Y   JxY w# 1 sw Y   NxY w# 1 sw Y   RxY wr!  r*  r,  Clientr   acceptr   rk   r   r   rl   r  )rp   r  r   r:  s       r   r)  z_TestListener.test_contextl  s    __%%' 	51''		2 5aXXZ 51FF4L$$QVVXt455	5 99#gqxx0 $	5 55 5	5 	5s;   &C%C2CCC%CCC"	C%%C.z"test needs abstract socket supportc                    | j                   j                  d      5 }| j                   j                  |j                        5 }|j	                         5 }|j                  d       | j                  |j                         d       d d d        d d d        d d d        | j                  dk(  r!| j                  t        j                         y y # 1 sw Y   JxY w# 1 sw Y   NxY w# 1 sw Y   RxY w)Nz
 somethingr"  r   r/  )rp   r  clientr:  s       r   test_abstract_socketz"_TestListener.test_abstract_socketv  s     __%%m4 	5''(8(89 5V__& 5!KK%$$QVVXt455	5 99#gx7 $	5 55 5	5 	5s;   &C&C2CCC&CCC#	C&&C/N)ru   rv   rw   r   r-  r)  rF   r  r   abstract_sockets_supportedr4  rZ   r   r   r&  r&  a  s=    "M11 X88=?8?8r   r&  c                   2    e Zd ZdZed        Zd Zd Zd Zy)_TestListenerClientr   c                 |    | j                   j                  |      }|j                  d       |j                          y )Nr  )r*  r0  r   r    )r   r   r2  s      r   r   z_TestListenerClient._test  s+    ~~$$W-		'

r   c                    | j                   j                  D ]  }| j                   j                  |      }| j                  | j                  |j
                  f      }d|_        |j                          |j                         }| j                  |j                         d       |j                          |j                           y )Nr(  r   Tr  )r*  r+  r,  r   r   r   r   r   r1  rk   r   r   r    )rp   r)  r  r   r2  s        r   test_listener_clientz(_TestListenerClient.test_listener_client  s    oo.. 	F(((7ADJJaii\BAAHGGI88:DTYY['2FFHGGI	r   c                    | j                   j                         }| j                  | j                  |j                  f      }d|_        |j                          t        j                  d       |j                         }| j                  |j                         d       |j                          |j                          |j                          y )Nr   Tr   r  )r*  r,  r   r   r   r   r   r   r  r1  rk   r   r    r   )rp   r  r   r2  s       r   test_issue14725z#_TestListenerClient.test_issue14725  s    OO$$&LL

!))L>		

1
 xxzg.

			r   c                    | j                   j                  D ]  }| j                   j                  |      }| j                   j                  |j                        }|j                         }|j                  d       | j                  |j                  d             |j                          |j                          |j                           y )Nr(     hellor   )
r*  r+  r,  r0  r   r1  r  r   r  r    )rp   famr  r   r   s        r   test_issue16955z#_TestListenerClient.test_issue16955  s    ??++ 	C(((4A&&qyy1A
ALL"OOAFF1I&GGIGGIGGI	r   N)	ru   rv   rw   r   r  r   r:  r<  r@  rZ   r   r   r7  r7    s(    ,M 
	 	r   r7  c                   X    e Zd ZdZd Zed        Zd Zed        Zd Z	ed        Z
d Zy	)
	_TestPollr   c                    | j                         \  }}| j                  |j                         d       |j                  d       | j                  |j                         d       | j                  |j                         d       y )NFr   T)r   rk   r  r  r   s      r   test_empty_stringz_TestPoll.test_empty_string  s_    yy{15)	S4(4(r   c                 ~    |D ](  }t        j                  d       |j                  |       * |j                          y Nr.   )r   r  r  r    )r   r2  stringsr   s       r   _child_stringsz_TestPoll._child_strings  s3     	AJJsOOOA	 	

r   c                 D   d}| j                         \  }}| j                  | j                  ||f      }|j                          |D ]G  }t	        d      D ]  }|j                  d      s n |j                         }| j                  ||       I |j                          y )N)r>  r      a   br   s   byer   s   lopr      rt  )	r   r   rH  r   rS  r  r  rk   r   )rp   rG  r   r   r   r   rV  r?  s           r   test_stringsz_TestPoll.test_strings  s    Gyy{1LL 3 31g,LG		 	#A3Z 66$< AQ"	# 	
r   c                 &    |j                  d       y r   )r  )r   r(  s     r   _child_boundariesz_TestPoll._child_boundaries  s     	
q	r   c                 j   | j                  d      \  }}| j                  | j                  |f      }|j                          t	        j
                  d       ddg}|D ]  }|j                  |        |j                          |j                          | j                  |j                         |       y )NFr   r  s   firsts   second)r   r   rO  r   r   r  r  r    r   rm   r  )rp   r(  r  r   r'  r#  s         r   test_boundariesz_TestPoll.test_boundaries  s    yy1LL 6 6aTLB		

1y! 	CLL				allna(r   c                 j    |j                  d       |j                  d       |j                  d       y )NrJ  rK     cd)r  )r   r   s     r   _child_dont_mergez_TestPoll._child_dont_merge  s&    	T	T	Ur   c                 4   | j                         \  }}| j                  |j                  d      d       | j                  |j                  d      d       | j                  | j                  |f      }|j                          | j                  |j                         d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                         d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                         d	       |j                          y )
Nr3   Fr.   r   rJ  r'  TrK  rS  )r   rk   r  r   rT  r   r  r   )rp   r   r   r   s       r   test_dont_mergez_TestPoll.test_dont_merge  s'   yy{1e,e,LL 6 6aTLB		.d+d+.d+d+d+/	r   N)ru   rv   rw   r   rD  r  rH  rM  rO  rQ  rT  rV  rZ   r   r   rB  rB    sW    ,M)    
)  
r   rB  r  c                   \    e Zd ZdZed        Zed        Zed        Zd Zed        Z	d Z
y)	_TestPicklingConnectionsr  c                 P    ddl m} |j                  t        j                         y )Nr   )resource_sharerr  )r   rZ  r  r   r  )r   rZ  s     r   r  z&_TestPicklingConnections.tearDownClass  s    3W%9%9:r   c                 2   |D ]z  }| j                   j                  |      }|j                  |j                         |j	                         }|j                  |       |j                          |j                          | t        j                  t        j                  df      }|j                  |j                                |j	                         \  }}|j                  |       |j                          |j                          |j                          y )Nr(  r   )r*  r,  r   r   r1  r    socketcreate_serverr   r  getsocknamer   )r   r2  r+  r?  r  new_connr  s          r   	_listenerz"_TestPicklingConnections._listener  s     	C''s'3AIIaii xxzHIIhNNGGI	   -"4"4a!89		!--/"$		(				r   c                    t        |j                  d       D ]O  \  }}| j                  j                  |      }|j	                  |j                                |j                          Q |j                         \  }}t        j                         }|j                  |       |j                  |j                                |j                          |j                          y r   )
r  r   r*  r0  r   r  r    r\  r  sendall)r   r2  r   r  r3  s        r   _remotez _TestPicklingConnections._remote#  s    "499d3 	NWc^^**73FKK		$LLN	
 yy{wsyy{#

r   c                    | j                   j                  }| j                         \  }}| j                  | j                  ||f      }d|_        |j                          |j                          | j                         \  }}| j                  | j                  |f      }d|_        |j                          |j                          |D ]w  }d|z  j                  d      }	|j                         }
|j                  |
|	f       |j                         }| j                  |j                         |	j                                y |j                  d        t        d      }	|j                         }
|j                  |
|	f       |j                         }g }	 |j                  d      }|sn|j                  |       &dj!                  |      }| j                  ||	j                                |j                          |j                  d        |j                          |j                          |j!                          |j!                          y )Nr   TzThis connection uses family %sasciiz$This connection uses a normal socketr)  r   )r*  r+  r   r   r`  r   r   r    rc  r   r   r   rk   r  r   rX  r   )rp   r+  lconnlconn0lpr   rconn0rpr?  r  r   r_  bufr   s                 r   test_picklingz&_TestPicklingConnections.test_pickling2  s   ??++		v\\vx6H\I	

		v\\VI\>	

 	;C3c9AA'JCjjlGJJ~&zz|HX]]_ciik:	; 	

4:;**,

GS>"::<c"AJJqM	 
 hhsmciik*

4
	
	r   c                     |j                         }|j                  d       |j                          |j                         }|j                         }|j                  |dz         |j                          y )Nall is wellr  )r   r   r    )r   r2  r  r(  r  s        r   child_accessz%_TestPicklingConnections.child_access`  sQ    IIK	}		IIKffh		#a%

r   c                    | j                         \  }}| j                  | j                  |f      }d|_        |j	                          |j                          | j                  d      \  }}|j                  |       |j                          | j                  |j                         d       |j                          | j                  d      \  }}|j                  |       |j                          |j                  d       |j                          | j                  |j                         d       |j                          y )Nr   TFr   rn  foobarfoobarfoobar)
r   r   ro  r   r   r    r   rk   r   r   )rp   r2  r  r   r(  r  s         r   test_accessz$_TestPicklingConnections.test_accessl  s      99;jLL 1 1LF		yyy&1		!		=1		yyy&1		!			x		j1	r   N)ru   rv   rw   r   r  r  r`  rc  rl  ro  rs  rZ   r   r   rX  rX    sb     #M; ;  $  ,\ 	 	r   rX  c                   8     e Zd ZdZ fdZ fdZd Zd Z xZS )	_TestHeapr  c                     t         |           t        j                  j                  j
                  | _        t        j                  j                         t        j                  j                  _        y r   )r  r  r   r  r  _heapold_heapHeaprp   r  s    r   r  z_TestHeap.setUp  sH    ',,::@@3B3G3G3L3L3N**0r   c                 t    | j                   t        j                  j                  _        t
        |           y r   )rx  r   r  r  rw  r  r  rz  s    r   r  z_TestHeap.tearDown  s&    37==**0r   c           
         d}d}g }t         j                  j                  j                  }d|_        t        |      D ]{  }t        t        j                  dd      dz        }t         j                  j                  |      }|j                  |       t        |      |kD  rt        j                  |      }||= ~} |j                  5  g }d}	d}
t        |j                  j                               D ]G  }|D ]@  \  }}}|j                  |j                   j#                  |      ||||z
  df       |	||z
  z  }	B I |j$                  j'                         D ]I  \  }}|D ]?  \  }}|j                  |j                   j#                  |      ||||z
  df       |
||z
  z  }
A K | j)                  |	|
z   t+        d |j                   D                     |j-                          t        t        |      dz
        D ]p  }||   d d	 \  }}}||dz      d d	 \  }}}||k7  r<| j)                  ||j                   |   j.                         | j)                  |d       _| j)                  ||       r 	 d d d        t        j0                  |       |r|j3                          |r| j)                  |j4                  |j6                         | j)                  t        |j8                        d       | j)                  t        |j                         d       | j)                  t        |j$                        d|j$                         | j)                  t        |j                        d       y # 1 sw Y   xY w)
N  rq  r   r   r5  freeoccupiedc              3   4   K   | ]  }|j                     y wr   rq  )r  arenas     r   r  z&_TestHeap.test_heap.<locals>.<genexpr>  s      F Fs   r  )r   r  r  rw  _DISCARD_FREE_SPACE_LARGER_THANrS  rI  randomlognormvariaterX  r   	randranger  r   _len_to_seqrH  _arenasindex_allocated_blocksr  rk   sumsortrq  shuffler  _n_frees
_n_mallocs_pending_free_blocks)rp   
iterations	maxblocksblocksr  rV  rq  r   rw  r~  r  r'  r  r   r  arena_blocksnarenanstartnstops                      r   	test_heapz_TestHeap.test_heap  s9   
	 ##1177/0, z" 	Av,,Q2T9:D$$2248AMM!6{Y&$$Y/1I	 ZZ 	3CDH$**1134 )*+ )&E5$JJ 2 25 95$ $U
F 4 5T%Z(D)) (,'='='C'C'E -#|#/ -KE4JJ 2 25 95$ $U
J 8 9e,H-- TH_  F FFH HHJ3s8A:& 	3'*1vbqz$t*-ac(2A,'F?$$T4<<+>+C+CD$$VQ/ $$T62	3-	3D 	vJJL  	8T667;T\\*A.T334a9O9OPT--.2U	3 	3s   F#M##M,c                    t        j                         s3t        j                          | j                  t         j                         t        j
                         } | j                  t         j                  g|  t        j                  d       t        d      D ]N  }t        j                  j                  d      }t        j                  j                  d      }||_        ||_        P y )Nr6  r}  r   )rm  	isenabledenablerc  disableget_thresholdset_thresholdrS  r   r  r  buddy)rp   
thresholdsrV  r   r   s        r   test_free_from_gcz_TestHeap.test_free_from_gc  s     ||~IIKOOBJJ'%%'
((6:6
 t 	A$$2215A$$2215AAGAG	r   )	ru   rv   rw   r   r  r  r  r  rP  rQ  s   @r   ru  ru    s    "MO>3@r   ru  c                   "    e Zd ZdefdefdefgZy)_Foor?  r@  zN)ru   rv   rw   r<   r=   r>   _fields_rZ   r   r   r  r    s    	e	h	j
Hr   r  c                   :    e Zd ZdZd Zed        ZddZd Zd Z	y)	_TestSharedCTypesr  c                 4    t         s| j                  d       y y rB  rC  r   s    r   r  z_TestSharedCTypes.setUp   rD  r   c                 L   |xj                   dz  c_         |xj                   dz  c_         |xj                   dz  c_         |xj                  dz  c_        |xj                  dz  c_        |xj                   dz  c_         t        t	        |            D ]  }||xx   dz  cc<    y rq  )r   r?  r@  rS  r   )r   r?  r@  r  rS  rn  stringrV  s           r   _doublez_TestSharedCTypes._double  su    	1	1	1

s3x 	AFaKF	r   c           	      h   t        dd|      }t        t        d|      }t        t        d|      }t        t        dd|      }| j	                  dt        t        d	            |      }| j	                  d
d|      }t        d      |_        | j                  | j                  ||||||f      }d|_        |j                          |j                          | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                   d       | j                  |j"                  d       t        d	      D ]  }	| j                  ||	   |	dz          | j                  |j                  t        d             y )NrV  r
  rT  gUUUUUU?r=  r  r  r:  r6  r   r  r  r   T   gUUUUUU?r>  r        @
hellohello)r   r=   r>   r  rl  r   rS  r   r   r   r  r   r   r   rk   r   r?  r@  )
rp   r_  r?  r@  r  rS  rn  r  r   rV  s
             r   test_sharedctypesz#_TestSharedCTypes.test_sharedctypes  s[   #qt$(G$/*gD1D!QT*jjd59oDj9C$/W~LLAq!S#v3NLO			"%qww0'*"suuc*r 	0A""3q61Q3/	0u\':;r   c                 (    | j                  d       y )NTrT  )r  r   s    r   test_synchronizez"_TestSharedCTypes.test_synchronize&  s    D)r   c                    t        ddd      }t        |      }d|_        d|_        d|_        | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y )Nr  r/   r=  r   )r  r   r?  r@  r  rk   r   )rp   rS  r  s      r   	test_copyz_TestSharedCTypes.test_copy)  sj    1c7#3i"suuc*(r   Nr  )
ru   rv   rw   r   r  r  r  r  r  r  rZ   r   r   r  r    s0    "MC  <.*)r   r  z&requires multiprocessing.shared_memoryc                       e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Z ej                  ej                   d
k7  d      d        Z ej                  ej                   d
k7  d      d        Zd Zd Zd Zd Zd Zy)_TestSharedMemoryr  c                     t        | t              rt        j                  |       }n| }||j                  d t        |       |j                          y r   )r   rn   r   SharedMemoryrk  r   r    )shmem_name_or_objbinary_data	local_smss      r   !_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_write:  sC    '-%223DEI)I+6	's;'(r   c                 B    |t        t        j                               z   S r   )rn   rB   r   )rp   prefixs     r   _new_shm_namez_TestSharedMemory._new_shm_nameC  s     BIIK(((r   c                 
   | j                  d      }t        j                  |dd      }| j                  |j                         | j                  |j                  |       | j                  |j                  d       | j                  t        |j                        |j                         | j                  |j                  t        |             | j                  t        |j                        t        |             d|j                  d<   | j                  |j                  d   d       t        j                  |      }| j                  |j                  d   d       |j                          t        j                  |d|j                  z        }| j                  |j                  d|j                  z         |j                          | j                  t               5  t        j                  dd	       d d d        | j                  t               5  t        j                  d
       d d d        t"        j$                  j'                  d      5 }t        j(                  }| j                  d      | j                  d      g}|D cg c]  }||z   	 }}||_        t        j                  dd      }	| j                  |	j                         | j                  |	j,                  |d          ||_        t        j                  dd      }
| j                  |
j                         | j                  |
j,                  |d          d d d        t        j.                  r| j                  d      }t        j                  |dd      }| j                  t0              5  	 | j                  |j                  d       t        j                  |      }|j	                          |j                          |j                          |j	                          	 d d d        | j                  t2              5  t        j                  |dd      }d d d        t        j.                  rW G d dt        j                        } ||      }| j                  |j                  |j                         |j                          | j                  t0              5  t        j                  d      }|j	                          d d d        |j                          y # 1 sw Y   xY w# 1 sw Y   xY wc c}w # 1 sw Y   xY w# |j	                          w xY w# 1 sw Y   <xY w# 1 sw Y   xY w# 1 sw Y   uxY w)Ntest01_tsmbT   createrq  rX  r   r  r  Fr  ,multiprocessing.shared_memory._make_filename	test01_fn	test02_fnr   test01_dblunlinkr}  c                   >    e Zd Zej                  ej
                  z  Zy)O_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)ru   rv   rw   rB   r  O_RDWR_flagsrZ   r   r   OptionalAttachSharedMemoryr    s    bii/r   r  test01_notthere)r  r   r  rc  r  rk   r+   r3  rq  r   rk  rm   rn   r    r#  rl   rE   rF   mockpatch_SHM_NAME_PREFIXside_effect_name
_USE_POSIXFileNotFoundErrorFileExistsError)rp   	name_tsmbsmsalso_smssame_smsmock_make_filenameNAME_PREFIXnamesr+   shm1shm2name_dblunlinksms_unosms_duothere_can_only_be_one_smsr  ok_if_exists_smsnonexisting_smss                     r   test_shared_memory_basicsz+_TestSharedMemory.test_shared_memory_basicsI  sJ   &&}5	((4cJ

# 	9-#.CGGchh7 	chhC)c#((mSX. 
R( !--i8a"- !--ibkJr#(({3 z* 	=&&d<	= z* 	5&&e4	5
 ]]  :< 	3?Q'88K''4d6H6H6UVE 5::D[4':E:-2* --TBDOODKK(TZZq2-2* --TBDOODKK(TZZq2#	3& ## "//0BCN#00G
 ""#45 
%	%++GLL$?+88HGNN$MMOMMO NN$
% / 	 )6(B(B)%	 ##0]-G-G 09)D-22CHH=""$ 01 	%+889JKO""$	% 			c	= 	=	5 	5 ;	3 	3T NN$
% 
%	 	0	% 	%st   #TT7T-T(B2T-!U#A!T:U2U&U)TT%(T--T7:UUUU&)U2c                 ^   t         j                  j                  d      5 }t        j                  }| j                  d      | j                  d      g}|D cg c]  }||z   	 }}||_        t        j                  dd      }| j                  |j                         | j                  |j                  |d          ||_        t        j                  dd      }| j                  |j                         | j                  |j                  |d          d d d        y c c}w # 1 sw Y   y xY w)Nr  	test03_fn	test04_fnTr   r  r   )rF   r  r  r   r  r  r  r  rc  r  rk   r  )rp   r  r  r  r+   r  r  s          r   test_shared_memory_recreatez-_TestSharedMemory.test_shared_memory_recreate  s    ]]  :< 	3?Q'88K''4d6H6H6UVE 5::D[4':E:-2* --TBDOODKK(TZZq2-2* --TBDOODKK(TZZq2#	3 	3 ;	3 	3s   7D#D#B2D#D##D,c                    | j                  t              5  t        j                  dd      }d d d        | j                  t              5  t        j                  dd      }d d d        | j                  t              5  t        j                  d      }d d d        y # 1 sw Y   sxY w# 1 sw Y   JxY w# 1 sw Y   y xY w)NTrA   r  r   r  )rl   rE   r   r  )rp   sms_invalids     r   "test_invalid_shared_memory_crationz4_TestSharedMemory.test_invalid_shared_memory_cration  s    z* 	K'44DrJK	K z* 	J'44DqIK	J z* 	B'44DAK	B 	B	K 	K	J 	J	B 	Bs#   B B, B8 B),B58Cc           	         t        t        j                  dz         D ]  }| j                  |      5  t	        j
                  dd      }| j                  |j                         d|j                  dd t        j                  ||	      }t        j                  |      }| j                  |t        j
                         | j                  |j                  |j                         | j                  t        |j                  dd       d       | j                  t        |j                  dd       d       d
|j                  dd | j                  t        |j                  dd       d
       | j                  t        |j                  dd       d
       d|j                  dd | j                  t        |j                  dd       d       | j                  t        |j                  dd       d       d d d         y # 1 sw Y   xY w)Nr   protoTr  r     pickler   r  protocols   newvals   oldval)rS  pickleHIGHEST_PROTOCOLr   r   r  rc  r  rk  dumpsloadsr   rk   r+   r   )rp   r  r  pickled_smssms2s        r   "test_shared_memory_pickle_unpicklez4_TestSharedMemory.test_shared_memory_pickle_unpickle  s   622Q67 	BEE* B#003G

+(! %ll3? ||K0%%dM,F,FG  4995  swwq|!4i@  txx!}!5yA  )!  swwq|!4i@  txx!}!5yA )1  swwq|!4i@  txx!}!5yA-B B	BB Bs   GHH	c                    t        t        j                  dz         D ]  }| j                  |      5  t	        j
                  dd      }d|j                  dd t        j                  ||	      }|j                          |j                          | j                  t              5  t        j                  |       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)
Nr   r  Tr  r  r  r   r  r  )rS  r  r  r   r   r  rk  r  r    r  rl   r  r  )rp   r  r  r  s       r   .test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_object  s    622Q67 	.EE* .#003G(!$ll3? 		

&&'89 .LL-.. .	.. .. .s$   A3C%C;CCCC#	c                 T   t        j                  dd      }| j                  |j                         | j	                  | j
                  |j                  df      }d|_        |j                          |j                          | j                  t        |j                  d d       d       | j	                  | j
                  |df      }d|_        |j                          |j                          | j                  t        |j                  d d       d       |j                          y )NTr  r  s   howdyr   r   s   HELLO)r   r  rc  r  r   r  r+   r   r   r   rk   r   rk  r    )rp   r  r   s      r   #test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processes  s     ((3?

# LL99((H%  
 			swwr{+X6 LL99x  
 			swwr{+X6		r   r'   z#not feasible in non-posix platformsc                    t         j                  j                         }|j                          |j	                  t        d            }t        j                  |j                  j                  t        j                         |j	                  t        d            }| j                  t              5  t        j                  t        j                         t        j                         d d d        |j                          y # 1 sw Y   xY wr|  )r   managersSharedMemoryManagerr   ShareableListrS  rB   rD  r  r   r8  r  rl   r  r   r  )rp   smmslsl2s       r   4test_shared_memory_SharedMemoryServer_ignores_sigintzF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigint!  s     &&::<		 uRy)
 	  &--0b	* 01 	0GGBIIK/	0 		0 	0s   07D  D	zresource_tracker is posix onlyc                     d}t         j                  j                  j                  d|      \  }}}| j	                  |       y )Nzif 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r  )r=  r   r   r  r   r  s        r   >test_shared_memory_SharedMemoryManager_reuses_resource_trackerzP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_tracker9  s=     ||11BB4MC 	r   c                 (   t         j                  j                         }| j                  t              5  |j                  d       d d d        |j                          t        dd      D cg c]  }|j                  t        |             }}t        ddd      D cg c]  }|j                  |       }}t        j                  |d   j                  j                  	      }| j                  t        |      d       t        j
                  |d   j                  	      }| j                  t        |j                        d       |d   j                  }|j!                          t"        j$                  d
k7  r4| j                  t&              5  t        j
                  |	      }	d d d        t         j                  j                         5 }
|
j                  d      }|
j                  d      }|j                  j                  }d d d        t"        j$                  d
k7  r5| j                  t&              5  t        j                  |	      }d d d        y y # 1 sw Y   xY wc c}w c c}w # 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   y xY w)Nr  r  r   r6  r        r   r+   r1   howdy)r   r  r  rl   rE   r  r   rS  r  r   shmr+   rk   r   r3  rk  r  rz   r{   r  )rp   smm1rV  lolr6  lomdoppleganger_list0doppleganger_shm0	held_name
absent_shmsmm2r  r  	absent_sls                 r   -test_shared_memory_SharedMemoryManager_basicsz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsN  s   '';;=z* 	&1%	&

6;ArlD""58,DD38S"3EGa!!q!)GG*88c!fjjooN/0!4)66CFKKH$5$9$9 :B?FKK	<<7" ""#45 H*77YG
H %%99; 	$t##G,B###-CI	$ <<7"""#45 H)77YG	H H #-	& 	& EGH H	$ 	$
H Hs;   I-!I&I+I0:I<8JI#0I9<JJc                 |   t        j                  g d      }| j                  |j                  j                         | j                  |j                  j                  t        |             | j                  t        t        |            t        |             | j                  t              5  |d    d d d        | j                  t              5  d|d<   d d d        |j                  d      }d|d<   | j                  ||j                  d             | j                  |j                  d       | j                  t        |      d       t        j                          5  t        j"                  d       | j                  t$              5  |j'                  d       d d d        | j                  |j'                  d	      d
       d d d        | j                  |d   d       | j                  |d   d       | j                  t)        |      d       d|d
<   | j                  |d
   d       d|d<   | j                  |d   d       | j                  |j                  d       | j+                  t$        d      5  d|d<   d d d        | j                  |d   d       d|d<   | j                  |d   d       | j                  |d   d       | j+                  t$        d      5  d|d<   d d d        | j                  |d   d       | j+                  t$        d      5  d|d<   d d d        | j                  |d   d       t        j                          5  t        j"                  d       | j                  |j-                  d      d       | j                  |j-                  d      d       | j                  |j-                  d      d       d d d        | j/                  d      }t        j                  ||      }	 | j1                  |j                  j                  |j                  j                         | j                  ||j                  j                         | j                  t        |      t        |             | j                  |j                  |j                         d|d<   | j                  |d   d       | j1                  |d   d       |j                  j3                          |j                  j	                          t        j                  |j                  j                        }| j                  |j                  j                  |j                  j                         d|d<   | j                  |d   d       |j                  j3                          |j                  j3                          t        j                         }	 | j                  t        |      d       | j                  |j                  d       | j                  |j-                  d      d       | j                  t$              5  |j'                  d        d d d        |j                  j3                          |j                  j	                          y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# |j                  j	                          w xY w# 1 sw Y   xY w# |j                  j	                          w xY w) N)r     HoWdYgX9vqr)  NTrX  r
  r  r   r  z8s8sdqxxxxxx?xxxxxxxx?qignore100r)  r  r  TrX  somera   z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodésr   r  u	   encodéess	   123456789s   adiostest03_duplicater  M   rA   ip  r  any)r   r  rc  r  r  rm   r+   rn   r   rl   
IndexError_get_packing_formatrk   r   r   warningscatch_warningssimplefilterrE   r  r   rT  r  r  r"  r    )rp   r  current_formatname_duplicatesl_copysl_tetheredempty_sls          r   'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basicsl  s   ((>
 	& 	bffkk3r7+c$r(mSW- z* 	qE	 z* 	BqE	 //21)?)?)BC 	$=> 	R!$ $$& 	/!!(+"":.   RXXc]A.	/ 	A(B& 	"I>	
 1A#1A'$78##J$?A 	#"BqE	# 	A'1A
+A)##J$?A 	 BqE	  	A)##J$?A 	! BqE	! 	A) $$& 	4!!(+RXXb\1-RXXh/3RXXh/3	4 ++,>?--b~F
	!W[[-=-=>^W[[-=-=>T"XtG}5RYY7GBKWR["-2+KKKK  $11rvv{{Ckoo&:&:;BB%
 !..0	"S]A.X__b1X^^E2A6"":. %t$%LL LL!I	 		 	$   	/ 	/.	# 	#	  	 	! 	!	4 	4( KK "% % LL!s   .ZZ!+Z3Z&)Z3:[ "[[A9['<C3[4 A-\ =\"\ ZZ#&Z0	+Z33Z= [
[[$'[14\\\ \;c                    t        t        j                  dz         D ]  }| j                  |      5  t	        j
                  t        d            }| j                  |j                  j                         t        j                  ||      }t        j                  |      }| j                  |t        j
                         | j                  |d   d       | j                  ||       d|d<   | j                  |d   d       d	|d
<   | j                  |d
   d	       t	        j
                  t        d            }| j                  |j                  j                         t        j                  ||      }| j                  t        |      t        |             |j                  j                          |j                  j                          |j                  j                          d d d         y # 1 sw Y   xY w)Nr   r  r6  r  rA   r  changedra   newvaluer  i  )rS  r  r  r   r   r  rc  r  r  r  r  r   rk   assertIsNotr   r    )rp   r  r  serialized_sldeserialized_sl	larger_slserialized_larger_sls          r   )test_shared_memory_ShareableList_picklingz;_TestSharedMemory.test_shared_memory_ShareableList_pickling  s   622Q67 	EE* "00r;. &R% @"(,,}"=%%#]%@%@B  !4a8  _5%."  A	2"1  !3Z@)77c
C		 4 45'-||I'N$  ]!3S9M5NO##%##))+/ 	 s   F7G66H 	c                    t        t        j                  dz         D ]  }| j                  |      5  t	        j
                  t        d            }t        j                  ||      }|j                  j                          |j                  j                          | j                  t              5  t        j                  |       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r  r6  r  )rS  r  r  r   r   r  r  r  r    r  rl   r  r  )rp   r  r  r2  s       r   5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_object  s    622Q67 	0EE* 
0"00r; &R% @ &&'89 0LL/0
0 
0	00 0
0 
0s$   A?C&1CC&C#C&&C/	c                    d}t        j                  t        j                  dd|gt         j                  t         j                        5 }|j
                  j                         j                         j                         }|j                          |j                          d}t        j                  t        j                  |      D ]  }	 t        j                  |d      } t"        j$                  dk(  rSt'        j(                  d	| d
       |j*                  j-                         j                         }| j/                  d|       d d d        y # t         $ r Y  {w xY w# 1 sw Y   y xY w)NaX  if 1:
            import os, time, sys
            from multiprocessing import shared_memory

            # Create a shared_memory segment, and send the segment name
            sm = shared_memory.SharedMemory(create=True, size=10)
            sys.stdout.write(sm.name + '\n')
            sys.stdout.flush()
            time.sleep(100)
        -Er  r  zIA SharedMemory segment was leaked after a process was abruptly terminatedFr  r'   /r   z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)
subprocessPopenrz   r   PIPEr  readlinestripdecoder	  r   r   sleeping_retryr  r   r  r  rB   r+   r(   
unregisterr  r  rm   )rp   r  r   r+   err_msgr  r  rq   s           r   4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_termination  s:   	 s~~tT3?%/__%/__6  	J9:88$$&,,.557D KKMFFH;G++G,@,@'J '44T%HC ww'! !++avJH
 hhmmo,,.DEHJ= 	J  	J )  	J  	Js2   	B E"
E!A(E"	EE"EE""E+N)ru   rv   rw   r   rM  r  r  r  r  r  r  r  r   rF   ry   rB   r+   r  r
  r  r-  r6  r8  rE  rZ   r   r   r  r  4  s     #M )n`3,BB4.8 X__RWW')NO P. X__RWW')IJ K(H<o"b60+Jr   r  c                   b    e Zd ZdZd Zd Zed        Zd Z e	j                  d      d        Zy)	_TestFinalizer  c                     t         j                  j                         | _        t         j                  j	                          y r   )r   _finalizer_registryr   registry_backupr  r   s    r   r  z_TestFinalize.setUp;  s+    #77<<>  &&(r   c                     t        j                          | j                  t        j                         t        j                  j                  | j                         y r   )rm  rn  r   r   rI  updaterJ  r   s    r   r  z_TestFinalize.tearDown?  s9    


112  ''(<(<=r   c                     G d dt               } |       }t        j                  ||j                  d       ~t	        j
                           |       }t        j                  ||j                  d      } |         |        ~t	        j
                           |       }t        j                  ||j                  d        |       }t        j                  ||j                  dd	        |       }t        j                  ||j                  d
d	        |       }	t        j                  |	|j                  dd	        |       }
t        j                  |
|j                  dd	       t        j                  d |j                  dd	       t        j                  d |j                  dd	       t        j                          |j                          t        j                  d       y )Nc                       e Zd Zy))_TestFinalize._test_finalize.<locals>.FooNr  rZ   r   r   r  rO  F      r   r  )r   r  )r   )r   )d10r   )rQ   exitpriority)d01r   )d02)d03)r  i)STOPi)
r<  r   Finalizer   rm  rn  _exit_functionr    rB   _exit)r   r2  r  r   r   close_br   rQ  rS  rT  rU  s              r   _test_finalizez_TestFinalize._test_finalizeD  sG   	& 	 Ea0


E--4996:		


Ea0ec4998!Dec4998!Dec4998!Dec4998!DdDIIFEdDIIIDI 	


r   c                 ,   | j                         \  }}| j                  | j                  |f      }d|_        |j	                          |j                          t        |j                  d      D cg c]  }| }}| j                  |g d       y c c}w )Nr   TrV  )r   r   rQ  rU  rT  rS  r  )	r   r   r[  r   r   r   r  r   rk   )rp   r2  r  r   r#  rY  s         r   test_finalizez_TestFinalize.test_finalizel  sy    99;jLL 3 3:-LH			!%dii!89##99!LM :s   1	Br   c                   	 d  G fddt               d	d 	fd}	fd}t        j                         }t        j                         }	 t        j
                  d       t        j                  ddd       t        j                  |	      t        j                  |	      g}t        j                  |      5  t        j                  d
       d	d d d        	 t        j
                  |       t        j                  |  t        j                          y # 1 sw Y   JxY w# t        j
                  |       t        j                  |  t        j                          w xY w)Nc                       y r   rZ   rZ   r   r   cbz,_TestFinalize.test_thread_safety.<locals>.cbz      r   c                       e Zd Z fdZy)-_TestFinalize.test_thread_safety.<locals>.Fooc                 l    | | _         t        j                  | t        j                  dd             y )Nr   r)  )rR  )rl  r   rW  r  randint)rp   r`  s    r   r   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__~  s%    dBV^^As5KLr   N)ru   rv   rw   r   )r`  s   r   r  rc  }  s	    Mr   r  Fc                      sCt        j                  t        j                         dz         	 t        j                          sBy y # t
        $ r} | Y d } ~ d } ~ ww xY wrF  )r   r  r  r   _run_finalizersrh   )r  r3  finishs    r   run_finalizersz8_TestFinalize.test_thread_safety.<locals>.run_finalizers  sL    

6==?T12 ((*  ! Cs   A 	AAAc                      i } s9	 t        d      D ch c]	  }         c}| t        j                  d      <   s8y y c c}w # t        $ r}|| j	                          Y d }~*d }~ww xY w)Nr6  r   )rS  r  getrandbitsrh   r  )r:  rV  r  r  r3  rh  s      r   make_finalizersz9_TestFinalize.test_thread_safety.<locals>.make_finalizers  se    A @ERy/I!/IAf((+,	  0J  CGGIIs'   A A A  A 	A*A%%A*gư>r   r   r  T)r<  rz   getswitchintervalrm  r  setswitchintervalr  r  r  r	   start_threadsr   r  rn  )
rp   ri  rl  old_intervalold_thresholdr   r  r`  r3  rh  s
         @@@@r   test_thread_safetyz _TestFinalize.test_thread_safetyw  s&   		M& 	M 		
	 ,,.((*	!!$'Q1% ''~> ''?AG!//8 

3 	  !!,/m,JJL  !!,/m,JJLs%   A-D-  D!D- !D*&D- -=E*N)ru   rv   rw   r   r  r  r  r[  r]  r   r  rr  rZ   r   r   rG  rG  7  sM    "M)>
 % %N	N Wu%4 &4r   rG  c                       e Zd Zd Zd Zy)_TestImportStarc                    dd l }t        j                  j                  t        j
                        }t        j                  j                  |j                  |      d      }|j                  |      }|D cg c]D  }t        j                  j                  t        j                  j                  |      d         d   F }}|D cg c]  }d|z   	 }}|j                  d       |j                  d       |S c c}w c c}w )Nr   z*.pyr   zmultiprocessing.zmultiprocessing.__init__r   )globrB   r   dirnamer   __file__r   escapesplitextsplitr  rX  )rp   rv  folderpatternfilesr  modulesr  s           r   get_module_namesz _TestImportStar.get_module_names  s    !9!9:'',,t{{62F;		'"EJK277##BGGMM!$4Q$78;KK3:;a%);;12()	 L;s   6A	C7C<c                    | j                         }t        j                  dk(  r4|j                  d       |j                  d       |j                  d       n(|j                  d       t        s|j                  d       t
        |j                  d       |D ]n  }t        |       t        j                  |   }| j                  t        |d      |       |j                  D ]#  }| j                  t        ||      |d|       % p y )	Nr1   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes__all__z does not have attribute )r  rz   r{   r  r$  r<   r/  r  r   r7  r  )rp   r  r+   modattrs        r   test_importz_TestImportStar.test_import  s    '')<<7"NN78NN=>NN>?NN>? AB=NN9: 		Dt++d#COOGC3T: C&7:DA		r   N)ru   rv   rw   r  r  rZ   r   r   rt  rt    s    	r   rt  c                   ,    e Zd ZdZd Zed        Zd Zy)_TestLoggingr  c                     t        j                         }|j                  t        j                         | j                  |d u       |j                  d       |j                  d       |j                  t               y )Nzthis will not be printedznor will this)	r   
get_loggersetLevelr   
SUBWARNINGr   debuginfo	LOG_LEVEL)rp   loggers     r   test_enable_loggingz _TestLogging.test_enable_logging  sV     ++-(d*+/0O$	"r   c                 j    t        j                         }|j                  |j                                y r   )r   r  r   getEffectiveLevel)r   r2  r  s      r   _test_levelz_TestLogging._test_level  s%     ++-		&**,-r   c                 .   d}d}t        j                         }t        j                         }|j                  }t        j
                  d      \  }}|j                  |       | j                  | j                  |f      }|j                          | j                  ||j                                |j                          |j                          |j                  t        j                         |j                  |       | j                  | j                  |f      }|j                          | j                  ||j                                |j                          |j                          |j                  |       |j                  t               y )Nr  %   Fr   r   )level)r   r  logging	getLoggerr  r   r  r   r  r   rk   r   r   r    NOTSETr  )	rp   LEVEL1LEVEL2r  root_logger
root_levelr  r  r   s	            r   
test_levelz_TestLogging.test_level  s#    ++-'') &&
(--U;LL 0 0yLA		/			'V$LL 0 0yLA		/			Z(i(r   N)ru   rv   rw   r   r  r  r  r  rZ   r   r   r  r    s%    "M# . .)r   r  c                   `    e Zd ZdZed        Z ej                   ee	d      d      d        Z
y)_TestPollEintrr  c                 v    t        j                  d       t        j                  |t        j
                         y rF  )r   r  rB   rD  r8  SIGUSR1)r   r   s     r   _killerz_TestPollEintr._killer'  s    

3
V^^$r   r  requires SIGUSR1c                    dgfd}t        j                         }t        j                  t        j                  |      }	 | j	                  | j
                  |f      }|j                          	 | j	                  t        j                  d      }|j                          |j                          |j                          | j                  d          | j                  |j                  d       t        j                  t        j                  |       y # |j                          w xY w# t        j                  t        j                  |       w xY w)NFc                      dd<   y )NTr   rZ   )rQ   
got_signals    r   recordz._TestPollEintr.test_poll_eintr.<locals>.record/  s     JqMr   r   )r  r   )rB   r   r8  r  r   r  r   r   r  r   r   rk   r   )rp   r  r   
oldhandlerkillerr   r  s         @r   test_poll_eintrz_TestPollEintr.test_poll_eintr,  s    W
	!iik]]6>>6:
	6\\SF\CFLLNLL

L>	OOJqM*QZZ+MM&..*5	  MM&..*5s&   .D- 2AD 3A D- D**D- -&EN)ru   rv   rw   r   r  r  rF   r  r7  r8  r  rZ   r   r   r  r  #  sE    "M% % X35GH6 I6r   r  c                   >    e Zd Z ej                  ed      d        Zy)TestInvalidHandleskipped on Windowsc                    t         j                  j                  d      }	 |j                          d |_        | j                  t        t
        ft         j                  j                  d       y # t        t
        f$ r Y Nw xY w# d |_        w xY w)NiMrA   )r   r*  
Connectionr  rE   r  _handlerl   r  s     r   test_invalid_handlesz&TestInvalidHandle.test_invalid_handlesG  sy    ))44X>	 IIK  DL:w/)44??	E G$ 		
  DLs#   A. .B =B ?B  B 	BN)ru   rv   rw   rF   ry   WIN32r  rZ   r   r   r  r  E  s$    X__U01E 2Er   r  c                       e Zd Zd Zd Zy)	OtherTestc                      G d dt               }| j                  t        j                  t        j                  j
                   |       d       y )Nc                       e Zd Zd Zd Zy)FOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc                      y)N   something bogusrZ   rp   rq  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytes]  s    )r   c                      y r   rZ   rp   r	  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytes_      r   N)ru   rv   rw   r  r  rZ   r   r   _FakeConnectionr  \  s    *r   r     abc)r<  rl   r   r   r*  deliver_challengerp   r  s     r   #test_deliver_challenge_auth_failurez-OtherTest.test_deliver_challenge_auth_failure[  s=    	f 	
 	/==)44FF)+V	5r   c                      G d dt               }| j                  t        j                  t        j                  j
                   |       d       y )Nc                       e Zd Zd Zd Zd Zy)EOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc                     d| _         y r  )r  r   s    r   r   zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__g  s	    
r   c                     | xj                   dz  c_         | j                   dk(  rt        j                  j                  S | j                   dk(  ryy)Nr   r  r  r   )r  r   r*  
_CHALLENGEr  s     r   r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesi  s=    

a
::?*55@@@ZZ1_-r   c                      y r   rZ   r  s     r   r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesp  r  r   N)ru   rv   rw   r   r  r  rZ   r   r   r  r  f  s    r   r  r  )r<  rl   r   r   r*  answer_challenger  s     r   "test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failuree  s=    	f 	 	/==)44EE)+V	5r   N)ru   rv   rw   r  r  rZ   r   r   r  r  X  s    55r   r  md5c                   "    e Zd ZdZd Zd Zd Zy)ChallengeResponseTests   supadupasecretkeyc                 V    t         j                  j                  | j                  |      S r   )r   r*  _create_responser   )rp   messages     r   create_responsez%ChallengeResponseTest.create_response|  s$    ))::LL'
 	
r   c                 X    t         j                  j                  | j                  ||      S r   )r   r*  _verify_challenger   )rp   r  responses      r   verify_challengez&ChallengeResponseTest.verify_challenge  s&    ));;LL'8
 	
r   c                 .   dD ]  }| j                  d|      5  d}|rd|j                  d      z  }nd}||z   }| j                  |      }|j                  |      s| j	                  |       | j                  ||       d d d         y # 1 sw Y   xY w)N)Nr  r  zalgo=s   is-twenty-bytes-longs   {%s}re  r   )r   r   r  
startswithri   r  )rp   algor  r  r  s        r   test_challengeresponsez,ChallengeResponseTest.test_challengeresponse  s    + 	5Dj) 
5-$t{{7';;F Fsl//4**62IIh'%%c84
5 
5	5
5 
5s   A&BB	N)ru   rv   rw   r   r  r  r  rZ   r   r   r  r  w  s     #G



5r   r  c                 .    | xj                   dz  c_         y r   )r=  )nss    r   initializerr    s    GGqLGr   c                   $    e Zd Zd Zd Zd Zd Zy)TestInitializersc                     t        j                         | _        | j                  j                         | _        d| j                  _        y r  )r   Managermgrr  r  r=  r   s    r   r  zTestInitializers.setUp  s1    "**,(($$&r   c                 l    | j                   j                          | j                   j                          y r   )r  r  r   r   s    r   r  zTestInitializers.tearDown  s    r   c                 P   t         j                  j                         }| j                  t        |j
                  d       |j                  t        | j                  f       | j                  | j                  j                  d       |j                          |j                          y r   )r   r  SyncManagerrl   	TypeErrorr   r  r  rk   r=  r  r   )rp   r  s     r   test_manager_initializerz)TestInitializers.test_manager_initializer  sj    $$002)QWWa0	dggZ(q)	

	r   c                 (   | j                  t        t        j                  d       t        j                  dt        | j
                  f      }|j                          |j                          | j                  | j
                  j                  d       y )Nr   )r  )
rl   r  r   r  r  r  r    r   rk   r=  rO  s     r   test_pool_initializerz&TestInitializers.test_pool_initializer  sa    )_%9%9qI  K$''<			q)r   N)ru   rv   rw   r  r  r  r  rZ   r   r   r  r    s    
*r   r  c                 \    	 | j                  d      }y # t        j                  $ r Y y w xY w)NF)block)r   r  r  )r   items     r   _this_sub_processr    s-    uu5u!== s    ++c                      t        j                         } t        j                  t        | f      }d|_        |j                          |j                          y rM  )r   r   r   r  r   r   r   )r"   subProcs     r   _test_processr    s>    !!#E%%->eXNGGNMMOLLNr   c                     | | z  S r   rZ   r  s    r   _afuncr    r  r   c                      t        j                  d      } | j                  t        g d      }| j	                          | j                          y )Nra   r  )r   r  r  ra   r   r  r
  )r   r  r  r  r    r   )r  r?  s     r   pool_in_processr    s5    !,D./AJJLIIKr   c                   .    e Zd Zd Zed        Zd Zd Zy)
_file_likec                      || _         d | _        y r   )	_delegate_pid)rp   delegates     r   r   z_file_like.__init__  s    !	r   c                 |    t        j                         }|| j                  k7  r|| _        g | _        | j                  S r   )rB   r   r  _cacher  s     r   cachez_file_like.cache  s1    iik$))DIDK{{r   c                 :    | j                   j                  |       y r   )r  rX  r  s     r   r,  z_file_like.write  s    

$r   c                 z    | j                   j                  dj                  | j                               g | _        y )Nr  )r  r,  r   r  r  r   s    r   flushz_file_like.flush  s(    RWWTZZ01r   N)ru   rv   rw   r   propertyr  r,  r  rZ   r   r   r  r    s%       r   r  c                       e Zd Zd Zd Zd Zy)TestStdinBadfiledescriptorc                 x    t        j                  t              }|j                          |j	                          y Nr   )r   r   r  r   r   )rp   r  s     r   test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_process  s$    &&m<

		r   c                 x    t        j                  t              }|j                          |j	                          y r  )r   r   r  r   r   rO  s     r   test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_process  s$    ##?;			r   c                     t        j                         }t        |      j                  d       t	        j
                  fd      }j                          y )NrS  c                  $     j                         S r   )r  )flikes   r   r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>  s    ekkm r   r   )r  r  r  r,  r   r   r  )rp   sior  r  s      @r   test_flushingz(TestStdinBadfiledescriptor.test_flushing  s=    kkm3E&&.CDr   N)ru   rv   rw   r  r	  r  rZ   r   r   r  r    s    

'r   r  c                       e Zd Zed        ZddZed        ZddZd Zd Z	 e
j                  d      d        Zed	        Z e
j                  d      d
        Zd Zy)TestWaitc                     t        d      D ]S  }|r*t        j                  t        j                         dz         |j	                  |t        j                         f       U |j                          y )Nr6  r.   )rS  r   r  r  r   rB   r   r    )r   r  slowrV  s       r   _child_test_waitzTestWait._child_test_wait  sQ    r 	%A

6==?3./FFAryy{#$	% 	
	r   c                    ddl m} g }g g }t        d      D ]  }t        j                  d      \  }}t        j
                  | j                  ||f      }d|_        |j                          |j                          |j                  |       j                  |       | j                  |j                          |r2 ||      D ]$  }	 |j                         }	|j                  |	       & |r2|j!                          t#        fdt        d	      D              }
| j%                  ||
       y # t        $ r$ |j                  |       |j                          Y w xY w)
Nr   r4   ra   Fr   r   Tc              3   H   K   | ]  }D ]  }||j                   f   y wr   )r   )r  rV  r   ry  s      r   r  z%TestWait.test_wait.<locals>.<genexpr>'  s%     GGA1aee*G*Gs   "r6  )multiprocessing.connectionr   rS  r   r   r   r  r   r   r    rX  rc  r   r   r  r  r  r  rk   )rp   r  r   readersmessagesrV  r(  r  r   r  rZ  ry  s              @r   	test_waitzTestWait.test_wait  s(   3q 	$A"''u5DAq''t/D/DAt9UAAHGGIGGINN1LLOOOAFF#	$ '] ))&&(C
 OOC()  	GeBiGG8,   NN1%GGIs   D22*EEc                 ,   t        j                          }|j                  |       t        d      D ]Q  }|r*t        j                  t        j
                         dz         |j                  d|z  j                  d             S |j                          y )Nr6  r.   %s
re  )	r\  r  rS  r   r  r  rb  r   r    )r   r   r  r   rV  s        r   _child_test_wait_socketz TestWait._child_test_wait_socket*  sl    MMO			'r 	4A

6==?3./IIvz))'23	4 	
	r   c                    ddl m} t        j                  t        j
                  df      }|j                         }g }g }i }t        d      D ]h  }t        j                  | j                  ||f      }	d|	_        |	j                          |j                  |	       | j                  |	j                         j t        d      D ]+  }|j!                         \  }
}|j                  |
       g ||
<   - |j#                          |rY ||      D ]K  }
|
j%                  d      }|s"|j'                  |
       |
j#                          8||
   j                  |       M |rYdj                  d t        d	      D              j)                  d
      }|j+                         D ]#  }| j-                  dj                  |      |       % y )Nr   r4   ra   r   Tr  r  c              3   &   K   | ]	  }d |z    yw)r  NrZ   r  s     r   r  z,TestWait.test_wait_socket.<locals>.<genexpr>S  s     9!6A:9s   r6  re  r   )r  r   r\  r]  r   r  r^  rS  r   r   r  r   r   rX  rc  r   r1  r    r   r  r   rH  rk   )rp   r  r   r  r  r  ry  dicrV  r   r(  r  r  rZ  vs                  r   test_wait_socketzTestWait.test_wait_socket4  s}   3  -"4"4a!89}}q 	$A''t/K/K.2D\;AAHGGILLOOOAFF#	$ q 	A88:DAqNN1CF	 	
	'] 'ffRjNN1%GGIFMM#&'  779uRy99@@I 	4ASXXa[(3	4r   c                 &    | j                  d       y rH  )r  r   s    r   test_wait_slowzTestWait.test_wait_slowW  s    tr   c                 &    | j                  d       y rH  )r!  r   s    r   test_wait_socket_slowzTestWait.test_wait_socket_slowZ  s    d#r   rr  c                    ddl m} d}t        j                         \  }}t	        j
                         } |||g|      }t	        j
                         |z
  }| j                  |g        | j                  ||dz         | j                  ||dz         |j                  d        t	        j
                         } |||gd      }t	        j
                         |z
  }| j                  ||g       | j                  |d       y )Nr   r4   r   r  r  r  皙?)
r  r   r   r   r   r   rk   r#  r<  r   )rp   r   rZ  r   r   r   r   r4  s           r   test_wait_timeoutzTestWait.test_wait_timeout]  s    3##%1 Aq68$ 5(b!x!|,5(S.1	t Aq62 5(qc"s#r   c                 N    |j                          t        j                  |       y r   )r\  r   r  )r   rk  periods      r   signal_and_sleepzTestWait.signal_and_sleepu  s    

6r   c                    ddl m} d}d }t        j                  d      }t        j                         \  }}t        j
                  | j                  ||f      }|j                          | j                  |j                  t               | j                  |j                  d             t        j                         } |||j                  |g|dz         }	t        j                         |z
  }
| j                  |	|j                  g       | j!                  |
|dz          | j#                  |
|dz
         |j%                  d        t        j                         } |||j                  |gd      }	t        j                         |z
  }
| j                   ||	       ||j                  |g             | j!                  |
d	       |j%                  d        t        j                         } |||j                  |gd      }	t        j                         |z
  }
| j                   ||	       |||j                  |g             | j!                  |
d	       |j'                          |j)                          y )
Nr   r4   r  c                     t        | d       S )Nc                     t        |       S r   )rU  r  s    r   r  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>  s
    BqE r   )rS  )r  )r  s    r   r  z,TestWait.test_wait_integer.<locals>.<lambda>  s    F1/: r   r   r  r  r  r'  )r  r   r   rn  r   r   r+  r   r   rb  rI  r   r[  r   r   rk   r#  r<  r   r	  r   )rp   r   rZ  sorted_rk  r   r   r   r   r   r4  s              r   test_wait_integerzTestWait.test_wait_integerz  s   3:''*##%1##4+@+@*-x: 	
	ajj#.B/0 Aqzz1%x"}5 5(qzzl+x!|,5(Q,/	t Aqzz1%r* 5(w

A'?@s#	t Aqzz1%r* 5(w1::q/A'BCs#		r   c                 2   ddl m} t        j                         \  }}t	        j
                         } ||gd      }t	        j
                         |z
  }| j                  |g        | j                  |d       |j                          |j                          y )Nr   r4   rA   r  r   )	r  r   r   r   r   r   rk   r#  r    )rp   r   r   r   r   r   s         r   test_neg_timeoutzTestWait.test_neg_timeout  sr    3##%1NNA3#NNq b!1				r   Nr  )ru   rv   rw   r  r  r  r  r!  r#  r%  r   r  r(  r+  r0  r2  rZ   r   r   r  r    s     -<  !4F$ Wz*$ +$.   Wz*) +)V	r   r  c                   p    e Zd Z ej                  ed      d        Z ej                  ed      d        Zy)TestInvalidFamilyr  c                     | j                  t              5  t        j                  j	                  d       d d d        y # 1 sw Y   y xY w)Nz\\.\testrl   rE   r   r*  r,  r   s    r   test_invalid_familyz%TestInvalidFamily.test_invalid_family  s9    z* 	=&&//<	= 	= 	=	    ?Az skipped on non-Windows platformsc                     | j                  t              5  t        j                  j	                  d       d d d        y # 1 sw Y   y xY w)Nz/var/test.piper6  r   s    r   test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32  s>    z* 	B&&//0@A	B 	B 	Br8  N)	ru   rv   rw   rF   ry   r  r7  r  r:  rZ   r   r   r4  r4    sI    X__U01= 2= X BCB DBr   r4  c                   2    e Zd Zed        Zed        Zd Zy)	TestFlagsc                 T    |j                  t        t        j                               y r   )r   r   rz   flagsr   r2  s     r   run_in_grandchildzTestFlags.run_in_grandchild  s    		%		"#r   c                    dd l }t        j                  |      }|j                  d      \  }}|j	                  | j
                  |f      }t        j                  t              5  |j                          d d d        |j                         }|j                          |j                          |j                          t        t        j                        |f}t!        |j#                  |             y # 1 sw Y   xY w)Nr   Fr   r   )category)jsonr   rO  r   r   r@  r%  r&  DeprecationWarningr   r   r   r    r   rz   r>  printr  )	r   rS   rC  mpr(  r  r   grandchild_flagsr>  s	            r   run_in_childzTestFlags.run_in_child  s    ((6wwew$1JJc331$J?$$.@A 	GGI	668					syy!#34djj 	 	s   'C66C?c                     dd l }dt        j                         d}t        j                  t
        j                  dddd|g      }|j                  |j                  d            \  }}| j                  ||       y )	Nr   zIfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()r:  z-Sz-Or  re  )
rC  r   rP   r<  check_outputrz   r   r  rA  rk   )rp   rC  progr	  child_flagsrG  s         r   
test_flagszTestFlags.test_flags  sz    &&5&F&F&H%K1N 	 &&^^T4tT:<(,

4;;w3G(H%%&67r   N)ru   rv   rw   r  r@  rH  rN  rZ   r   r   r<  r<    s-    $ $ ! !
8r   r<  c                   "    e Zd Zed        Zd Zy)TestTimeoutsc                     t        j                  d       |j                  d       |j                          t        j
                  j                  |      }|j                  d       |j                          y )Nr   r  r  )r   r  r   r    r   r*  r0  )r   childr   r2  s       r   _test_timeoutzTestTimeouts._test_timeout  sK    

1

3))009		#

r   c                    t        j                         }	 t        j                  d       t        j                  d      \  }}t        j
                  j                  d      }t        j                  | j                  ||j                  f      }|j                          |j                          | j                  |j                         d       |j                          |j                         }| j                  |j                         d       |j                          |j                          t        |       t        j                  |       y # t        j                  |       w xY w)	Nr.   Tr   AF_INETr(  r   r  r  )r\  getdefaulttimeoutsetdefaulttimeoutr   r   r*  r,  r   rS  r   r   r    rk   r   r1  r&   )rp   old_timeoutparentrR  r  r   r2  s          r   r5  zTestTimeouts.test_timeout  s    ..0	2$$S)+00=MFE**3393EA''t/A/A.3QYY-?AAGGIKKMV[[]C0LLN88:DTYY[#.JJLGGIO$$[1F$$[1s   D&E E)N)ru   rv   rw   r  rS  r5  rZ   r   r   rP  rP    s     2r   rP  c                       e Zd Zd Zy)TestNoForkBombc                    t        j                         }t        j                  j	                  t        j                  j                  t              d      }|dk7  rSt        j                  j                  j                  ||      \  }}}| j                  |d       | j                  d|       y t        j                  j                  j                  ||      \  }}}| j                  |j                         d       | j                  |d       y )Nzmp_fork_bomb.pyrg   r   s   RuntimeErrors   123)r   rP   rB   r   r   rw  rx  r=  r   r   assert_python_failurerk   rm   r  r  )rp   rw  r+   rh  r  rq   s         r   test_noforkbombzTestNoForkBomb.test_noforkbomb  s    --/ww||BGGOOH57HI<<<55KKDRTULBSS#&MM/3/<<55FFtRPLBSSZZ\62S#&r   N)ru   rv   rw   r^  rZ   r   r   r[  r[    s    
'r   r[  c                   "    e Zd Zed        Zd Zy)TestForkAwareThreadLockc                 "   |dkD  rRt        j                  | j                  |dz
  |f      }|j                          |j	                          t        |       n(|j                  t        t        j                               |j	                          y )Nr   r   )
r   r   rR  r   r    r&   r   r   r   _afterfork_registry)r   r  r2  r   s       r   rR  zTestForkAwareThreadLock.child!  s`    q5''syy!T{KAGGIJJLOIIc$2234

r   c                 n   t        j                  d      \  }}t        j                         }t	        t        j
                        }t        j                  | j                  d|f      }|j                          |j                          |j                         }t        |       | j                  ||       y )NFr   r   )r   r   r   ForkAwareThreadLockr   rb  r   rR  r   r    r   r&   assertLessEqual)rp   r(  r  r  old_sizer   new_sizes          r   r`  z!TestForkAwareThreadLock.test_lock,  s    ##E*1$$&t//0##4::QFC				668QXx0r   N)ru   rv   rw   r  rR  r`  rZ   r   r   r`  r`    s    
  	1r   r`  c                   .    e Zd Zd Zd Zed        Zd Zy)TestCloseFdsc                 8   t         r"t        j                         j                         S t        j                         j                         }g }|dk  r,|j                  |       t	        j
                  |      }|dk  r,|D ]  }t	        j                  |        |S )Nrq  )r  r\  detachrX  rB   dupr    )rp   r  to_closer?  s       r   get_high_socket_fdzTestCloseFds.get_high_socket_fd=  s     ==?))++ '')BHr'#VVBZ r'  Ir   c                     t         rCt        j                  t        j                  t        j                  |      j	                          y t        j                  |       y )N)r  )r  r\  rU  SOCK_STREAMr    rB   )rp   r  s     r   r    zTestCloseFds.closeO  s3    MM&..&*<*<RHNNPHHRLr   c                     	 t        j                  |t         j                  t         j                        }|j	                          |j                  d        y # t        $ r}|j                  |       Y d }~y d }~ww xY wr   )r\  fromfdrU  rp  r    r   rh   )r   r2  r  r   r  s        r   _test_closefdszTestCloseFds._test_closefdsU  sX    	b&..&2D2DEA GGIIIdO	  	IIaLL	s   3A 	A; A66A;c                    t         st        j                  d      t        j                         \  }}| j                         }	 t        j                  | j                  ||f      }|j                          |j                          |j                         }t        |       | j                  |       |j                          |j                          t        j                         dk(  r| j                  |d        y d}| j                  |t               | j!                  |j"                  t"        j$                  k(  xs |j&                  |k(  |       y # | j                  |       |j                          |j                          w xY w)Nzrequires fd picklingr   rg   i6'  )r$  rF   rG   r   r   rn  r   rs  r   r    r   r&   rP   ro  r   r  r   r  r  winerror)rp   r  r  r  r   r  WSAENOTSOCKs          r   test_closefdzTestCloseFds.test_closefd_  s   ##$:;;(--/$$&
	''t/B/B.4b\;AGGILLNAOJJrNLLNLLN++-7MM!T"K!!!W-OOAGGu{{2 6JJ+5q: JJrNLLNLLNs   AE 3FN)ru   rv   rw   rn  r    r  rs  rw  rZ   r   r   ri  ri  ;  s%    $  :r   ri  c                       e Zd Z eej
                  ej                        Zed        Z	 e
j                   eed      d      d        Zed        Z e
j                   eed      d      d        Zy)TestIgnoreEINTRc                     d }t        j                   t         j                  |       |j                  d       |j                         }|j                  |       |j	                  d| j
                  z         y )Nc                      y r   rZ   r  frames     r   r5  z-TestIgnoreEINTR._test_ignore.<locals>.handler  ra  r   ready   x)r8  r  r   r   r  CONN_MAX_SIZE)r   r2  r5  r?  s       r   _test_ignorezTestIgnoreEINTR._test_ignore  sR    	fnng.		'IIK		!s0001r   r  r  c                    t        j                         \  }}	 t        j                  | j                  |f      }d|_        |j                          |j                          | j                  |j                         d       t        j                  d       t        j                  |j                  t        j                         t        j                  d       |j!                  d       | j                  |j                         d       t        j                  d       t        j                  |j                  t        j                         | j                  |j#                         d| j$                  z         t        j                  d       |j'                          |j                          y # |j                          w xY w)Nr   Tr~  r.   i  r  )r   r   r   r  r   r   r    rk   r   r   r  rB   rD  r   r8  r  r   r  r  r   r  s       r   test_ignorezTestIgnoreEINTR.test_ignore  s    *//1j	''t/@/@.8]<AAHGGITYY['2JJsOGGAEE6>>*JJsOIIdOTYY[$/JJsOGGAEE6>>*T__.t7I7I0IJJJsOFFHJJLDJJLs   FF1 1Gc                 0   d }t        j                   t         j                  |       t        j                  j	                         5 }|j                  |j                         |j                         }|j                  d       d d d        y # 1 sw Y   y xY w)Nc                      y r   rZ   r|  s     r   r5  z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler  ra  r   welcome)r8  r  r   r*  r,  r   r   r1  )r   r2  r5  r  r   s        r   _test_ignore_listenerz%TestIgnoreEINTR._test_ignore_listener  si    	fnng.''002 	aIIaii 
AFF9	 	 	s   =BBc                 ~   t        j                         \  }}	 t        j                  | j                  |f      }d|_        |j                          |j                          |j                         }t        j                  d       t        j                  |j                  t        j                         t        j                  d       t         j                  j!                  |      }| j#                  |j                         d       |j%                          |j                          y # |j                          w xY w)Nr   Tr.   r  )r   r   r   r  r   r   r    r   r   r  rB   rD  r   r8  r  r*  r0  rk   r   )rp   r2  r  r   r   r3  s         r   test_ignore_listenerz$TestIgnoreEINTR.test_ignore_listener  s    *//1j	''t/I/I.8]<AAHGGIiikGJJsOGGAEE6>>*JJsO$//66w?FV[[]I6FFHJJLDJJLs   D D* *D<N)ru   rv   rw   maxr   PIPE_MAX_SIZESOCK_MAX_SIZEr  r  r  rF   r  r7  r8  r  r  r  rZ   r   r   ry  ry  }  s     --w/D/DEM2 2 X35GH I,   X35GH Ir   ry  c                       e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
 ej                  ej                  dk(  d	       ed
      d               Zed        Zed        Zd Zy)TestStartMethodc                 J    |j                  t        j                                y r   )r   r   rP   r?  s     r   _check_contextzTestStartMethod._check_context  s    		/2245r   c                 J   |j                  d      \  }}|j                  | j                  |f      }|j                          |j	                          |j                         }|j	                          |j                          | j                  ||j                                y )NFr   r   )	r   r   r  r   r    r   r   rk   rP   )rp   rs   r(  r  r   child_methods         r   check_contextzTestStartMethod.check_context  sx    xxux%1KKt22!K>				vvx			s';';'=>r   c                    dD ]  }	 t        j                  |      }| j                  |j	                         |       | j                  |j                         |       | j                  t        |j                  d       | j                  t        |j                  d        | j                  |        y # t        $ r Y w xY w)Nrg   rN   r  rN   )	r   rO  rE   rk   rP   ro  rl   rj   r  )rp   methodrs   s      r   r)  zTestStartMethod.test_context  s    5 		$F%11&9 S113V<MM#//+S1j#*>*>Hj#*>*>Es#		$  s   B22	B>=B>c                     	 t        j                  d      }| j                  t        d      5  |j                  g d       d d d        y # t        $ r t        j                  d      w xY w# 1 sw Y   y xY w)Nr  zforkserver should be availablez&module_names must be a list of stringsr  )r   rO  rE   rF   rG   rT  r  set_forkserver_preload)rp   rs   s     r   test_context_check_module_typesz/TestStartMethod.test_context_check_module_types  sx    	F!--l;C ##I/WX 	2&&y1	2 	2  	F##$DEE	F	2 	2s   A
 A,
A),A5c                 <   t        j                  t               d}t        j                         }	 dD ]  }	 t        j                  |d       | j                  t        j                         |       t        j                         }| j                  |j                         |       | j                  t        |      j                  j                         j                  |             | j                  |j                  j                  j                         j                  |             | j                  t                |dz  } 	 t        j                  |d       | j                  |d       y # t
        $ r Y Kw xY w# t        j                  |d       w xY w)Nr   r  Tre   r   )r   r  PRELOADrP   rj   rE   rk   rO  r   r  ru   lowerr  r   r  r3  )rp   r  
old_methodr  rs   s        r   test_set_getzTestStartMethod.test_set_get  sG   ..w7$557
	E9 #44V4H   !A!A!CVL%113  !5!5!7@S	 2 2 8 8 : E Ef MNKK((..0;;FCE""?3
 ,,ZtDq) "  ,,ZtDs/   F E2C8F 2	E?;F >E??F Fc                     t        j                         }t        j                  dk(  r| j	                  |dg       y | j                  |ddgk(  xs |ddgk(  xs |g dk(  xs |g dk(         y )Nr1   rN   rg   r  )rN   rg   r  )r   get_all_start_methodsrz   r{   rk   r   )rp   methodss     r   test_get_allzTestStartMethod.test_get_all  sz    !779<<7"Wwi0OOG'88 G#'88G#'FFG $'FFHr   c                    t        j                         dk7  r| j                  d       t        j                  j                  t        j                  j                  t              d      }t        j                  j                  j                  |      \  }}}|j                         }|j                         }|j                         dk7  s|dk7  r(t        |       t        |       | j                  d       y y )Nr  z*test only relevant for 'forkserver' methodzmp_preload.pyokr  z(failed spawning forkserver or grandchild)r   rP   r   rB   r   r   rw  rx  r=  r   r   r  rA  r  rE  ri   )rp   r+   rh  r  rq   s        r   test_preload_resourcesz&TestStartMethod.test_preload_resources  s    ++-=MMFGww||BGGOOH5G||11BB4HCjjljjl::<43"9#J#JII@A $-r   r1   z*Only Spawn on windows so no risk of mixingavoids redundant testing.c                 N   dD ]  }t        j                  d      j                         }t        j                  |      }|j                  t        |f      }d}| j                  t        |      5  |j                          d d d         dD ]  }t        j                         D ]r  }t        j                  |      j                         }t        j                  |      }|j                  t        |f      }|j                          |j                          t  y # 1 sw Y   !xY w)N)rN   r  rg   r   zA SemLock created in a fork)
r   rO  r   r   r#   rT  r4  r   r  r   )rp   process_methodr"   process_ctxr   rD  queue_methods          r   test_mixed_startmethodz&TestStartMethod.test_mixed_startmethod  s   
 6 	N#//7==?E)55nEK##;eX#FA3G''g> 	 	 4 	L"1"G"G"I '33LAGGI-99.I''{%'J			 s   .DD$	c                 &    |j                  d       y r   r   )r   r"   s     r   _put_one_in_queuez!TestStartMethod._put_one_in_queue%  s    		!r   c                     |j                  d       t        j                  | j                  |f      }|j	                          |j                          y rR  )r   r   r   r  r   r   )r   r"   r%   s      r   _put_two_and_nest_oncez&TestStartMethod._put_two_and_nest_once)  s9    		!!))1F1FeXVr   c                 \   t        j                         }t        j                  | j                  |f      }|j	                          |j                          g }|j                         s0|j                  |j                                |j                         s0| j                  |ddg       y )Nr   r  r   )
r   r   r   r  r   r   r  rX  r   rk   )rp   r"   r%   r   s       r   test_nested_startmethodz'TestStartMethod.test_nested_startmethod0  s      %%'!))1L1LTYS[\++-NN599;' ++- 	1a&)r   N)ru   rv   rw   r  r  r  r)  r  r  r  r  rF   ry   rz   r{   r[   r  r  r  r  rZ   r   r   r  r    s    6 6?
$2*,H
B X__S\\W,AC !<= >C&    *r   r  r  c                   F    e Zd Zd Zd Zd Zd Zd Zed        Z	d Z
d Zy	)
TestResourceTrackerc                    d}t         j                  D ]  }| j                  |      5  |dk(  r
	 d d d        &t        j                         \  }}t        j                  t        j                  dd|j                  ||      g|gt
        j                        }t        j                  |       t        |dd	
      5 }|j                         j                         j                  d      }|j                         j                         j                  d      }d d d        t!        |       |j#                          |j%                          d| d}	t'        j(                  t&        j*                  |	      D ]  }
	 t!        |        |j6                  j9                         j                  d      }|j6                  j                          dj                  |      }| j;                  ||       | j;                  |d|z         d d d         y # 1 sw Y   xY w# t,        $ rE}| j/                  |j0                  t0        j2                  t0        j4                  f       Y d }~ d }~ww xY w# 1 sw Y   cxY w)Na  if 1:
            import time, os
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")


            def create_and_register_resource(rtype):
                if rtype == "semaphore":
                    lock = mp.Lock()
                    return lock, lock._semlock.name
                elif rtype == "shared_memory":
                    sm = SharedMemory(create=True, size=10)
                    return sm, sm._name
                else:
                    raise ValueError(
                        "Resource type {{}} not understood".format(rtype))


            resource1, rname1 = create_and_register_resource("{rtype}")
            resource2, rname2 = create_and_register_resource("{rtype}")

            os.write({w}, rname1.encode("ascii") + b"\n")
            os.write({w}, rname2.encode("ascii") + b"\n")

            time.sleep(10)
        )r,   noopr:  r  )r  r,   )pass_fdsr  r  T)r  re  zA z< resource was leaked after a process was abruptly terminatedr  z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)r(   r*   r   rB   piper<  r=  rz   r   r   r>  r    r  r?  r  rA  r-   r	  r   r   rB  r  r  rm   r  ENOENTEINVALr  r  r  )rp   r  r,   r(  r  r   r  name1name2rD  r  r  rq   rZ  s                 r   test_resource_trackerz)TestResourceTracker.test_resource_trackerD  s(   : &44 $	PEE* #PF?#P #P wwy1$$cnn%)4au1M&O/0c,6OO= !T40 BAJJL//188AEJJL//188AEB !.w '1 2 //0E0E29; A(6 hhmmo,,W5 &&,f!'#    h/  &F&NOG#P #P$	PB B #  aggell/KL	/#P #PsV   I,BI,=AHA!I,:HA=I,HI,	I)	$:I$	I,$I)	)I,,I6	c                 p   ddl m} |j                  }|Jt        j                  |t
        j                         t        j                  |t
        j                          t        j                         5  t        j                  d       |j                          d d d        |j                  }t        j                  ||       t        j                  d       t        j                   d      }t        j                  d      5 }t        j                  d	       |j#                         }|j%                          |j'                          t)        j*                  |      }~t-        j.                          | j1                   |              |rp| j3                  t5        |      d
       |d   }	| j7                  t9        |	j:                  t<                     | j7                  dt?        |	j@                        v        n| j3                  t5        |      d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   _resource_tracker)r   r  r'  rN   T)r  alwaysr   zresource_tracker: process died)! multiprocessing.resource_trackerr  r  rB   rD  r8  rE  r   wait_processr%  r&  r'  r  r   r  r   rO  rn  r[  r\  rk  rl  rm  rn  r   rk   r   r   
issubclassrB  UserWarningrn   r  )
rp   r  
should_dier  r   rs   all_warnrk  rp  the_warns
             r   check_resource_tracker_deathz0TestResourceTracker.check_resource_tracker_death  s    	G$$?GGC(  ?$$& 	/!!(+,,.	/  $$
V

3))'2$$D1 	3X!!(+--/CKKMKKMS!B JJLbd#  X2#A;
8+<+<k JK @#&x'7'7#8!9 :   X2%	3 	3	/ 	/	3 	3s   3&HDH,H),H5c                 D    | j                  t        j                  d       y rD  )r  r8  r  r   s    r   test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigint  s    ))&--?r   c                 D    | j                  t        j                  d       y rD  )r  r8  r@  r   s    r   test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigterm  s    ))&..%@r   c                 D    | j                  t        j                  d       y rH  )r  r8  rE  r   s    r   test_resource_tracker_sigkillz1TestResourceTracker.test_resource_tracker_sigkill  s    ))&..$?r   c                     ddl m} |j                          |j                  d |fv }||j	                         z  }| j                  |       y )Nr   r  )r  r  r  r  _check_aliver   )r2  r   r  reuseds       r   _is_resource_tracker_reusedz/TestResourceTracker._is_resource_tracker_reused  sG    F((* #''D#;6#0022		&r   c                    ddl m} |j                          |j                  }t	        j
                  d      \  }}t	        j                  | j                  ||f      }|j                          |j                         }|j                          |j                          |j                          | j                  |       y )Nr   r  Fr   r   )r  r  r  r  r   r   r   r  r   r   r   r    r   )rp   r  r   r(  r  r   is_resource_tracker_reuseds          r   test_resource_tracker_reusedz0TestResourceTracker.test_resource_tracker_reused  s    F((*$$##511##4+K+K*+S3		%&VVX" 	
				23r   c                     d}ddt        |      z
  z  }| j                  t              5  t        j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   r  )r   rl   rE   r(   register)rp   r,   too_long_name_resources      r   test_too_long_name_resourcez/TestResourceTracker.test_too_long_name_resource  sU      !$c%j(8!9z* 	E%%&<eD	E 	E 	Es   A		AN)ru   rv   rw   r  r  r  r  r  rM  r  r  r  rZ   r   r   r  r  @  sA    EPN#3J@A@  4$Er   r  c                   `    e Zd Zed        Zd Zd Zej                  j                  d        Z
y)TestSimpleQueuec                     |j                          	 |j                  |j                                |j                  |j                                |j                          y # |j                          w xY wr   )r   r   r  rd  r  s       r   _test_emptyzTestSimpleQueue._test_empty  sQ    	&IIekkm$IIekkm$##%##%s   >A! !A3c                    t        j                         }t        j                         }t        j                         }t        j                  | j                  |||f      }d|_        |j                          | j                  |j                                |j                          |j                          | j                  |j                                | j                  |j                         d       | j                  |j                         d       | j                  |j                                |j                          y )Nr   TF)r   SimpleQueuer  r   r  r   r   r   r  rd  r   r   rk   r   r   )rp   r"   r  r  r  s        r   
test_emptyzTestSimpleQueue.test_empty  s    ++-)//1-335&&##*=>
 

&  "'d+e,&		r   c                 l    t        j                         }|j                          |j                          y r   )r   r  r    rp   r"   s     r   rq  zTestSimpleQueue.test_close  s"    ++-r   c                     t        j                         }|j                          | j                  |j                  j
                         | j                  |j                  j
                         y r   )r   r  r    r   _readerr#  _writerr  s     r   test_closedzTestSimpleQueue.test_closed  sE    ++-,,-,,-r   N)ru   rv   rw   r  r  r  rq  r=  r   cpython_onlyr  rZ   r   r   r  r    s<    & &0 
\\. .r   r  c                       e Zd Zd Zy)TestPoolNotLeakOnFailurec                    dg  G fdd      }| j                  t        d      5  t        j                  j	                  dt
        j                  j                  |            }|j                          |j                          d d d        | j                  t        d D                     y # 1 sw Y   +xY w)	Nr  c                   4    e Zd Z fdZfdZd Zd Zd Zy)RTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                 R    d| _         d | _        d | _        j                  |        y )NzFake Process)r+   r   r  rX  )rp   rR   forked_processess     r   r   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__  s&    *	 $!
 ''-r   c                 >    dk  rt        d      dz  d| _        y )Nr   Manually induced OSErrorr   r  )r  r  )rp   will_fail_ins    r   r   zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.start#  s(    1$!"<==!&
r   c                     d| _         y )Nstoppingr  r   s    r   r	  z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminate*  s	    '
r   c                 2    | j                   dk(  rd| _         y y )Nr  stoppedr  r   s    r   r   zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.join-  s    ::+!*DJ ,r   c                 B    | j                   dk(  xs | j                   dk(  S )Nr  r  r  r   s    r   r   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_alive1  s    zzY.J$**
2JJr   N)ru   rv   rw   r   r   r	  r   r   )r  r  s   r   FailingForkProcessr    s    .'(+Kr   r  r  r   )r   )contextc              3   <   K   | ]  }|j                           y wr   rs  )r  r%   s     r   r  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>:  s     Cw  "Crt  )rT  r  r   r  r  rF   r  	MagicMockr    r   r   r"  )rp   r  r   r  r  s      @@r   test_release_unused_processesz6TestPoolNotLeakOnFailure.test_release_unused_processes  s     	K 	K0 ##G-GH 	$$))!X]]5L5L* 6M 6,) -AGGIFFH		
 	C2BCC	E	 	s   A B44B=N)ru   rv   rw   r  rZ   r   r   r  r    s    $Er   r  c                      e Zd ZdZej
                  j                  Zd Zd Z	e
d        ZeZd Zd Ze
d        Zd Ze
d	        Zd$d
Ze
d        Zd$dZe
d        Zd%dZd Ze
d        Zd Ze
d        Zd Ze
d        Zd Ze
d        Zd&dZd Z e
d        Z!d Z"e
d        Z#d Z$e
d        Z%d Z&e
d        Z'd  Z(e
d!        Z)d" Z*y#)'TestSyncManagerTypesa}  Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

    In the following unit-tests the base type is created in the parent
    process, the @classmethod represents the worker process and the
    shared object is readable and editable between the two.

    # The child.
    @classmethod
    def _test_list(cls, obj):
        assert obj[0] == 5
        assert obj.append(6)

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c                 p    | j                         | _        | j                  j                          d | _        y r   )manager_classr   r   r  r   s    r   r  zTestSyncManagerTypes.setUpV  s)    ))+	r   c                    | j                   N| j                   j                         r4| j                   j                          | j                   j                          | j                  j                          d | _        d | _         y r   )r  r   r	  r   r   r  r   s    r   r  zTestSyncManagerTypes.tearDown[  sW    99 TYY%7%7%9II!IINN	r   c                 ,    t        j                          y r   )r   reap_childrenr+  s    r   r  zTestSyncManagerTypes.setUpClassc  s    r   c                    t        | j                         t        }t        j                         }t        j                  |d      D ]$  }t        t        j                               dk  s$ y  t        j                         |z
  }dt
        _
        t        j                  dt        j                          d|dd       y )	NFerrorr   T"multiprocessing.Manager still has  active children after .1f seconds)r&   r  WAIT_ACTIVE_CHILDREN_TIMEOUTr   r   r   rB  r   r   r  environment_alteredprint_warning)rp   r6   
start_timer  r  s        r   wait_proc_exitz#TestSyncManagerTypes.wait_proc_exiti  s     	TYY.^^%
''u= 	MA?2245:	M !J.B*.G'!!$F%4%D%D%F$G H;;=c((#L Mr   c                     t        j                  ||f      | _        d| j                  _        | j                  j	                          | j                          | j                  | j                  j                  d       y )Nr   Tr   )r   r   r  r   r   r  rk   r   )rp   workerr#  s      r   
run_workerzTestSyncManagerTypes.run_worker{  sX    #++6H					++Q/r   c                 f    |j                          |j                          |j                  d       y Nru  )r   r  r   r#  s     r   r  z TestSyncManagerTypes._test_event  s!     	
		r   c                     | j                   j                         }|j                          | j                  | j                  |       |j                  d       y r  )r   r  rd  r  r  r   rp   rB  s     r   r  zTestSyncManagerTypes.test_event  s<    LL 	((!,	ur   c                 $    |j                          y r   r[  r  s     r   
_test_lockzTestSyncManagerTypes._test_lock      r   c                      t        | j                  |             }| j                  | j                  |       |j	                          | j                  t        |j                         y r   )r  r   r  r  r\  rl   r4  rp   lnamerB  s      r   r`  zTestSyncManagerTypes.test_lock  sF    (GDLL%(*+			,		2r   c                 D    |j                          |j                          y r   r[  r\  r  s     r   _test_rlockz TestSyncManagerTypes._test_rlock      r   c                 r     t        | j                  |             }| j                  | j                  |       y r   )r  r   r  r   r  s      r   rc  zTestSyncManagerTypes.test_rlock  s+    (GDLL%(*((!,r   c                 $    |j                          y r   r  r  s     r   rl  z$TestSyncManagerTypes._test_semaphore  r  r   c                      t        | j                  |             }| j                  | j                  |       |j	                          y r   )r  r   r  rl  r\  )rp   snamerB  s      r   ro  z#TestSyncManagerTypes.test_semaphore  s4    (GDLL%(*,,a0			r   c                 (    | j                  d       y )Nrr  )r%  )ro  r   s    r   rs  z+TestSyncManagerTypes.test_bounded_semaphore  s    "45r   c                 D    |j                          |j                          y r   r  r  s     r   _test_conditionz$TestSyncManagerTypes._test_condition  r!  r   c                 p    | j                   j                         }| j                  | j                  |       y r   )r   r  r  r(  r  s     r   test_conditionz#TestSyncManagerTypes.test_condition  s(    LL""$,,a0r   c                 $    |j                          y r   )r  r  s     r   _test_barrierz"TestSyncManagerTypes._test_barrier  s     			r   c                 r    | j                   j                  d      }| j                  | j                  |       y r   )r   r  r  r,  r  s     r   r  z!TestSyncManagerTypes.test_barrier  s*    LL  #**A.r   c                 4    |5  	 d d d        y # 1 sw Y   y xY wr   rZ   r  s     r   
_test_poolzTestSyncManagerTypes._test_pool  s      		 	 	s   c                 t    | j                   j                  d      }| j                  | j                  |       y )Nra   r  )r   r  r  r/  r  s     r   	test_poolzTestSyncManagerTypes.test_pool  s+    LL*+r   c                      y r   rZ   r  s     r   _test_queuez TestSyncManagerTypes._test_queue  rY  r   c                      t        | j                  |      d      }|j                  d       |j                  d       | j                  | j                  |       y )Nr  r   r  )r  r   r   r  r3  )rp   qnamerB  s      r   
test_queuezTestSyncManagerTypes.test_queue  sC    (GDLL%(+	a	a((!,r   c                 &    | j                  d       y )Nr&  )r6  r   s    r   test_joinable_queuez(TestSyncManagerTypes.test_joinable_queue  s    (r   c                    t        j                         }|j                  |d   d       |j                  |j                  d      d       |j                  |j	                  d      d       |j                          |j                          |D ]  } |j                  t        |      d       |j                  |j                  d      d       y )Nr   r   r   )	rF   TestCaserk   r  r  r  reverser   r  )r   r#  caser?  s       r   
_test_listzTestSyncManagerTypes._test_list  s      "Q#1q)1q)
 	A	S1%Q'r   c                     | j                   j                         }|j                  d       | j                  | j                  |       | j                  |       | j                  t        |      d       y )Nr   r   )r   r   rX  r  r=  rh  rk   r   r  s     r   r  zTestSyncManagerTypes.test_list  sS    LL	+QQ#r   c                 N   t        j                         }|j                  t        |      d       |j                  |d   d       |j                  |j	                  d      d       |j                  t        |j                               dg       |j                  t        |j                               dg       |j                  t        |j                               dg       |j                  |j                         ddi       |j                  |j                         d       y )Nr   rS  r   )rS  r   )rF   r:  rk   r   r   assertListEqualr   r  r  rH  assertDictEqualr   assertTupleEqualpopitemr   r#  r<  s      r   
_test_dictzTestSyncManagerTypes._test_dict  s      "S1%UQ'+T#))+.=T#((*-w7T#**,/!5SXXZ%4ckkmZ8r   c                     | j                   j                         }d|d<   | j                  | j                  |       | j	                  |       | j                  t        |      d       y )Nr   rS  r   )r   r  r  rE  rh  rk   r   r  s     r   r  zTestSyncManagerTypes.test_dict   sQ    LL%+QQ#r   c                     t        j                         }|j                  |j                  d       |j                  |j	                         d       |j                  d       y )Nr   r  )rF   r:  rk   r   r   rd  rD  s      r   _test_valuez TestSyncManagerTypes._test_value  sE      "A&A&
r   c                     | j                   j                  dd      }| j                  | j                  |       | j	                  |j
                  d       | j	                  |j                         d       y )NrV  r   r  )r   r   r  rH  rk   r   r   r  s     r   rO  zTestSyncManagerTypes.test_value  sV    LLsA&((!,!$!$r   c                     t        j                         }|j                  |d   d       |j                  |d   d       |j                  t        |      d       |j	                  t        |      ddg       y )Nr   r   r  )rF   r:  rk   r   r@  r   rD  s      r   _test_arrayz TestSyncManagerTypes._test_array  sd      "Q#Q#S1%T#YA/r   c                 x    | j                   j                  dddg      }| j                  | j                  |       y )NrV  r   r   )r   rl  r  rK  r  s     r   ro  zTestSyncManagerTypes.test_array  s0    LLsQF+((!,r   c                     t        j                         }|j                  |j                  d       |j                  |j                  d       y r  )rF   r:  rk   r?  r@  rD  s      r   _test_namespacez$TestSyncManagerTypes._test_namespace   s8      """r   c                     | j                   j                         }d|_        d|_        | j	                  | j
                  |       y r  )r   r  r?  r@  r  rN  r  s     r   r  z#TestSyncManagerTypes.test_namespace&  s6    LL""$,,a0r   Nre  )rn  )r   )+ru   rv   rw   rx   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r`  r   rc  rl  ro  rs  r(  r*  r,  r  r/  r1  r3  r6  r8  r=  r  rE  r  rH  rO  rK  ro  rN  r  rZ   r   r   r  r  =  s   * $,,88M
     MM$0    3  -  
6  1  /  
,  ) 
( 
($ 	9 	9$  % 0 0- # #
1r   r  c                   (    e Zd Z ed      d        Zy)TestNamedResourcezspawn specific test.c                 h   t         j                  }| j                  t         j                  |       t	        |dd      5 }|j                  t        j                  d             d d d        t        j                  |      \  }}}| j                  ||j                  d             y # 1 sw Y   ExY w)Nr  r  r  aW                  import multiprocessing as mp
                ctx = mp.get_context('spawn')
                global_resource = ctx.Semaphore()
                def submain(): pass
                if __name__ == '__main__':
                    p = ctx.Process(target=submain)
                    p.start()
                    p.join()
            r  )r   r  rc  r  r  r,  textwrapdedentr   r  r   rA  )rp   r  r  rh  r  rq   s         r    test_global_named_resource_spawnz2TestNamedResource.test_global_named_resource_spawn.  s     !!	((&1&#0 
	AGGHOO 	% 	 	
	 %55f=C 	#**W"56
	 
	s   %B((B1N)ru   rv   rw   r[   rV  rZ   r   r   rQ  rQ  -  s     !787 97r   rQ  c                   .    e Zd Zd Z ed      d        Zy)MiscTestCasec                 ^    t        j                  | t        t        j                  ddg       y )NSUBDEBUGr  )extranot_exported)r   check__all__r   r  r   s    r   test__all__zMiscTestCase.test__all__H  s%    T?/:Q:Q+5|*D	Fr   r  c                     t        j                  dd      \  }}}| j                  |d       | j                  ||j	                  d             y )Nr  zif 1:
            import sys
            sys.executable = None
            assert "multiprocessing" not in sys.modules, "already imported!"
            import multiprocessing
            import multiprocessing.spawn  # This should not fail
r   r  rS  )r   r  rk   r   rA  )rp   rh  r  rq   s       r   ,test_spawn_sys_executable_none_allows_importz9MiscTestCase.test_spawn_sys_executable_none_allows_importM  sQ     %55F
C 	Q#**W"56r   N)ru   rv   rw   r^  r[   r`  rZ   r   r   rX  rX  G  s"    F
 !!<=7 >7r   rX  c                   ,    e Zd Zed        Zed        Zy)	BaseMixinc                     t         j                  j                  j                         t        j                  j                         f| _        y r   )r   r%   	_danglingr   r  danglingr+  s    r   r  zBaseMixin.setUpClasse  s5    '//99>>@!++0024r   c                    t         j                  j                          t        t        j
                  j                        t        | j                  d         z
  }|r-dt         j                  _        t        j                  d|        d }t        t        j                        t        | j                  d         z
  }|r-dt         j                  _        t        j                  d|        d }y )Nr   TDangling processes: r   Dangling threads: )r=  r   rN  rd  r   r%   rd  re  r  r  r  )r   r   r   s      r   r  zBaseMixin.tearDownClassj  s     	!//99:Sa=QQ	/3DLL,!!$8"DE	i))*Sa-AA/3DLL,!!$6wi"@Ar   N)ru   rv   rw   r  r  r  rZ   r   r   rb  rb  d  s(    4 4  r   rb  c                      e Zd ZdZej
                  Zej                  Z eej                        Z eej                        Z	 eej                        Z
 eej                        Z eej                        Z eej                        Z eej                        Z eej                        Z eej                         Z eej"                        Z eej$                        Z eej&                        Z eej(                        Z eej*                        Z eej,                        Z eej.                        Z eej0                        Z eej2                        Z eej4                        Zy)r  r   N)ru   rv   rw   r   r   r   r*  rM  r   r   r  r   r  r   r   r&  rZ  rb  rn  rr  r  r  r  r   rl  rL  rk  rZ   r   r   r  r  }  sN   D%%G ++J"?#B#BCO!/"@"@AN"?#B#BCO!/"@"@AN,,-D,,-D../E !>!>?M,,-D../E_667I#O$D$DE_667I../E?223G../E../EO445HO445Hr   r  c                       e Zd ZdZej
                  Z e ej                  d            Z	 e ej                  d            Z
 e ej                  d            Z e ej                  d            Z e ej                  d            Z e ej                  d            Z e ej                  d            Z e ej                  d	            Z e ej                  d
            Z e ej                  d            Z e ej                  d            Z e ej                  d            Z e ej                  d            Z e ej                  d            Zed        Ze fd       Ze fd       Z xZS )ManagerMixinr   zmanager.Queuezmanager.JoinableQueuezmanager.Lockzmanager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionzmanager.Eventzmanager.Barrierzmanager.Valuezmanager.Arrayzmanager.listzmanager.dictzmanager.Namespacec                 :     | j                   j                  |i |S r   )r   r  )r   rQ   r   s      r   r  zManagerMixin.Pool  s    s{{...r   c                 T    t         |           t        j                         | _        y r   )r  r  r   r  r   r  s    r   r  zManagerMixin.setUpClass  s    %--/r   c                    t         }t        j                         }t        j                  |d      D ]$  }t        t        j                               dk  s$ nR t        j                         |z
  }dt        _        t        j                  dt        j                          d|dd       t        j                          | j                  j                         d	k7  rWdt        j                  _        t        j                  d
       t        j                  | j                  j                                | j                  j!                          | j                  j#                          d | _        t$        | M          y )NFr  r   Tr  r  r  r	  r   z5Shared objects which still exist at manager shutdown:)r
  r   r   r   rB  r   r   r  r  r  rm  rn  r   _number_of_objectsr=  _debug_infor  r   r  r  )r   r6   r  r  r  r  s        r   r  zManagerMixin.tearDownClass  s,   
 /^^%
''u= 	MA?2245:	M !J.B*.G'!!$F%4%D%D%F$G H;;=c((#L M 	

;;))+q0 04DLL,!! #9 :!!#++"9"9";<r   )ru   rv   rw   r   r   r   r  operator
attrgetterr   r&  rZ  rb  rn  rr  r  r  r  r   rl  r   r  r  r  r  r  r  rP  rQ  s   @r   rk  rk    s   D%%G(X((9:E0X001HIJM'H''78D(X((9:E,,,-@ABI 3 3 34N OP,,,-@ABI(X((9:E*x**+<=>G(X((9:E(X((9:E'H''78D'H''78D,,,-@ABI/ / 0 0    r   rk  c                      e Zd ZdZej
                  j                  Zej
                  j                  Z eej
                  j                        Z	 eej
                  j                        Z
 eej
                  j                        Z eej
                  j                        Z eej
                  j                        Z eej
                  j                        Z eej
                  j                        Z eej
                  j                         Z eej
                  j"                        Z eej
                  j$                        Z eej
                  j&                        Z eej
                  j(                        Z eej
                  j*                        Z eej
                  j,                        Z eej
                  j.                        Zy)ThreadsMixinr   N)ru   rv   rw   r   r   dummyr   r*  rM  r   r  r  r   r   r&  rZ  rb  rn  rr  r  r  r  r   rl  rZ   r   r   rt  rt    st   D##++G &&11J"?#8#8#H#HIO"?#8#8#H#HIO--223D--223D..445E !6!6!D!DEM--223D..445E_22<<=I#O$9$9$J$JK_22<<=I..445E?00889G..445E..445Er   rt  c           	         | d   }t               }h d}|j                         D ]  \  }}t        |t              st	        |t
              r|t
        u r1|j                  D ]  }	|r|	|k7  r|rd|	j                         z   |dd  z   }
||	j                         dz      } G d d||t        j                        }|	dk(  r t        j                  d	      |      }|
x|_        |_        ||_        || |
<    t	        |t        j                        s|r G d
 d|t              }|x|_        |_        ||_        || |<    d d gd gfd}fd}|| d<   || d<   y )Nru   >   r   r   r   Withr   Mixinc                       e Zd Zy*install_tests_in_module_dict.<locals>.TempNr  rZ   r   r   Tempr{    s    r   r|  r   r  c                       e Zd Zyrz  r  rZ   r   r   r|  z*install_tests_in_module_dict.<locals>.Temp	  s    r   c                     t        j                  t               t         j                  j	                          t         j                  j
                  j                         d<   t        j
                  j                         d<   t        j                  d      d<   	 t        j                  d       t        j                  j                  d      r	 t        j                          } t%                t'        j(                          t        j*                         j-                  t.               y # t        $ r t        j                  dz         w xY w# t"        $ r t        j                  d      w xY w)	Nr   r   Trc   re   z start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)r   r  r  r%   _cleanuprd  r   r  rP   rj   rE   rF   rG   rz   r{   r  rb  r  rJ   r   get_temp_dirr  r  r  )r_  re  old_start_methodrS   s    r   setUpModulez1install_tests_in_module_dict.<locals>.setUpModule  s2   ..w7((*%--77<<>))..0->>$O	C,,\F
 <<""7+;&,,. 	 !""$--i8  	C##L$A%B C C	C  ;'' ): ; ;;s   D0 E 0"EE4c                  d   d} t         j                  j                          t        j                  d   d       t        t        j                  j                        t        d         z
  }|r/d} dt         j                  _        t        j                  d|        d }t        t        j                        t        d         z
  }|r/d} dt         j                  _        t        j                  d|        d }| rt        j                  d       t        j                  j                          y )	NFr   Tre   rg  r   rh  r  )r=  r   rN  r   rj   rd  r%   rd  r  r  r  r   r  r   _cleanup_tests)
need_sleepr   r   re  r  s      r   tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModule(  s    
 	!(()9!)<DI//99:S!=MM	J/3DLL,!!$8"DE	i))*S!-==J/3DLL,!!$6wi"@A JJsO++-r   r  r  )globalsr  r   r  r  r   r   
capitalizerF   r:  r   requires_hashdigestru   rw   rv   r<  )remote_globsrS   	only_typeexclude_typesrv   local_globs	ALL_TYPESr+   basetype_newnamerx  r|  r  r  re  r  s    `             @@r   install_tests_in_module_dictr    s   j)J)K3I!'') &
d$%dL)|#++ -)!3  5#3#3#55QR@#E$4$4$6$@A4(9(9 I%G>==hGMD4;; 1",(,W%- h//0tV 044DMD-(DO!%L;&> d|Hv9,.: #.L%3L!"r   SemLockzSemLock not availabler  z
Linux onlyc                       e Zd Zd Zy)SemLockTestsc                      G d dt         j                        }dt        j                          } |ddd|d      }t         j	                  |       y )Nc                       e Zd Zy)3SemLockTests.test_semlock_subclass.<locals>.SemLockNr  rZ   r   r   r  r  N  rP  r   r  ztest_semlock_subclass-r   r   r6  F)r   r  rB   r   
sem_unlink)rp   r  r+   r   s       r   test_semlock_subclassz"SemLockTests.test_semlock_subclassM  sG    	&.. 	'		}5Aq"dE*##D)r   N)ru   rv   rw   r  rZ   r   r   r  r  I  s    *r   r  r  rD  )rF   unittest.mockr"   r  rT  r   r  r   rz   rB   rm  r  rW   r8  rm  r\  r  r  r<  r  rq  r   r  rk  r%  test.supportr=  test.support.script_helperr   r   r   r   r   r   r	   r
   import_moduler   *skip_if_broken_multiprocessing_synchronizer  r  r   multiprocessing.dummymultiprocessing.heapmultiprocessing.managersrg  multiprocessing.queuesr   r   r   r   HAVE_SEND_HANDLEr$  ImportErrormultiprocessing.sharedctypesr   r   r  r   	HAS_SHMEMr  check_sanitizerrG   r   r#   r&   r+   r(   r-   r  r  rN  r   r  r  r  r  r  r
  r  HAVE_GETVALUEr{   r  r7   rC   r  r  ctypesr;   r<   r=   r>   r<  rJ   r[   r:  r]   r}   r   r   r   r   r   r  r  r  r   r  rW  rh  rv  r  r  r  r  r  r  r9  re  r|  r  r  r  r  r  rE   r  r  r  rU  rZ  r\  rm  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r&  r7  rB  r  rX  ru  r  r  r  rG  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4  r<  rP  r[  r`  ri  ry  r  ry   r  r  r  r  rQ  rX  rb  r  rk  rt  r  r7  r  rZ   r   r   <module>r     s	  
      	  
 	 	                !  ' & " & & ) ( /=../AB  2 2 2 4  !      @  )..M8-I
 74( (

F
GG* 77g05 OO	 	 #2 Hh#0 Hh (( " ,6? ? 
	 #
BJJ}%E
 =
>)==K2LX.. L@0F 0"6 6
*  K	8< K	8d /))  ,Q7l Q7n$@ @J
 03@\ 3@le\ eP	5W 5W@& &.
6F 6r x1< x1|C3 C3LM3 M3fY/l Y/~$$F $ %: $f! f!P&L &PB l B P I HV ,I ,	 	 
  56  * 	  56;  ? 	  53-  @4>\ 4>v 
/; /   kI  6KK K   { # 
. .b $##H-22, 22 .22p 9G/l G/R8L 8D., .`L Ld ]$JK###H-@| @ . L@Lb bP
9 
5) 5)p Y HI###H-{J {J . J{JBuL ux%h'' %V+)< +)J6\ 6DE)) E& $##H-5!! 5 .5< $##E*###H-5H-- 5 . +5N $##H-*x(( * .*< *'!2!2 '*mx   mf
B)) 
B 8!! 8H28$$ 2D'X&& '"1h// 1><:8$$ <:DAh'' AF}*h'' }*@ (=?\E(++ \E?\E~0.h'' 0.f&Ex00 &ER $##H-l18,, l1 .l1^7)) 7478$$ 7: 26Y 629 9 9 x69 62 @E\4~ W-y99;RS(,7*8$$ * 8 T*_@  M    I
  FFE  )I$((E(Hz)sf   '_ :
_" _0 _> #` :` __"_-,_-0_;:_;>`	`	``'&`'