
    daf:                    B   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jF                  d
      Z$ ejJ                          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.m/Z/ d dl(m0Z0 	 d dl(m1Z1 e1jd                  Z3	 d dl5m6Z6m7Z7 dZ8	 d dl(m9Z9 dZ:	 d dl;Z;ejx                  r e jz                  d      dZ>d Z?d Z@d ZAe	j                  dk(  r	d dl(mCZC d ZDe0j                  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. d/      Zd G d0 d1eb      Ze G d2 d3e(j                        Zg G d4 d5eb      Zhd6 Zid7 Zj G d8 d9eb      Zk G d: d;eb      Zl G d< d=eb      Zm G d> d?eb      Zn G d@ dAeb      Zo G dB dCe\      ZpdD Zq G dE dFe\      Zr G dG dHe\      Zs G dI dJeb      Zt G dK dLeb      Zu G dM dNeb      Zv G dO dPeb      ZwddQZxdR ZydS ZzdT Z{ G dU dVe\      Z| G dW dXe}      Z~dY Z G dZ d[eb      Zd\ Zd] Z G d^ d_eb      Z G d` daeb      Zd dbl+mZmZmZ  G dc dde\      Zde Z G df dge      Z G dh die      Zej                  djek       ej                  dledmn       ej                  doeep        G dq dreb      Z ej                         Zds Z G dt due      Zej                  dvek        G dw dxe      Zej                  dv       dyZ G dz 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                  e3d       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# e4$ r dZ3Y w xY w# e4$ r dZ8Y w xY w# e4$ r dZ:Y w xY w# e4$ r dZ;Y w xY w#  d!ZUY ^xY w# e4$ 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_memoryz?libasan has a pthread_create() dead lock related to thread+fork皙?c                 $    | j                  d      S )Nlatin)encode)ss    5/root/Python-3.12.4/Lib/test/_test_multiprocessing.pyr   r   [   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&   e   s       )r   posix)resource_trackerc                 4    t        j                  |   |        y r   )r(   _CLEANUP_FUNCS)namertypes     r   _resource_unlinkr-   n   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_handler6      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.r8   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_semaphoresrI      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_methodrE   rF   )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)rT   rU   rS   s   ` r   	decoratorz.only_run_in_spawn_testsuite.<locals>.decorator   s&    		#	. 
$	.
 #"r    )rS   rX   s   ` r   only_run_in_spawn_testsuiterZ      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!r0   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)NrM   z'only run in test_multiprocessing_spawn.ztesting this decoratorc                       yN   rY   rY   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forcer`   forkrN   )r   rO   rE   rF   rZ   	Exceptionfailset_start_methodassertEqualassertRaisesassertInstr	exception)selfra   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__rE   skipIfsysplatformrs   rY   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)ro   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   )ro   rP   kwdsts       r   __call__zTimingWrapper.__call__   sM    NN	0499d+d+>>+a/DL4>>+a/DLs   A A"Nrt   ru   rv   r   r   rY   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ro   abs      r   assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEqual  s    ""1a+ r   c                 P    	  || }| j                  ||      S # t        $ r Y y w xY wr   )rj   NotImplementedError)ro   valuer~   rP   ress        r   assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplemented  s9    	0+C ##E3// # 		s    	%%c                     t        d      )Nz#shouldn't try to pickle a test case)r   )ro   rP   s     r   
__reduce__zBaseTestCase.__reduce__  s    !"GHHr   N)rt   ru   rv   ALLOWED_TYPESr   r   r   __reduce_ex__rY   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_valuerC   _Semaphore__value_valuer   ro   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    t        |t              sJ |j                  d       y N   )r   r   put)ro   qcs      r   r   zDummyCallable.__call__*  s    !]+++	ar   N)rt   ru   rv   r   rY   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lenrj   identrA   getpidexitcode)ro   currentr   s      r   test_currentz_TestProcess.test_current3  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
                  t        j                        t        j                  t        j                        t        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   ry   
executablerA   fsencoder   FakePathset_executableProcessstartjoinrj   r   )ro   pathspathps       r   test_set_executablez _TestProcess.test_set_executableA  s    99	!MM5dii[ABNNKK's~~.r{{3>>:;	
  	,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   rm   r   )rP   	args_typetargetrP   T)listtuple	itertoolsproductsubTestr   r   
_test_argsr   r   getrj   r   r#   )	ro   
args_cases
args_types
test_casesrP   r   r   r   
child_argss	            r   test_args_argumentz_TestProcess.test_args_argumentQ  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_argsf  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   _testrj   r   r   r   assertFalse)ro   proc0proc1proc2s       r   test_daemon_argumentz!_TestProcess.test_daemon_argumentj  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   rP   r   r   s        r   r   z_TestProcess._testv  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   recvrj   r   r   rA   r   r+   )ro   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   r5   z(Could not communicate with child processalive	not alive)r   r   r   r   r   _test_create_grandchild_processr   pollr   LONG_TIMEOUTAssertionErrorr   rj   	terminater   )ro   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   rP   rQ   r+   Tr   Fr   )r   Eventr   r   r   r   r   rj   r   r   assertNotInactive_childrenr   typer   r   r   rl   r   r+   r   r   r#   )ro   r   erP   rQ   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)ro   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   r2   r@   r   alarmc                       t        dz        )Nzjoin took too long: %sRuntimeError)rP   r   s    r   handlerz+_TestProcess._kill_process.<locals>.handler  s    "#;a#?@@r   
   F)r   r   r   r   r+  r   r   rj   r   rl   r  r   r|   r   r   r   r   r  hasattrsignalSIGALRMr0  r  )ro   methr   r4  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                        }| j	                  |t
        j                          y r   )r;  r   r   r  rj   r7  SIGTERMro   r   s     r   test_terminatez_TestProcess.test_terminate3  s4    %%o&=&=&G&GHFNN?3r   c                    | j                  t        j                  j                        }t        j
                  dk7  r"| j                  |t        j                          y | j                  |t        j                          y Nnt)
r;  r   r   killrA   r+   rj   r7  SIGKILLr=  r>  s     r   	test_killz_TestProcess.test_kill7  sU    %%o&=&=&B&BC77d?X7X7r   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)ro   cpuss     r   test_cpu_countz_TestProcess.test_cpu_count>  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)rj   r  r  r   r   r   r  DELTAr  r   r   rl   r   ro   r   s     r   test_active_childrenz!_TestProcess.test_active_childrenF  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   rS  z_TestProcess._test_recursionS  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   rS  r   r  rM  r  appendr   rj   )ro   r   r   resultexpecteds        r   test_recursionz_TestProcess.test_recursion^  s    yyy.uUB'

5jjlMM%**,' jjl cAAcAA 	*r   c                 &    |j                  d       y )Ng      $@r3   r   events     r   _test_sentinelz_TestProcess._test_sentinelr  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   r2   r  r   )r   r   r   r  r   r^  rk   rD   sentinelr   
addCleanupr   r   rH  r   r6   setr   )ro   r]  r   r`  s       r   test_sentinelz_TestProcess.test_sentinelv  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   ry   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   rQ   TFr   )r   r   r   r   r   rg  r   r   rj   r   rk   rD   r    r   r   r   r  weakrefrefgccollectassertIsr#   )ro   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   rM   r   r(  ){Gz?r   r   r   MbP?rB  darwin)r   r   r   r   rO   rR  r   r.  r   r&   rj   r   r+  r   r  r  rA   r+   r7  r=  ry   rz   rW  rD  rl   )ro   smNrU  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   ri  rj  r   r   r   r   rk  rl  rm  rj   r   r#   )ro   r   rn  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   )ro   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   rf   r   r   r   )r   r   r   r   rO   r  r   rR  r   r  r   r   rj   r   rb  r   r#   )	ro   ru  rv  r~  r   rU  rw  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  rb  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   )ro   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)ro   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 ]I  \  }}|dk(  r%t        j                         }|j                          n	|dk(  sJ d }t	        t
        |d        K |j                          y )Nr    remove)itemsioStringIOr    setattrry   rb  )ro   r~  break_std_streamsstream_nameactionstreams         r   _test_error_on_stdio_flushz'_TestProcess._test_error_on_stdio_flush  se    #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    getattrry   r  r  r   r  r   r   r   r  rj   r   )ro   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    r  r   r   )r  ry   r  r   r  r   r   r   r  rj   r   r  )ro   r  r  r  r~  r  s         r   test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_29  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  )ro   r~  r-  s      r   _sleep_and_set_eventz!_TestProcess._sleep_and_set_eventJ  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   g       @)r      )r   r   r   r   rO   multiprocessing.forkserverr  ensure_runningr  r   r  r   _forkserver_pidrA   rC  r   r  r   r   r  rj   r   rl   )
ro   signumru  r  r-  r~  r  r   evt2r   s
             r   check_forkserver_deathz#_TestProcess.check_forkserver_deathO  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  r7  SIGINTr   s    r   test_forkserver_sigintz#_TestProcess.test_forkserver_sigintu  s    ##FMM2r   c                 j    t         j                  dk7  r | j                  t        j                         y y rA  )rA   r+   r  r7  rD  r   s    r   test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkilly  s$    77d?''7 r   )r   N)r2   )3rt   ru   rv   r   r   r   r   requires_resourcer   classmethodr   r   r   r   r   r
  r  r  r  rE   
skipUnlessr  _HAVE_THREAD_NATIVE_IDr$  r   r+  r.  r;  r?  rE  rJ  rO  rS  rZ  r^  rc  rg  ro  ry  r{  r  r  r  r  r  r  r  r  r  r  r  rY   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4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ro   r   s     r   runz_UpperCaser.run  s\     doo**D1 	,AOO  +	,r   c                     t        |      t        u sJ | j                  j                  |       | j                  j	                         S r   )r  rm   r  r   r   r  s     r   submitz_UpperCaser.submit  s;    Aw#~~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)rt   ru   rv   r   r  r  r  rY   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   rj   r  r  r   )ro   
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   TESTFNra  unlinkr   _test_stderr_flushr   r   openreadrl   )ro   testfnr  frp   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   )rA   r  O_WRONLYO_CREATO_EXCLry   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  )rA   r  r  r  r  ry   r  re  )r   rS   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   )rY   r   rP   )r   r   r   r   r  ra  r  r   r  r   r   r&   rj   r   r  r  rstriprm   rA   r   ry   re  )	ro   r  rS   r   r  contentcasesrP   rY  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)
rt   ru   rv   r   r  r  r  r  r  r  rY   r   r   r  r    s>    "M/"    
&7r   r  c                 `    t        | d      r| j                         S | j                         dk(  S )Nemptyr   )r6  r  qsize)r   s    r   queue_emptyr    s(    q'wwywwyA~r   c                 `    t        | d      r| j                         S | j                         |k(  S )Nfull)r6  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   rR  r   rb  )r   r"   child_can_startparent_can_continuerU  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  r`   r      r   r  )r   r  r   r  r   r   rj   r  r  r   
put_nowaitr   r  rM  r|   rk   pyqueueFullr   r   TIMEOUT1TIMEOUT2TIMEOUT3rb  r   r   r#   )ro   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  r`   r   )r   r   rb  r   r"   r  r  s       r   	_test_getz_TestQueue._test_getB  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  r`   r   r   )r   r  r   r  r   r   rj   r  rb  r   r   r  rM  r   
get_nowaitr|   rk   r  Emptyr   r   r
  r  r  r   r#   )ro   r"   r  r  r  r   r  s          r   test_getz_TestQueue.test_getL  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 )Nr5  r  )rR  r   )r   r"   rU  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 )Nr5  r   Tr  F)r   rR  r   r   r  rM  r   r  r   r   rj   r   rk   r  r  r   r#   )ro   r"   rU  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   rj   r  r   r   r   r   r#   ro   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  rM  	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 )Nr`   r   Tr5  )	JoinableQueuerR  r   r   r   r   r   r   r#   )ro   r"   rU  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   DirsOnSysPathrA   getcwd
__import__r  r  rh   )ro   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 )NT皙?r   )
r   r   r   r   rk   r  r  r   assertGreaterEqualr#   )ro   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   )rC   r   s    r   r   zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__  s    $$r   Nrt   ru   rv   r   rY   r   r   NotSerializabler5    s    %r   r8  Tr  r   r  )r   r   r   objecttestr   captured_stderrr   r   r   r   r  r#   rj   r  r   r  )ro   r8  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)rB  rC   r   s    r   r   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__  s    )-&$$r   N)rt   ru   rv   rw   r   r   rY   r   r   r8  r?    s    ,>%r   r8  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 rE  )r   rC   rC  )r  r  r8  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)rt   ru   rv   rw   staticmethodrI  )r8  s   r   	SafeQueuerG  !  s    C@ @r   rK  )rr   Tr  )r   r   r   r9  r   r   r   r:  r   r;  get_contextr   r   r   r  rB  rC  )ro   rK  not_serializable_objr   r8  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    assertRaisesRegexrD   r   r   r  s     r   $test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptions7  s     &&(/*G*G*II 	AGGI''
K@ e''
K@  		  s   BB*B'	*B3	N)rt   ru   rv   r  r  r  r  r  r  r  r  r   r$  r-  r2  r<  rN  rR  rY   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)Lockrj   acquirereleaserk   rD   r  ThreadErrorro   locks     r   	test_lockz_TestLock.test_lockD  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 rE  )RLockrj   rX  rY  rk   r  r3  r[  s     r   
test_rlockz_TestLock.test_rlockK  s    zz|......><8$,,Gr   c                 P    | j                         5  	 d d d        y # 1 sw Y   y xY wr   rW  r   s    r   test_lock_contextz_TestLock.test_lock_contextU  s#    YY[ 		 	 	s   %N)rt   ru   rv   r]  r`  rc  rY   r   r   rT  rT  B  s    MHr   rT  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   rj   rX  rY  ro   sems     r   _test_semaphorez_TestSemaphore._test_semaphore\  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  r`   )	Semaphoreri  rj   rY  r   r   rg  s     r   test_semaphorez_TestSemaphore.test_semaphorei  sn    nnQS!-''9c:-''9c:r   c                 H    | j                  d      }| j                  |       y Nr  )BoundedSemaphoreri  rg  s     r   test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphoreq  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   Fr2   Tr  )r   r   r   rk  r|   rX  rj   r   r   r
  r  r  )ro   rh  rX  s      r   r2  z_TestSemaphore.test_timeouty  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)rt   ru   rv   ri  rl  rp  r2  rY   r   r   re  re  Z  s    ;;"@r   re  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   )rX  rY  r   )r   condsleepingwokenr5   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Nr5  )rR  r   r   r  rM  r   )ro   r~   r   rU  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_countrj   _wait_semaphorer   )ro   ru  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  )	Conditionrk  r   r  r   r   ra  r   r  r  rX  r   r  rM  r   r   notifyrY  r  )ro   ru  rv  rw  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   rw  s   r   <lambda>z0_TestCondition.test_notify_all.<locals>.<lambda>      Yu-= r   )r  rk  rR  r   r  r
  r   r   ra  r   r  r  rX  r   r   r  r   r  rM  
notify_allrY  rz  ro   ru  rv  rU  r   r   rw  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>:  r  r   r`   c                      t               S r   r  r  s   r   r  z._TestCondition.test_notify_n.<locals>.<lambda>A  r  r   )r  rk  rR  r   r  r   r   ra  r   r  r  rX  r   r  rM  r   r   r  rY  rz  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 rA  )	r  r|   r   rX  r
  rY  rj   r   r   )ro   ru  r   r   s       r   r2  z_TestCondition.test_timeoutM  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>[      EKKN r   r`   r   )r   r  wait_forry   re  )r   ru  r  rX  s     ` r   _test_waitfor_fz_TestCondition._test_waitfor_fV  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)
NrU  r@   r   Tc                  "     j                   dk(  S Nr   r  r  s   r   r  z-_TestCondition.test_waitfor.<locals>.<lambda>j  r  r   r   r`   rr  r   )r  r   r   r  r   r   r  r   rj   r   rR  r   r  r  r&   r   )ro   ru  r   rX  rU  r  s        @r   test_waitforz_TestCondition.test_waitfor_  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|t        z
  |k  r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>}  r  r   r  T)rY  r   r   r  	CLOCK_RESr   )r   ru  r  successrh  rY  dtrX  s     `     r   _test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_fw  so     	%H!B]]#:H]MF!B&Bx)3: $	% 	% 	%s   AA66A?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)
NrU  r   Fr   Tr  r  rr  r   )r  r   rk  r   r  r   r   r   rX  r   r  rR  r   r  r   r  r&   )ro   ru  r  r  rh  r   rU  s          r   test_waitfor_timeoutz#_TestCondition.test_waitfor_timeout  s     ~~

3"**S%(nnQLL < <#UGS9  ;		G,@,@AB q 	AJJu 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  rA   rC  r7  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)Nr0   r   r   r   <   )r   ProcessesMixinry   rz   rA   r   r  r   r   r   r  r   r   rk   KeyboardInterruptr   )ro   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   )rt   ru   rv   r  r  rz  r  r  r  r  r2  r  rE   r  HAS_SHAREDCTYPESr  r  r  r  r  rY   r   r   rs  rs    s     	5	+Z<#|0#d=   X)+?@( A(. % % X)+?@' A'. ( (r   rs  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  rb  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 )NFr2   Tr   )r  r|   r   rj   r  r   r   r
  rb  r  r   r  r   r   r   )ro   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reprrb  r  )ro   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)rt   ru   rv   r  r  r  r  rY   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 )NrU  r   )r   heapBufferWrapperstructcalcsizerW  __setstate__
_lengthbuf)ro   wrapperr\  s      r   r   z_DummyList.__init__  sO    !&&44V__S5IJ##%7D/*r   c                 ~    |\  | _         | _        | j                   j                         j                  d      | _        y )NrU  )_wrapper_lockcreate_memoryviewcastr  )ro   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  )ro   _s     r   rW  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)rt   ru   rv   r   r  r  rW  r  rY   r   r   r  r    s    F+$&r   r  c                  .    t        j                  d       y )Nrr  r)  rY   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  rP   r  	DummyListstartedfinishedr  	_can_exitrb  rR  r   taskr   r   rW  ri  r  
_finalizer)
ro   	namespacer  rP   r  wait_before_exitr   rU  r   r  s
             r   r   zBunch.__init__  s     	 **,!++-"*NN q 	A!!!3AAHGGINN1			 "**47Cr   c                    t        j                         }| j                  j                  |       	  | j                  | j
                    | j                  j                  |       | j                  j                  d       | j                  j                         sJ y # | j                  j                  |       | j                  j                  d       | j                  j                         sJ w xY w)N   )
rA   r   r  rW  r  rP   r  r  r   r  ro   r   s     r   r  z
Bunch.task3  s    iikC 	+DFFDIIMM  %NN#>>((*** MM  %NN#>>((***s   B AC1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_started=  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_finishedA  s3    $-- 466)G $-- 466)r   c                 8    | j                   j                          y r   )r  rb  r   s    r   	do_finishzBunch.do_finishE  s    r   c                 $    | j                          y r   )r  r   s    r   r    zBunch.closeH  s    r   Nr  )
rt   ru   rv   rw   r   r  r  r  r  r    rY   r   r   r  r    s&    D8+r   r  c                       e Zd Zd Zd Zy)
AppendTruec                     || _         y r   )r  )ro   r  s     r   r   zAppendTrue.__init__M  s	    r   c                 :    | j                   j                  d       y rE  )r  rW  r   s    r   r   zAppendTrue.__call__O  s    r   Nr   rY   r   r   r  r  L  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  )Barrierrv  defaultTimeoutbarrierr   s    r   setUpz_TestBarrier.setUpZ  s     ||DFFD4G4G|Hr   c                 F    | j                   j                          d | _         y r   )r  abortr   s    r   tearDownz_TestBarrier.tearDown]  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.DummyLista  s:    99	!IYY)#<<$$&&<r   c                     t        | ||| j                  dz
        }	  ||  |j                          |j                          y # |j                          w xY wr   )r  rv  r  r    )ro   r  rP   r   s       r   run_threadsz_TestBarrier.run_threadsi  sE    $4*	tH!GGIAGGIs   A Ac                    |j                   }|| j                  k(  sJ t        |      D ]y  }|d   j                  d       t	        |d         ||z  k(  sJ |j                          |d   j                  d       t	        |d         |dz   |z  k(  sJ |j                          { 	 |j                  dk(  sJ 	 |j                  rJ y # t        $ r Y w xY w)Nr   Tr   )	partiesrv  rR  rW  r   r   	n_waitingr   broken)r   r  resultsr  mrU  s         r   	multipassz_TestBarrier.multipassq  s    OOCEEzzq 	AAJd#wqz?a!e+++LLNAJd#wqz?q1uk111LLN		$$))) >>!!> # 		s   &C 	CCc                     | j                         | j                         g}| j                  | j                  | j                  ||f       y)z;
        Test that a barrier is passed in lockstep
        N)r  r  r  r  )ro   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
        r5  )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  rR  rv  r   rj   countr#   )ro   r"   rU  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   r3  )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  rv  r  r  r  rj   r   )ro   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   rv  r3  rW  r  BrokenBarrierErrorr  )r   r  results1results2rU  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  rj   r   rv  r   r  )ro   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   rs  T)	r   rv  r  r   r  resetrW  r  r  )r   r  r  r  results3rU  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  rj   r   rv  )ro   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   rv  r3  rW  r  r  r  r  )r   r  barrier2r  r  r  rU  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  rv  r  r!  r  rj   r   )ro   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   rv  r   r  r  r  rW  r   r  r   rU  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  rj   r   r  )ro   r   s     r   r2  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  rv  r   r  r  r  rW  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  rv  r  r  r*  rj   r   r  )ro   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   )ro   r   s     r   test_single_threadz_TestBarrier.test_single_thread1  s!    LLO		r   c                     t        |      D ].  }|j                          |5  |j                  |       d d d        0 y # 1 sw Y   ;xY wr   )rR  r   r   )r   r  r  connr\  rU  s         r   _test_thousand_fz_TestBarrier._test_thousand_f6  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   rW  r   rR  rv  r   r1  r  r   ra  r   rj   r   )ro   r  r\  r0  r  jr   rU  s           r   test_thousandz_TestBarrier.test_thousand=  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   )rt   ru   rv   rw   rv  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r!  r#  r'  r2  r*  r,  r.  r1  r5  rY   r   r   r  r  S  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  )rU  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.setUp]      MMAB  r   c                 T    t        || j                        D ]  \  }}|d   |_         y rn  )zipcodes_valuesr   )r   valuessvcvs       r   r   z_TestValue._testa  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  )rE  RawValuer   rD  rj   r   r   r   r   r   r   )	ro   rawcoder   r  rF  rG  rH  r  s	            r   
test_valuez_TestValue.test_valueg  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)rK  )rM  r   s    r   test_rawvaluez_TestValue.test_rawvaluez  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 )NrU  r   r\  Fget_lockget_objnavalue)
r   rS  rT  rW  rj   r   r6  rk   rC   rJ  )ro   val1lock1obj1val2lock2obj2r\  val3lock3obj3arr4arr5s                r   test_getobj_getlockz_TestValue.test_getobj_getlock}  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  )rt   ru   rv   r   r   rE  r  r  r   rM  rP  ra  rY   r   r   r7  r7  Q  sW    "M 		eCj%*%
LC  
.&"3r   r7  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   )rR  r   )r   seqrU  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?  rU  r  r  r  )r   r  r  r`   r`   r  r   T)RawArrayArrayrj   r   r   arrayr  r   r   r   r   )ro   rK  re  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 )Nr5  r  rU  r   )rR  rj  rj   r   r   )ro   sizer  rl  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 rO  )rm  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 )NrU  r5  rR  FrS  rT  notalock)rj  r   rR  rS  rT  rW  rj   r   r6  rk   rC   ri  )ro   arr1rW  rX  arr2rZ  r[  r\  arr3r]  r^  r_  r`  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  )rt   ru   rv   r   r  r  rE   rx   r;   rm  rp  rr  rx  rY   r   r   rc  rc    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   rc  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 )Nr5  r   r  )r  r  r`   )
r   r   r  r  r`   r   r   r  r  r`   r   )r   r   r  r  r`   r   r   r  r  r`   r   r   )
r   r   r  r  r`   r   r   r  r  	   r  r   )r   r   r  r  r`   r   r   r  r  r}  r  )r   rR  rj   extendrW  )ro   r   r   r8  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 )Nr5  r(  r   )r   rR  r  rj   next)ro   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   r@   )r   r   r  r   r  )r   rR  rj   popr   rW  )ro   _ir   innerrU  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.0rU  s     r   	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>0	  s     'ECF'Es   )
dictr   rR  r  rj   r   sortedkeysrF  r  )ro   r8  indicesrU  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   rR  r  r  rj   r  rk   r3  r  )ro   r8  r  rU  r  s        r   test_dict_iterz_TestContainers.test_dict_iter5	  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  r`   )ferretshamstersr5  r  )waterfeed)petssuppliesr  r  r   blanketsr  r  r     r   r  r   marmotsX   c   r@   r  )r  rj   r  r   r   r   )ro   r  r  r8  louters         r   test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nestedB	  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   rW  r   r   rj   r   r  r   s      r   test_nested_queuez!_TestContainers.test_nested_queuep	  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  _hiddenrj   rm   r   r6  )ro   r  s     r   test_namespacez_TestContainers.test_namespacez	  s    NN	!&&!%%*<=EQ!896*+GAu--.r   N)rt   ru   rv   r   r  r  r  r  r  r  r  r  rY   r   r   rz  rz    s2     MK>((L2,3\*	/r   rz  c                 f    |t        j                  |       | | z  S |j                  |       | | z  S r   )r   r  r   )r=  r   r]  s      r   sqrr  	  s5    }

4 Q3J 	

4Q3Jr   c                     | |z  S r   rY   )r=  r>  s     r   mulr  	      Q3Jr   c                 H    t        j                  |        t        ddz        )Nr=  i   )r   r  rD   r3   s    r   raise_large_valuerrorr  	  s    JJt
S7]
##r   c                     | S r   rY   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_instancesr9  __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)rt   ru   rv   r  r  r  rY   r   r   r  r  	  s    K#$r   r  c                       e Zd Zy)SayWhenErrorNrt   ru   rv   rY   r   r   r  r  	  s    r   r  c              #   t   K   |dk(  rt        d      t        |       D ]  }||k(  rt        d      |  y w)Nr@   zSomebody said when)r  rR  )totalwhenrU  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   rY   r=  r  r  )r  applyrj   r  )ro   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 )Nr5  r(  r  	chunksize)r  maprj   r  r   rR  )ro   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 )Nr5  r}  r@   r(  r  r  r  )r  starmapr   rD  rR  rj   r  r   )ro   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  r@   )
r   rD  rR  rj   r  starmap_asyncr  r   r   r  )ro   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 ry  )rj   r  	map_asyncr  r   rR  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  rH  rW  r   rj   r   r   rD   )ro   	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 pickler2  r   s    r   r   z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__	  s    "?33r   Nr7  rY   r   r   Ar  	  s    4r   r  r5  )	r   r   r   r9  rk   r3  r  r  r  )ro   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   TimeoutErrorrh   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   r@   r5  r  c                       e Zd Zd Zd Zd Zy)E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                     | S r   rY   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   rY   r   s    r   r  zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__

  s    r   N)rt   ru   rv   r   r  r  rY   r   r   SpecialIterabler  
  s    #r   r  )	r   r   r   rk   r  r  r  r  r  )ro   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   rj   r   r   )ro   r   r   s      r   
test_asyncz_TestPool.test_async
  sP    ii##C!X8CGG$#$$S[[(;r   c                 V   | j                  d      }	 | j                  dk(  rt        j                         nd }|j	                  t
        dt        t        j                  z   |f      }t        |j                        }| j                  t        j                  |t               | j                  |j                  t               ||j!                          |j#                          |j%                          y # |j!                          |j#                          |j%                          w xY w)Nr  r   r   r  )r  r   r  r  r  r  r  r   r  r|   r   rk   r   r  r   r   rb  r  r   )ro   r   r]  r   r   s        r   test_async_timeoutz_TestPool.test_async_timeout
  s    IIaL
	)-i)?IOO%TE--aG4I4I)I5%QRC(Co::CR((h? 		KKMFFH  		KKMFFHs   B.C4 44D(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 Nr5  r3  r(  r  )r  imapr  r   rR  rj   r  r  rk   StopIterationr  ro   r  rU  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   r@   r5  r  r  r  r  r   r`   )r   r   r   r  r  r  r  rk   r  r  rR  rj   r  r  s      r   #test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exception3
  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   rR  rj   r  r  )ro   r  s     r   test_imap_unorderedz_TestPool.test_imap_unorderedM
  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   r@   r5  r  r  r  r  )r   r   r   r  r  r  r  rk   r  r  r   r  rR  r  rl   r  )ro   r  expected_valuesrU  r   s        r   -test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exceptionT
  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   r@   r   r  )
r   RemoteErrorrD   rk   r  rj   r   _poolr    r   )ro   expected_errorr   s      r   test_make_poolz_TestPool.test_make_poolx
  s    )-i)?+) 	 	.$))R8.$))Q799	!		!A  CL1	 "
 	s   7%B> >"C c                 P   t         j                  }| j                  dk(  rd}| j                  d      }t	        d      D cg c]  }| }}|j                  t        j                  |d      }t        j                  d       |j                          |j                          y c c}w )Nr   r   r  i'  r  r/  )
r   r  r   r  rR  r  r   r  r  r   )ro   
sleep_timer   rU  rP   rX  s         r   r?  z_TestPool.test_terminate
  s~    ))
99	! JIIaL$)&M2q
22TZZ;

3			 3s    	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  rj   r  r  r   r  r  r  r   r    r   rN  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   r5  r  )r   r   rR  r  r  r  rj   r   r   rk   rD   )ro   LrU  rY  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  r2  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 commentr@   zexpected SayWhenError)r   r  r  r(  rh   rg   r   rm  r  r3  rj   rP   	__cause__r   r  RemoteTracebackrl   tbr:  r   r;  ry   
excepthookexc_infogetvaluer  r  r  r  )ro   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      )NrP  r2  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  rk   r3  r  r5  r   rN  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   rk   rD   r  r  r  r  r    r   assertGreater)ro   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 )Nr5  c              3   *   K   | ]  } |         y wr   rY   )r  rn  s     r   r  z3_TestPool.test_release_task_refs.<locals>.<genexpr>  s     1bRT1s   r   )rR  r  ri  rj  r  r  r  rk  rl  r   r  rM  rj   rb  r  )ro   rU  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  rk   rD   r   ro   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   rC  r   z%unclosed running multiprocessing pool)r   r   r  r  r   r   r  RUN_stater
   check_warningsResourceWarningr   
gc_collectrD  s     r   test_resource_warningz_TestPool.test_resource_warning  s    99	!MM:;yy|		 &**..++8/JL 	!D 	! 	! 	!s   B,,B5)"rt   ru   rv   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r?  r"  r&  r(  r3  r5  r7  r;  rA  rE  rL  __classcell__r  s   @r   r  r  	  s         =
;??
:8)L54<654H".H"
?    $L " "<(7 !r   r  c                      t        d      )Nkey)KeyErrorrY   r   r   raisingrR  &  s    
5/r   c                      d S )Nc                       y)N*   rY   rY   r   r   r  z%unpickleable_result.<locals>.<lambda>*  s    r   rY   rY   r   r   unpickleable_resultrV  )  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  rY   r0  
scratchpads    r   errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback3  s    JqMr   r  r   )r   r  r  rR  rk   rQ  r   r   r   r    r   )ro   r   r]  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  rY   r[  s    r   r]  z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackF  s     #
1r   r^  )multiprocessing.poolra  r   r  rR  r  rV  rk   r   r   r   assertIsNotNoner0  r   r    r   )ro   ra  r   	iterationr]  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)rt   ru   rv   r   r_  rg  rY   r   r   rX  rX  ,  s    #Mr   rX  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  r5  maxtasksperchildr(  2   c              3   <   K   | ]  }|j                           y wr   r   )r  r  s     r   r  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>h  s     #BQAJJL#B   r   )r   r  rj   r   r  r   rR  rW  r  r  	enumerater   _repopulate_poolallr   r  rM  r  r!  r  r    r   )
ro   r   r  origworkerpidsr   rU  r4  r   	countdownfinalworkerpidss
             r   test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetimeW  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   rk  r   g333333?)r   r  rR  rW  r  r  r    r   rq  rj   r   )ro   r   r   rU  r4  r   s         r   %test_pool_worker_lifetime_early_closez=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closet  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   r@   r  12r  rk  )rk   rD   r   r  )ro   r   s     r   "test_pool_maxtasksperchild_invalidz:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalid  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_okrj   ro   cmdrf  outrp   s        r   >test_worker_finalization_via_atexit_handler_of_multiprocessingzV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessing  s=     ||11BB4MCQr   N)rt   ru   rv   r   rw  ry  r|  r  rY   r   r   ri  ri  T  s    #M:0@
 r   ri  )BaseManager	BaseProxyr  c                       e Zd Zd Zd Zd Zy)FooBarc                      y)Nf()rY   r   s    r   r  zFooBar.f  s    r   c                     t         r   )rD   r   s    r   gzFooBar.g  s    r   c                      y)N_h()rY   r   s    r   _hz	FooBar._h  s    r   N)rt   ru   rv   r  r  r  rY   r   r   r  r    s    r   r  c               #   :   K   t        d      D ]	  } | | z    y wry  )rR  )rU  s    r   bazr    s"     2Y c	s   c                       e Zd ZdZd Zd Zy)IteratorProxy)r  c                     | S r   rY   r   s    r   r   zIteratorProxy.__iter__  s    r   c                 $    | j                  d      S )Nr  )_callmethodr   s    r   r  zIteratorProxy.__next__  s    
++r   N)rt   ru   rv   	_exposed_r   r  rY   r   r   r  r    s    I,r   r  c                       e Zd Zy)	MyManagerNr  rY   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shutdownrl   _processr   r7  r=  ro   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  rl   r  r   r7  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  rj   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  r5  )r  r  r  r6  rj   r  rk   rD   r  r  r  r  r   rR  )	ro   r   rP  barr  r+   foo_methodsbar_methodsrU  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)rt   ru   rv   r   r  r  r  r  rY   r   r   r  r    s     M	GG7>r   r  c                      t         S r   )_queuerY   r   r   	get_queuer    s    Mr   c                       e Zd ZdZy)QueueManagerz$manager class used by server processNrt   ru   rv   rw   rY   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  rY   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addressr   
serializerr  )r  
SERIALIZERr  connectr  r   r   rF  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)rA   urandomr  r   HOSTr  r  r   ra  r  r   r  r  r   r  r  r  rj   r   rX  rk   rg   r   r   r  )ro   r   r   r   manager2r"   s         r   test_remotez_TestRemoteManager.test_remote  s    **R."''+W-/ 	(()LLGOOW3MLN		 OOW-/ 	""$dkk2 	)UYY

; r   )	rt   ru   rv   r   rF  rX  r  r  r  rY   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._putter7  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%  )rA   r  r  r   r  r  r  
get_serverr  listenerr    r   r   r  r   r  rj   r   r6  r  ra  OSErrorerrno
EADDRINUSEr   r  )ro   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)rt   ru   rv   r  r  r  rY   r   r   r  r  4  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   r0  msgs      r   _echoz_TestConnection._echos  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  r5  rU  r`   r   r   r  r  z(                                        zexpected BufferTooShort, got %sFr@   r   Xi   )(r   r   r  r   r   r   rk  r   rR  r   rj   r  filenorH  r   r   r  r  r   recv_bytes_intoitemsize	bytearrayrh   r   BufferTooShortrP   r|   r  r   r   r
  r   r  r  r    readablewritablerk   EOFErrorr   )ro   r0  r  r   re  r  longmsgrl  bufferrY  r   r  r  really_big_msgs                 r   test_connectionz_TestConnection.test_connectiony  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   rj   r   r   r   r  r  rk   r  r  )ro   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  rj   r  r  r   )ro   r0  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   r@   r`   )
r   r   r   r   r   r  rj   r  rk   rD   )ro   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rV  )rA   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   r8   )rR  r   rA   dup2r  r   recv_handlemsvcrtopen_osfhandler  r(  r    )r   r0  datacreate_dummy_fdsrU  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   ra  r   r  r  r  r  r  get_osfhandler   send_handler   r   rj   r  )ro   r0  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r0   *test semantics don't make sense on Windowsr8   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  r8   z2could not find an unassigned large file descriptorr  )r   r   r   r   r  r   r   ra  r   r  r  r  r  rR  MAXFDr   rh   rA   r  r   r  r   r    r   rj   r  )ro   r0  r  r   r  r  newfds          r   test_large_fd_transferz&_TestConnection.test_large_fd_transfer4  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    )rA   r(  r  ro   r0  s     r   _send_data_without_fdz%_TestConnection._send_data_without_fdU  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   rk   r3  r   r  r   ro   r0  r  r   s       r   test_missing_fd_transferz(_TestConnection.test_missing_fd_transferY  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   rj   r   r   r   closedr   rk   r  r   s      r   r&  z_TestConnection.test_contexth  s    yy{1 	+ 	+FF4LQVVXt,yyK'  *  *	+ 	+ 99#OOAHH%OOAHH%gqvv.gqvv.	 $	+ 	+ 	+ 	+s#   D3A7D'D3'D0	,D33D<Nr  )rt   ru   rv   r   r  r  r  r  r  r  r   r  rE   r  HAS_REDUCTIONr  rx   ry   rz   r  r6  rA   r  r  r  r&  rY   r   r   r  r  o  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                   h    e Zd 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Listenerra  r    rk   r  r  )ro   r&  r  s      r   test_multiple_bindz _TestListener.test_multiple_bind|  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   rj   r   r   rk   r  )ro   r  r   r8  s       r   r&  z_TestListener.test_context  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.c                 N    d } fd}d} j                   j                  |      5 }t        j                  ||j                  |f      }|j                          	 |j                         5 } j                  |j                         d       d d d        |j                          	 d d d         j                  dk(  r/ j                  t              5  j                          d d d        y y # 1 sw Y   axY w# |j                          w xY w# 1 sw Y   ixY w# 1 sw Y   y xY w)Nc                      t        d      )NzConnection took too long...r2  r  s    r   r4  z1_TestListener.test_empty_authkey.<locals>.handler  s    <==r   c                 b    j                   j                  | |      }|j                  d       y )Nr   r  )r'  r-  r   )r  r   clientro   s      r   r  z-_TestListener.test_empty_authkey.<locals>.run  s(    __++D'+BFKKr   r   r2  r   r  r   )r'  r)  r  r  r  r   r.  rj   r   r   r   rk   r  )ro   r4  r  rP  r  threadr8  s   `      r   test_empty_authkeyz _TestListener.test_empty_authkey  s    	>	 __%%c%2 	h%%S8H8H#7NOFLLN__& 5!$$QVVXt45 	 99#""7+ "!" " $5 5 	 	" "sG   4DC:-!C.C:DD.C7	3C::DDDD$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,  )ro   r  r3  r8  s       r   test_abstract_socketz"_TestListener.test_abstract_socket  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)rt   ru   rv   r   r*  r&  r5  rE   r  r   abstract_sockets_supportedr7  rY   r   r   r#  r#  x  sB    "M11"0 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'  r-  r   r    )r   r  r0  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   r.  rj   r   r   r    )ro   r&  r  r   r0  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  r.  rj   r   r    r   )ro   r  r   r0  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)  r-  r  r.  r  r   r  r    )ro   famr  r   r   s        r   test_issue16955z#_TestListenerClient.test_issue16955  s    ??++ 	C(((4A&&qyy1A
ALL"OOAFF1I&GGIGGIGGI	r   N)	rt   ru   rv   r   r  r   r=  r?  rC  rY   r   r   r:  r:    s(    ,M 
	 	r   r:  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   rj   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   r0  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)rA  r      a   br   s   byer   s   lopr      rr  )	r   r   rK  r   rR  r  r  rj   r   )ro   rJ  r   r   r   r   rU  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   rR  r   r   r  r  r    r   rl   r  )ro   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 )NrM  rN     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 )
Nr2   Fr   r   rM  r%  TrN  rV  )r   rj   r  r   rW  r   r  r   )ro   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)rt   ru   rv   r   rG  r  rK  rP  rR  rT  rW  rY  rY   r   r   rE  rE    sW    ,M)    
)  
r   rE  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   r]  r  r   r  )r   r]  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  r.  r    socketcreate_serverr   r  getsocknamer   )r   r0  r(  rB  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'  r-  r   r  r    r_  r  sendall)r   r0  r  r  r3  s        r   _remotez _TestPicklingConnections._remoteR  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   rc  r   r   r    rf  r   r   r   rj   r  r   rW  r   )ro   r(  lconnlconn0lpr   rconn0rprB  r  r  rb  bufr   s                 r   test_picklingz&_TestPicklingConnections.test_picklinga  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   r0  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   rq  foobarfoobarfoobar)
r   r   rr  r   r   r    r   rj   r   r   )ro   r0  r  r   r%  r  s         r   test_accessz$_TestPicklingConnections.test_access  s      99;jLL 1 1LF		yyy&1		!		=1		yyy&1		!			x		j1	r   N)rt   ru   rv   r   r  r  rc  rf  ro  rr  rv  rY   r   r   r[  r[  4  sb     #M; ;  $  ,\ 	 	r   r[  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ro   r  s    r   r  z_TestHeap.setUp  sH    ',,::@@3B3G3G3L3L3N**0r   c                 t    | j                   t        j                  j                  _        t
        |           y r   )r{  r   r  r  rz  r  r  r}  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  rm  r   r   r3  freeoccupiedc              3   4   K   | ]  }|j                     y wr   ro  )r  arenas     r   r  z&_TestHeap.test_heap.<locals>.<genexpr>  s      F Fs   r  )r   r  r  rz  _DISCARD_FREE_SPACE_LARGER_THANrR  rH  randomlognormvariaterW  r   	randranger  r   _len_to_seqrF  _arenasindex_allocated_blocksr  rj   sumsortro  shuffler  _n_frees
_n_mallocs_pending_free_blocks)ro   
iterations	maxblocksblocksr  rU  ro  r   rs  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 )Nr5  r  r   )rk  	isenabledenablera  disableget_thresholdset_thresholdrR  r   r  r  buddy)ro   
thresholdsrU  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   )	rt   ru   rv   r   r  r  r  r  rM  rN  s   @r   rx  rx    s    "MO>3@r   rx  c                   "    e Zd ZdefdefdefgZy)_Foor=  r>  zN)rt   ru   rv   r;   r<   r=   _fields_rY   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 r@  rA  r   s    r   r  z_TestSharedCTypes.setUp/  rB  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 rn  )r   r=  r>  rR  r   )r   r=  r>  r  rP  rl  stringrU  s           r   _doublez_TestSharedCTypes._double3  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 )NrU  r  rR  gUUUUUU?r;  r  r  r8  r5  r   r  r  r   T   gUUUUUU?r<  r         @
hellohello)r   r<   r=   r  rj  r   rR  r   r   r   r  r   r   r   rj   r   r=  r>  )
ro   r\  r=  r>  r  rP  rl  r  r   rU  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 )NTrR  )r  r   s    r   test_synchronizez"_TestSharedCTypes.test_synchronizeU  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  rj   r   )ro   rP  r  s      r   	test_copyz_TestSharedCTypes.test_copyX  sj    1c7#3i"suuc*(r   Nr  )
rt   ru   rv   r   r  r  r  r  r  r  rY   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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   rm   r   SharedMemoryrn  r   r    )shmem_name_or_objbinary_data	local_smss      r   !_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_writei  sC    '-%223DEI)I+6	's;'(r   c                 B    |t        t        j                               z   S r   )rm   rA   r   )ro   prefixs     r   _new_shm_namez_TestSharedMemory._new_shm_namer  s     BIIK(((r   c                     | j                  d      }t        j                  |dd      }| j                  |j                         | j                  t              5  t        j                  |dz   dd       d d d        t        j                  rM|j                  }	 |dz   |_        | j                  t              5  |j	                          d d d        ||_        y y # 1 sw Y   gxY w# 1 sw Y   xY w# ||_        w xY w)Ntest01_nullT   createro  z aF)	r  r   r  ra  r  rk   rD   
_USE_POSIX_name)ro   	name_tsmbsms	orig_names       r   *test_shared_memory_name_with_embedded_nullz<_TestSharedMemory.test_shared_memory_name_with_embedded_nullx  s    &&}5	((4cJ

#z* 	R&&y5'8SQ	R##		I&%-	&&z2 !JJL! &	 $	R 	R! ! &	s0   CC4 :C(C4 C%(C1-C4 4	C=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_tsmbTr  r  rU  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)rt   ru   rv   rA   r  O_RDWR_flagsrY   r   r   OptionalAttachSharedMemoryr    s    bii/r   r  test01_notthere)r  r   r  ra  r  rj   r+   r0  ro  r   rn  rl   rm   r    
assertLessrk   rD   rE   mockpatch_SHM_NAME_PREFIXside_effectr  r  FileNotFoundErrorFileExistsError)ro   r  r  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_basics  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   )rE   r  r  r   r  r  r  r  ra  r  rj   r  )ro   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)NTr@   r  r   r  )rk   rD   r   r  )ro   sms_invalids     r   #test_invalid_shared_memory_creationz5_TestSharedMemory.test_invalid_shared_memory_creation  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)rR  pickleHIGHEST_PROTOCOLr   r   r  ra  r  rn  dumpsloadsr   rj   r+   r   )ro   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  )rR  r  r  r   r   r  rn  r   r    r  rk   r  r  )ro   r  r  r  s       r   .test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_object4  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  ra  r  r   r  r+   r   r   r   rj   r   rn  r    )ro   r  r   s      r   #test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processesC  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ry  )r   managersSharedMemoryManagerr   ShareableListrR  rA   rC  r  r   r7  r  rk   r  r   r  )ro   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_trackerw  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   r5  r        r   r+   r0   howdy)r   r
  r  rk   rD   r  r   rR  r  r   shmr+   rj   r   r0  rn  r  ry   rz   r  )ro   smm1rU  lolr4  lomdoppleganger_list0doppleganger_shm0	held_name
absent_shmsmm2r  r  	absent_sls                 r   -test_shared_memory_SharedMemoryManager_basicsz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics  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(  NTrU  r  r  r   r  z8s8sdqxxxxxx?xxxxxxxx?qignore100r(  r  r  TrU  somer`   z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodésr   r$  u	   encodéess	   123456789s   adiostest03_duplicater  M   r@   ip  r  any)r   r  ra  r  r  rl   r+   rm   r   rk   
IndexError_get_packing_formatrj   r   r   warningscatch_warningssimplefilterrD   r  r   rQ  r  r  r!  r    )ro   r  current_formatname_duplicatesl_copysl_tetheredempty_sls          r   'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basics  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  r5  r  r@   r}  changedr`   newvaluer  i  )rR  r  r  r   r   r  ra  r  r  r   r  r   rj   assertIsNotr   r    )ro   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  r5  r  )rR  r  r  r   r   r  r   r  r    r  rk   r  r  )ro   r  r  r:  s       r   5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_object6  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Popenry   r   PIPEr  readlinestripdecoder  r   r   sleeping_retryr  r   r  r  rA   r+   r(   
unregisterr  r  rl   )ro   r  r   r+   err_msgr  r  rp   s           r   4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationD  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)rt   ru   rv   r   rJ  r  r  r  r  r  r  r  r  r  rE   rx   rA   r+   r  r  r"  r5  r>  r@  rM  rY   r   r   r  r  c  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.setUpy  s+    #77<<>  &&(r   c                     t        j                          | j                  t        j                         t        j                  j                  | j                         y r   )rk  rl  r   r   rQ  updaterR  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  rY   r   r   r  rW        r   r  )r   r  )r   )r   )d10r   )rP   exitpriority)d01r   )d02)d03)r  i)STOPi)
r9  r   Finalizer   rk  rl  _exit_functionr    rA   _exit)r   r0  r  r   r   close_br   rY  r[  r\  r]  s              r   _test_finalizez_TestFinalize._test_finalize  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   Tr^  )r   r   rY  r]  r\  r[  r  )	r   r   rc  r   r   r   r  r   rj   )ro   r0  r  r   r  rX  s         r   test_finalizez_TestFinalize.test_finalize  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   rY   rY   r   r   cbz,_TestFinalize.test_thread_safety.<locals>.cb      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(  )rZ  )rj  r   r_  r  randint)ro   rh  s    r   r   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__  s%    dBV^^As5KLr   N)rt   ru   rv   r   )rh  s   r   r  rk    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rI  )r   r  r  r   _run_finalizersrg   )r  r0  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)Nr5  r   )rR  r  getrandbitsrg   r  )r8  rU  r  r  r0  rp  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)r9  ry   getswitchintervalrk  r  setswitchintervalr  r  r  r	   start_threadsr   r  rl  )
ro   rq  rt  old_intervalold_thresholdr   r  rh  r0  rp  s
         @@@@r   test_thread_safetyz _TestFinalize.test_thread_safety  s&   		M& 	M 		
	 ,,.((*	!!$'Q1% ''~> ''?AG!//8 

3 	  !!,/m,JJL  !!,/m,JJLs%   A-D-  D!D- !D*&D- -=E*N)rt   ru   rv   r   r  r  r  rc  re  r   r  rz  rY   r   r   rO  rO  u  sM    "M)>
 % %N	N Wu%4 &4r   rO  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   )globrA   r   dirnamer   __file__r   escapesplitextsplitr  rW  )ro   r~  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 )	Nr0   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes__all__z does not have attribute )r  ry   rz   r  r!  r;   r+  r  r   r6  r  )ro   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)rt   ru   rv   r  r  rY   r   r   r|  r|    s    	r   r|  c                   2    e Zd ZdZd Zed        Z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)ro   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   r0  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   rj   r   r   r    NOTSETr  )	ro   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   c                 n   t        j                         }|j                  }	 |j                  t        j
                         t        j                         }t        j                  |      }d}|j                  t        j                  |             |j                  |       |j                  d       t	        j                  d       |j                  d       t        j                   j#                  t$              }|j'                         }| j)                  d| d|       | j)                  d| d|       | j)                  d| d	|       |j                  |       |j+                  |       |j-                          y # |j                  |       |j+                         |j-                          w xY w)
Nz*[%(levelname)s] [%(filename)s] %(message)sr  23z[INFO] [z] 1z] 2z	[DEBUG] [z] 3)r   r  r  r  r   DEBUGr  r  r  StreamHandlersetFormatter	Formatter
addHandlerr  r  rA   r   basenamer  r/  rl   removeHandlerr    )ro   r  original_levelr  r4  logging_formatfilename
log_records           r   test_filenamez_TestLogging.test_filenameI  sG    ++-	OODJJ'[[]F++F3GIN  !2!2>!BCg&KKIIcNLLww''1H*JMMHXJc2J?MMHXJc2J?MMIhZs3Z@OON+  )MMO OON+  )MMOs   D+F   4F4N)	rt   ru   rv   r   r  r  r  r  r  rY   r   r   r  r    s*    "M# . .)8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 rI  )r   r  rA   rC  r7  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   rY   )rP   
got_signals    r   recordz._TestPollEintr.test_poll_eintr.<locals>.record  s     JqMr   r   )r  r   )rA   r   r7  r  r   r  r   r   r  r   r   rj   r   )ro   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)rt   ru   rv   r   r  r  rE   r  r6  r7  r  rY   r   r   r  r  x  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r@   )r   r'  
Connectionr  rD   r  _handlerk   r  s     r   test_invalid_handlesz&TestInvalidHandle.test_invalid_handles  sy    ))44X>	 IIK  DL:w/)44??	E G$ 		
  DLs#   A. .B =B ?B  B 	BN)rt   ru   rv   rE   rx   WIN32r  rY   r   r   r  r    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 bogusrY   ro   ro  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytes  s    )r   c                      y r   rY   ro   r  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytes      r   N)rt   ru   rv   r  r  rY   r   r   _FakeConnectionr    s    *r   r     abc)r9  rk   r   r   r'  deliver_challengero   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__  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_bytes  s=    

a
::?*55@@@ZZ1_-r   c                      y r   rY   r  s     r   r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytes  r  r   N)rt   ru   rv   r   r  r  rY   r   r   r  r    s    r   r  r  )r9  rk   r   r   r'  answer_challenger  s     r   "test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failure  s=    	f 	 	/==)44EE)+V	5r   N)rt   ru   rv   r  r  rY   r   r   r  r    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   )ro   messages     r   create_responsez%ChallengeResponseTest.create_response  s$    ))::LL'
 	
r   c                 X    t         j                  j                  | j                  ||      S r   )r   r'  _verify_challenger   )ro   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}rh  r   )r   r   r  
startswithrh   r  )ro   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)rt   ru   rv   r   r  r  r  rY   r   r   r  r    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
  SyncManagerrk   	TypeErrorr   r  r  rj   r:  r  r   )ro   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  )
rk   r  r   r  r  r  r    r   rj   r:  rN  s     r   test_pool_initializerz&TestInitializers.test_pool_initializer  sa    )_%9%9qI  K$''<			q)r   N)rt   ru   rv   r  r  r  r  rY   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 rL  )r   r   r   r  r   r   r   )r"   subProcs     r   _test_processr    s>    !!#E%%->eXNGGNMMOLLNr   c                     | | z  S r   rY   r  s    r   _afuncr
  $  r  r   c                      t        j                  d      } | j                  t        g d      }| j	                          | j                          y )Nr`   r  )r   r  r  r`   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)ro   delegates     r   r   z_file_like.__init__.  s    !	r   c                 |    t        j                         }|| j                  k7  r|| _        g | _        | j                  S r   )rA   r   r  _cacher  s     r   cachez_file_like.cache2  s1    iik$))DIDK{{r   c                 :    | j                   j                  |       y r   )r  rW  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)rt   ru   rv   r   propertyr  r(  r  rY   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   )ro   r  s     r   test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_processD  s$    &&m<

		r   c                 x    t        j                  t              }|j                          |j	                          y r  )r   r   r  r   r   rN  s     r   test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_processI  s$    ##?;			r   c                     t        j                         }t        |      j                  d       t	        j
                  fd      }j                          |j                         dk(  sJ y )NrP  c                  $     j                         S r   )r  )flikes   r   r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>R  s    ekkm r   r   )r  r  r  r(  r   r   r  r/  )ro   sior  r#  s      @r   test_flushingz(TestStdinBadfiledescriptor.test_flushingN  sQ    kkm3E&&.CD||~&&&r   N)rt   ru   rv   r  r   r%  rY   r   r   r  r  B  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 )Nr5  r   )rR  r   r  r  r   rA   r   r    )r   r  slowrU  s       r   _child_test_waitzTestWait._child_test_waitY  sQ    r 	%A

6==?U2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   r3   r`   Fr   r   Tc              3   H   K   | ]  }D ]  }||j                   f   y wr   )r   )r  rU  r   rw  s      r   r  z%TestWait.test_wait.<locals>.<genexpr>|  s%     GGA1aee*G*Gs   "r5  )multiprocessing.connectionr   rR  r   r   r   r*  r   r   r    rW  ra  r   r   r  r  r  r  rj   )ro   r)  r   readersmessagesrU  r%  r  r   r  rY  rw  s              @r   	test_waitzTestWait.test_waita  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 )Nr5  r   %s
rh  )	r_  r  rR  r   r  r  re  r   r    )r   r  r)  r   rU  s        r   _child_test_wait_socketz TestWait._child_test_wait_socket  sl    MMO			'r 	4A

6==?U2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   r3   r`   r   Tr  r  c              3   &   K   | ]	  }d |z    yw)r2  NrY   r  s     r   r  z,TestWait.test_wait_socket.<locals>.<genexpr>  s     9!6A:9s   r5  rh  r   )r-  r   r_  r`  r   r  ra  rR  r   r   r3  r   r   rW  ra  r   r.  r    r   r  r   rF  rj   )ro   r)  r   r  r  r.  rw  dicrU  r   r%  r  r  rY  vs                  r   test_wait_socketzTestWait.test_wait_socket  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 rE  )r0  r   s    r   test_wait_slowzTestWait.test_wait_slow  s    tr   c                 &    | j                  d       y rE  )r8  r   s    r   test_wait_socket_slowzTestWait.test_wait_socket_slow  s    d#r   rp  c                 b   ddl m} d}t        j                         \  }}t	        j
                         } |||g|      }t	        j
                         |z
  }| j                  |g        | j                  ||t        z
         |j                  d         |||gd      }| j                  ||g       y )Nr   r3   r.   r  )
r-  r   r   r   r   r   rj   r9  r  r   )ro   r   r5   r   r   r   r   r1  s           r   test_wait_timeoutzTestWait.test_wait_timeout  s    3##%1 Aq67# 5(b!5'I"56	tAq62qc"r   c                 N    |j                          t        j                  |       y r   )rY  r   r  )r   rh  periods      r   signal_and_sleepzTestWait.signal_and_sleep  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   r3   r  c                     t        | d       S )Nc                     t        |       S r   )rT  r  s    r   r  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>  s
    BqE r   )rP  )r  )r  s    r   r  z,TestWait.test_wait_integer.<locals>.<lambda>  s    F1/: r   r   r  r  r  g?)r-  r   r   rk  r   r   rA  r   r   r`  rH  r   rX  r   r   rj   r  r9  r   r  r   )ro   r   rY  sorted_rh  r   r   r   r   r   r1  s              r   test_wait_integerzTestWait.test_wait_integer  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   r3   r@   r  r   )	r-  r   r   r   r   r   rj   r  r    )ro   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  )rt   ru   rv   r  r*  r0  r3  r8  r:  r<  r   r  r>  rA  rF  rH  rY   r   r   r'  r'  W  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rk   rD   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.piperL  r   s    r   test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32  s>    z* 	B&&//0@A	B 	B 	BrN  N)	rt   ru   rv   rE   rx   r  rM  r  rP  rY   r   r   rJ  rJ    sI    X__U01= 2= X BCB DBr   rJ  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   ry   flagsr   r0  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   rL  r   r   rV  r-  r.  DeprecationWarningr   r   r   r    r   ry   rT  printr   )	r   rR   rY  mpr%  r  r   grandchild_flagsrT  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()rB  z-Sz-Or~  rh  )
rY  r   rO   rD  check_outputry   r   r  rI  rj   )ro   rY  progr  child_flagsr]  s         r   
test_flagszTestFlags.test_flags(  sz    &&5&F&F&H%K1N 	 &&^^T4tT:<(,

4;;w3G(H%%&67r   N)rt   ru   rv   r  rV  r^  rd  rY   r   r   rR  rR    s-    $ $ ! !
8r   rR  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'  r-  )r   childr  r0  s       r   _test_timeoutzTestTimeouts._test_timeout9  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   ri  r  r   r    rj   r   r.  r&   )ro   old_timeoutparentrh  r  r   r0  s          r   r2  zTestTimeouts.test_timeoutB  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)rt   ru   rv   r  ri  r2  rY   r   r   rf  rf  8  s     2r   rf  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.pyrf   r   s   RuntimeErrors   123)r   rO   rA   r   r   r  r  r:  r   r   assert_python_failurerj   rl   r  r  )ro   ru  r+   rf  r  rp   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)rt   ru   rv   rt  rY   r   r   rq  rq  Z  s    
'r   rq  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   rh  r   r    r&   r   r   r   _afterfork_registry)r   r  r0  r   s       r   rh  zTestForkAwareThreadLock.childp  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   rx  r   rh  r   r    r   r&   assertLessEqual)ro   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)rt   ru   rv   r  rh  r]  rY   r   r   rv  rv  k  s    
  	1r   rv  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 )Nrm  )r  r_  detachrW  rA   dupr    )ro   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_  rk  SOCK_STREAMr    rA   )ro   r  s     r   r    zTestCloseFds.close  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_  fromfdrk  r  r    r   rg   )r   r0  r  r   r  s        r   _test_closefdszTestCloseFds._test_closefds  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   rf   i6'  )r!  rE   rF   r   r   r  r   r  r   r    r   r&   rO   rm  r   r  r   r  r  winerror)ro   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)rt   ru   rv   r  r    r  r  r  rY   r   r   r  r    s%    $  :r   r  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   rY   r  frames     r   r4  z-TestIgnoreEINTR._test_ignore.<locals>.handler  ri  r   ready   x)r7  r  r   r   r  CONN_MAX_SIZE)r   r0  r4  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    rj   r   r   r  rA   rC  r   r7  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   rY   r  s     r   r4  z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler  ri  r   welcome)r7  r  r   r'  r)  r   r  r.  )r   r0  r4  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  rA   rC  r   r7  r  r'  r-  rj   r   )ro   r0  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)rt   ru   rv   maxr   PIPE_MAX_SIZESOCK_MAX_SIZEr  r  r  rE   r  r6  r7  r  r  r  rY   r   r   r  r    s     --w/D/DEM2 2 X35GH I,   X35GH Ir   r  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   rO   rU  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   rj   rO   )ro   rr   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rf   rM   r  rM   )	r   rL  rD   rj   rO   rm  rk   ri   r  )ro   methodrr   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   rL  rD   rE   rF   rQ  r  set_forkserver_preload)ro   rr   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  Trd   r   )r   r  PRELOADrO   ri   rD   rj   rL  r   r  rt   lowerr  r   r  r0  )ro   r  
old_methodr  rr   s        r   test_set_getzTestStartMethod.test_set_get2  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 )Nr0   rM   rf   r  )rM   rf   r  )r   get_all_start_methodsry   rz   rj   r   )ro   methodss     r   test_get_allzTestStartMethod.test_get_allH  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   rO   r   rA   r   r   r  r  r:  r   r   r  rI  r  r[  rh   )ro   r+   rf  r  rp   s        r   test_preload_resourcesz&TestStartMethod.test_preload_resourcesR  s    ++-=MMFGww||BGGOOH5G||11BB4HCjjljjl::<43"9#J#JII@A $-r   r0   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)rM   r  rf   r   zA SemLock created in a fork)
r   rL  r   r   r#   rQ  r3  r   r  r   )ro   process_methodr"   process_ctxr   rL  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_queuet  s    		!r   c                     |j                  d       t        j                  | j                  |f      }|j	                          |j                          y rQ  )r   r   r   r  r   r   )r   r"   r%   s      r   _put_two_and_nest_oncez&TestStartMethod._put_two_and_nest_oncex  s9    		!!))1F1FeXVr   c                    t        j                         }t        j                  | j                  |f      }|j	                          |j                          g }|j                         s0|j                  |j                                |j                         s0| j                  t        |      t        ddg             y )Nr   r  r   )r   r   r   r  r   r   r  rW  r   assertSetEqualrb  )ro   r"   r%   r   s       r   test_nested_startmethodz'TestStartMethod.test_nested_startmethod  s      %%'!))1L1LTYS[\++-NN599;' ++-
 	CL#q!f+6r   N)rt   ru   rv   r  r  r  r&  r  r  r  r  rE   rx   ry   rz   rZ   r  r  r  r  rY   r   r   r  r    s    6 6?
$2*,H
B X__S\\W,AC !<= >C&    7r   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,   nooprB  r~  )r  r,   )pass_fdsr  r  T)r  rh  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   rA   piperD  rE  ry   r   r   rF  r    r  rG  r  rI  r-   r  r   r   rJ  r  r  rl   r  ENOENTEINVALr  r  r  )ro   r  r,   r%  r  r   r  name1name2rL  r  r  rp   rY  s                 r   test_resource_trackerz)TestResourceTracker.test_resource_tracker  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%  rM   T)r  alwaysr   zresource_tracker: process died)! multiprocessing.resource_trackerr  r  rA   rC  r7  rD  r   wait_processr-  r.  r/  r  r   r  r   rL  rk  rX  rY  ri  rj  rk  rl  r   rj   r   r   
issubclassrX  UserWarningrm   r  )
ro   r  
should_dier  r   rr   all_warnrh  rn  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 rA  )r  r7  r  r   s    r   test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigint  s    ))&--?r   c                 D    | j                  t        j                  d       y rA  )r  r7  r=  r   s    r   test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigterm  s    ))&..%@r   c                 D    | j                  t        j                  d       y rE  )r  r7  rD  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   )r0  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   )ro   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   rk   rD   r(   register)ro   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)rt   ru   rv   r  r  r  r  r  rJ  r  r  r  rY   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  rb  r  s       r   _test_emptyzTestSimpleQueue._test_empty4  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  rb  r   r   rj   r   r   )ro   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    ro   r"   s     r   ro  zTestSimpleQueue.test_closeV  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)rt   ru   rv   r  r  r  ro  r:  r   cpython_onlyr  rY   r   r   r  r  2  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  rW  )ro   rQ   forked_processess     r   r   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__n  s&    *	 $!
 ''-r   c                 >    dk  rt        d      dz  d| _        y )Nr   Manually induced OSErrorr   r  )r  r  )ro   will_fail_ins    r   r   zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startt  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_alive  s    zzY.J$**
2JJr   N)rt   ru   rv   r   r   r  r   r   )r  r  s   r   FailingForkProcessr  m  s    .'(+Kr   r  r  r   )r   )contextc              3   <   K   | ]  }|j                           y wr   ro  )r  r%   s     r   r  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>  s     Cw  "Crp  )rQ  r  r   r  r  rE   r  	MagicMockr    r   r   r*  )ro   r  r   r  r  s      @@r   test_release_unused_processesz6TestPoolNotLeakOnFailure.test_release_unused_processesg  s     	K 	K0 ##G-GH 	$$))!X]]5L5L* 6M 6,) -AGGIFFH		
 	C2BCC	E	 	s   A B44B=N)rt   ru   rv   r  rY   r   r   r   r   e  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.setUp  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.setUpClass  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   rJ  r   r   r  environment_alteredprint_warning)ro   r5   
start_timer  r  s        r   wait_proc_exitz#TestSyncManagerTypes.wait_proc_exit  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%  rj   r   )ro   workerr  s      r   
run_workerzTestSyncManagerTypes.run_worker  sX    #++6H					++Q/r   c                     |j                         sJ |j                          |j                          |j                  d       y Nrs  )r  r   r  r   r  s     r   r  z TestSyncManagerTypes._test_event  s-    zz||
		r   c                     | j                   j                         }|j                          | j                  | j                  |       |j                         rJ |j                  d       y r*  )r   r  rb  r(  r  r  r   ro   r?  s     r   r  zTestSyncManagerTypes.test_event  sJ    LL 	((!,88:~	ur   c                 $    |j                          y r   rX  r+  s     r   
_test_lockzTestSyncManagerTypes._test_lock      r   c                      t        | j                  |             }| j                  | j                  |       |j	                          | j                  t        |j                         y r   )r  r   r(  r0  rY  rk   r3  ro   lnamer?  s      r   r]  zTestSyncManagerTypes.test_lock  sF    (GDLL%(*+			,		2r   c                 D    |j                          |j                          y r   rX  rY  r+  s     r   _test_rlockz TestSyncManagerTypes._test_rlock      r   c                 r     t        | j                  |             }| j                  | j                  |       y r   )r  r   r(  r7  r3  s      r   r`  zTestSyncManagerTypes.test_rlock  s+    (GDLL%(*((!,r   c                 $    |j                          y r   r/  r+  s     r   ri  z$TestSyncManagerTypes._test_semaphore  r1  r   c                      t        | j                  |             }| j                  | j                  |       |j	                          y r   )r  r   r(  ri  rY  )ro   snamer?  s      r   rl  z#TestSyncManagerTypes.test_semaphore  s4    (GDLL%(*,,a0			r   c                 (    | j                  d       y )Nro  )r<  )rl  r   s    r   rp  z+TestSyncManagerTypes.test_bounded_semaphore  s    "45r   c                 D    |j                          |j                          y r   r6  r+  s     r   _test_conditionz$TestSyncManagerTypes._test_condition   r8  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                 F    |j                   dk(  sJ |j                          y r   )r  r  r+  s     r   _test_barrierz"TestSyncManagerTypes._test_barrier	  s    {{a		r   c                 r    | j                   j                  d      }| j                  | j                  |       y r   )r   r  r(  rC  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   rY   r+  s     r   
_test_poolzTestSyncManagerTypes._test_pool  s      		 	 	s   c                 t    | j                   j                  d      }| j                  | j                  |       y )Nr`   r  )r   r  r(  rF  r-  s     r   	test_poolzTestSyncManagerTypes.test_pool  s+    LL*+r   c                    |j                         dk(  sJ |j                         sJ |j                         rJ |j                         dk(  sJ |j                         rJ |j                         dk(  sJ |j                         sJ y Nr  r   r   )r  r  r  r   r+  s     r   _test_queuez TestSyncManagerTypes._test_queue  sr    yy{axxzz99;wwyA~~99;wwyA~~yy{{r   c                      t        | j                  |      d      }|j                  d       |j                  d       | j                  | j                  |       |j                         sJ |j                         rJ y rJ  )r  r   r   r(  rK  r  r  )ro   qnamer?  s      r   
test_queuezTestSyncManagerTypes.test_queue&  sa    (GDLL%(+	a	a((!,wwyy668|8r   c                 &    | j                  d       y )Nr"  )rN  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   )	rE   TestCaserj   r  r  r  reverser   r  )r   r  caser=  s       r   
_test_listzTestSyncManagerTypes._test_list1  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   rW  r(  rU  rd  rj   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   rP  r   )rP  r   )rE   rR  rj   r   r   assertListEqualr   r  r  rF  assertDictEqualr   assertTupleEqualpopitemr   r  rT  s      r   
_test_dictzTestSyncManagerTypes._test_dictE  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   rP  r   )r   r  r(  r]  rd  rj   r   r-  s     r   r  zTestSyncManagerTypes.test_dictQ  sQ    LL%+QQ#r   c                     t        j                         }|j                  |j                  d       |j                  |j	                         d       |j                  d       y )Nr   r  )rE   rR  rj   r   r   rb  r\  s      r   _test_valuez TestSyncManagerTypes._test_valueX  sE      "A&A&
r   c                     | j                   j                  dd      }| j                  | j                  |       | j	                  |j
                  d       | j	                  |j                         d       y )NrU  r   r  )r   r   r(  r`  rj   r   r   r-  s     r   rM  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  )rE   rR  rj   r   rX  r   r\  s      r   _test_arrayz TestSyncManagerTypes._test_arraye  sd      "Q#Q#S1%T#YA/r   c                 x    | j                   j                  dddg      }| j                  | j                  |       y )NrU  r   r   )r   rj  r(  rc  r-  s     r   rm  zTestSyncManagerTypes.test_arraym  s0    LLsQF+((!,r   c                     t        j                         }|j                  |j                  d       |j                  |j                  d       y r  )rE   rR  rj   r=  r>  r\  s      r   _test_namespacez$TestSyncManagerTypes._test_namespaceq  s8      """r   c                     | j                   j                         }d|_        d|_        | j	                  | j
                  |       y r  )r   r  r=  r>  r(  rf  r-  s     r   r  z#TestSyncManagerTypes.test_namespacew  s6    LL""$,,a0r   Nrb  )rk  )r   )+rt   ru   rv   rw   r   r
  r  r  r  r  r  r  r  r%  r(  r  r  r0  r]  r7  r`  ri  rl  rp  r?  rA  rC  r  rF  rH  rK  rN  rP  rU  r  r]  r  r`  rM  rc  rm  rf  r  rY   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  ra  r  r  r(  textwrapdedentr   r  r   rI  )ro   r  r  rf  r  rp   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)rt   ru   rv   rZ   rn  rY   r   r   ri  ri  ~  s     !787 97r   ri  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__  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  rk  )r   r  rj   r   rI  )ro   rf  r  rp   s       r   ,test_spawn_sys_executable_none_allows_importz9MiscTestCase.test_spawn_sys_executable_none_allows_import  sQ     %55F
C 	Q#**W"56r   N)rt   ru   rv   rv  rZ   rx  rY   r   r   rp  rp    s"    F
 !!<=7 >7r   rp  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.setUpClass  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   rK  rb  r   r%   r|  r}  r"  r#  r  )r   r   r   s      r   r  zBaseMixin.tearDownClass  s     	!//99:Sa=QQ	/3DLL,!!$8"DE	i))*Sa-AA/3DLL,!!$6wi"@Ar   N)rt   ru   rv   r  r  r  rY   r   r   rz  rz    s(    4 4  r   rz  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)rt   ru   rv   r   r   r   r'  rJ  r   r   r  r   r  r   r   r"  rW  r_  rk  ro  r  r  r  r   rj  rJ  ri  rY   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   rP   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   rJ  r   r   r  r"  r#  rk  rl  r   _number_of_objectsr:  _debug_infor  r   r  r  )r   r5   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   )rt   ru   rv   r   r   r   r  operator
attrgetterr   r"  rW  r_  rk  ro  r  r  r  r   rj  r   r  r  r  r  r  r  rM  rN  s   @r   r  r    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   r  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)rt   ru   rv   r   r   dummyr   r'  rJ  r   r  r  r   r   r"  rW  r_  rk  ro  r  r  r  r   rj  rY   r   r   r  r  #  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   r  c           	         | d   }t               }h d}|j                         D ]D  \  }}t        |t              st	        |t
              r|t
        u r1t        |j                        |k  sJ |j                         |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|_        |_        ||_        || |<   G d d gd gfd}fd}|| d<   || d<   y )Nrt   >   r   r   r   Withr   Mixinc                       e Zd Zy*install_tests_in_module_dict.<locals>.TempNr  rY   r   r   Tempr  O  s    r   r  r   r  c                       e Zd Zyr  r  rY   r   r   r  z*install_tests_in_module_dict.<locals>.TempZ  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   Trb   rd   z start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)r   r  r  r%   _cleanupr|  r   r  rO   ri   rD   rE   rF   ry   rz   r  r_  r  rI   r   get_temp_dirr  r  r  )r\  r}  old_start_methodrR   s    r   setUpModulez1install_tests_in_module_dict.<locals>.setUpModulec  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   Trd   r  r   r  r  )r:  r   rK  r   ri   rb  r%   r|  r"  r#  r  r   r  r   _cleanup_tests)
need_sleepr   r   r}  r  s      r   tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModuley  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   rb  r   
capitalizerE   rR  r   requires_hashdigestrt   rv   ru   r9  )remote_globsrR   	only_typeexclude_typesru   local_globs	ALL_TYPESr+   basetype_newnamer  r  r  r  r}  r  s    `             @@r   install_tests_in_module_dictr  ;  s   j)J)K3I!'') &
d$%dL)|#t))*i7K9K9KK7++ -)!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  rY   r   r   r  r    rX  r   r  ztest_semlock_subclass-r   r   r5  F)r   r  rA   r   
sem_unlink)ro   r  r+   r   s       r   test_semlock_subclassz"SemLockTests.test_semlock_subclass  sG    	&.. 	'		}5Aq"dE*##D)r   N)rt   ru   rv   r  rY   r   r   r  r    s    *r   r  )r2   NrA  )rE   unittest.mockr"   r  rl  r   r  r   ry   rA   rk  r  rV   r7  rk  r_  r  r  rD  r  r  r  ri  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.managersrc  multiprocessing.queuesr   r   r   r   HAVE_SEND_HANDLEr!  ImportErrormultiprocessing.sharedctypesr   r   r  r   	HAS_SHMEMr  HAVE_ASAN_FORK_BUGrF   r  r   r#   r&   r+   r(   r-   r  r  rM  r   r
  r  r  r  r  r!  r  HAVE_GETVALUErz   r  r6   rB   r  r  ctypesr:   r;   r<   r=   r9  rI   rZ   rR  r\   r|   r   r   r   r   r   r  r  r  r  r  rT  re  rs  r  r  r  r  r  r  r7  rc  rz  r  r  r  r  r  rD   r  r  r  rR  rV  rX  ri  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r#  r:  rE  r  r[  rx  r  r  r  rO  r|  r  r  r  r  r  r  r  r  r  r
  r  r  r  r'  rJ  rR  rf  rq  rv  r  r  r  rx   r  r  r   r  ri  rp  rz  r  r  r  r  r6  r  rY   r   r   <module>r     s	  
      	  
 	 	               !  ' & " & & ) ( /=../AB  2 2 2 4  !      @  )..M8-I
  (

]
^^
 	* 77g05 OO	 	 #2 Hh#0 Hh (( " ,6? ? 
	 #
BJJ}%E
 =
>)==K2LX.. L@0F 0"6 6
*  M	8< M	8h /))  ,Q7l Q7n$@ @J
 03@\ 3@ld\ dN	5W 5W@& &.
6F 6r x1< x1|C3 C3LM3 M3fY/l Y/~$$F $ %: $u! u!n&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78L 78t., .`L Ld ]$JK###H-@| @ . L@Lb bP
9 
5) 5)p Y HI###H-JJ JJ . JJJ`uL ux%h'' %VB< Bx6\ 6DE)) E& $##H-5!! 5 .5< $##E*###H-5H-- 5 . +5N $##H-*x(( * .*< *'!2!2 '*gx   gZ
B)) 
B 8!! 8H28$$ 2D'X&& '"1h// 1><:8$$ <:DAh'' AF7h'' 7D (=?\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*CC  M    I
  FPE  )I$((E(Hz)sf   #_ 6
_ _' 
_5 ` 1` ___$#_$'_21_25` ?` `
``