
    ;e8"                    ^   d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d d	lm#Z#  ej$        d
          Z% ej&                     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)m0Z0 e0j1        Z2n# e3$ r dZ2Y nw xY w	 d dl4m5Z5m6Z6 dZ7n# e3$ r dZ7Y nw xY w	 d dl)m8Z8 dZ9n# e3$ r dZ9Y nw xY w	 d dl:Z:n# e3$ r dZ:Y nw xY w ej;        d          r e j<        d          d Z=d Z>d Z?e	j@        dk    r	d dl)mAZA d ZBe/jC        ZDdZEdZFeFrd\  ZGZHZInd\  ZGZHZIejJ        ZK eLe%dd           ZMejN        dk    ZOd dl(mPZP d ZQ	  e	jR        d           ZSn	#  d!ZSY nxY wd"d#gZT	 d d$lUmVZVmWZWmXZXmYZY n# e3$ r eZZVdxZWxZXZYY nw xY wd% Z[d& Z\ G d' d(e j]                  Z^ G d) d*eZ          Z_ G d+ d,eZ          Z`d- Za G d. d/          Zb G d0 d1e`          Zc G d2 d3e)jd                  Ze G d4 d5e`          Zfd6 Zgd7 Zh G d8 d9e`          Zi G d: d;e`          Zj G d< d=e`          Zk G d> d?e`          Zl G d@ dAe`          Zm G dB dCeZ          ZndD Zo G dE dFeZ          Zp G dG dHeZ          Zq G dI dJe`          Zr G dK dLe`          Zs G dM dNe`          Zt G dO dPe`          ZuddRZvdS ZwdT ZxdU Zy G dV dWeZ          Zz G dX dYe{          Z|dZ Z} G d[ d\e`          Z~d] Zd^ Z G d_ d`e`          Z G da dbe`          Zd dcl,mZmZmZ  G dd deeZ          Zdf Z G dg dhe          Z G di dje          Ze                    dkel           e                    dmedno           e                    dpeeq            G dr dse`          Z ej                    Zdt Z G du dve          Ze                    dwel            G dx dye          Ze                    dw           dzZ G d{ d|e`          Z ej        d}           G d~ de`                      Z e=d          Z G d de`          Z G d de`          Z G d de`          Z G d de`          Z e j        e2d           ej        d}           G d de`                                  Z G d de`          Z G d deV          Z G d de`          Z e j        e9d           ej        d}           G d de`                                  Z G d de`          Z G d de j]                  Z G d de`          Z G d de`          Z G d de j]                  Z ej        d}           G d de j]                              Zd Z ej        d}           G d de j]                              Zd Zd Zd Zd Z G d deZ          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 j        ejN        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˄ deZ          Z G d̈́ de          Z G dτ de          Z G dф de          Zdӄ Z e j         ee%dԦ           dզ           e j        ejN        dk    dצ           G d؄ de j]                                          ZdS )    N)support)hashlib_helper)import_helper)	os_helper)script_helper)socket_helper)threading_helper)warnings_helper_multiprocessing)util)	reductionF)ValuecopyT)shared_memory)addressz(libasan has a pthread_create() dead lockc                 ,    |                      d          S )Nlatin)encode)ss    1/usr/lib/python3.11/test/_test_multiprocessing.pyr   r   V   s    88G    c                     t          | t          j        j                  r*|                                  |                                  d S d S N)
isinstancemultiprocessingqueuesQueueclosejoin_thread)queues    r   close_queuer!   Z   sI    %/566  r   c                 .    t          j        |            d S r   )r	   r   )processs    r   join_processr$   `   s      )))))r   posix)resource_trackerc                 :    t          j        |         |            d S r   )r&   _CLEANUP_FUNCS)namertypes     r   _resource_unlinkr+   i   s    '.t44444r   皙?)g=
ףp=?gffffff?gffffff?)r,   r,   r,   HAVE_BROKEN_SEM_GETVALUEwin32waitc                 8    ||dk     rd }t          | g|          S )N        r/   )handletimeouts     r   wait_for_handler5      s'    w}}'"""r   SC_OPEN_MAX   __main__z$test.test_multiprocessing_forkserver)	Structurec_intc_double
c_longlongc                      d} 	 t          j        d          }n# t          t          f$ r Y dS w xY w|dk    s|| k    rdS t	          j        d| z            )zACheck that the system supports enough semaphores to run the test.r7   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_semaphoresrH      s     I
-..J'    {{ey((

 >@IJ K K Ks    ..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                 J     t          j                    fd            }|S )Nc                  z    t          j                    x}dk    rt          j        d|d            | i |S )Nspawnstart_method=z, not 'spawn'; )r   get_start_methodrD   rE   )argskwargsstart_methodreason	test_items      r   spawn_check_wrapperzKonly_run_in_spawn_testsuite.<locals>.decorator.<locals>.spawn_check_wrapper   sS     / @ B BBwNN'(Q<(Q(Q(Q(QRRR9d-f---r   )	functoolswraps)rS   rT   rR   s   ` r   	decoratorz.only_run_in_spawn_testsuite.<locals>.decorator   s?    		#	#	. 	. 	. 	. 	. 
$	#	.
 #"r    )rR   rW   s   ` r   only_run_in_spawn_testsuiterY      s$    # # # # # r   c                   X    e Zd ZdZ ej        ej        dk    d          d             ZdS )TestInternalDecoratorszBLogic within a test suite that could errantly skip tests? Test it!r.   ztest requires that fork exists.c                 2   t          j                    dk    rt          j        d          	 t	          d          d             }n/# t
          $ r"}|                     d|            Y d }~nd }~ww xY wt          j        d          }	 t          j        dd           |                      |            d	           t          j        d
d           | 	                    t          j                  5 } |             d d d            n# 1 swxY w Y   | 
                    dt          |j                             | 
                    dt          |j                             t          j        |d           d S # t          j        |d           w xY w)NrL   z'only run in test_multiprocessing_spawn.ztesting this decoratorc                      dS N   rX   rX   r   r   return_four_if_spawnzUTestInternalDecorators.test_only_run_in_spawn_testsuite.<locals>.return_four_if_spawn   s    qr   z.expected decorated `def` not to raise; caught T
allow_noneforcer_   forkrM   )r   rN   rD   rE   rY   	Exceptionfailset_start_methodassertEqualassertRaisesassertInstr	exception)selfr`   errorig_start_methodctxs        r    test_only_run_in_spawn_testsuitez7TestInternalDecorators.test_only_run_in_spawn_testsuite   s   +--88#$MNNN	N()ABB  CB  	N 	N 	NIILsLLMMMMMMMM	N ,<MMM		L,WDAAAA1133Q777,V4@@@@""8#455 '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'MM2C4F4FGGGMM/3s}+=+=>>>,->dKKKKKKO,->dKKKKKsI   A 
A2A--A2A)E> 4D?E> DE> DAE> >FN)	__name__
__module____qualname____doc__rD   skipIfsysplatformrr   rX   r   r   r[   r[      sP        LLX_S\W,.OPPL L QPL L Lr   r[   c                       e Zd Zd Zd ZdS )TimingWrapperc                 "    || _         d | _        d S r   )funcelapsed)rn   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~   )rn   rO   kwdsts       r   __call__zTimingWrapper.__call__   s^    N	049d+d++>++a/DLL4>++a/DL////s	   = ANrs   rt   ru   r   r   rX   r   r   r{   r{      s2          0 0 0 0 0r   r{   c                   (    e Zd ZdZd Zd Zd ZeZdS )BaseTestCase)	processesmanagerthreadsc                 F    t           r|                     ||d           d S d S N   )CHECK_TIMINGSassertAlmostEqualrn   abs      r   assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEqual   s2     	,""1a+++++	, 	,r   c                 \    	  || }|                      ||          S # t          $ r Y d S w xY wr   )ri   NotImplementedError)rn   valuer}   rO   ress        r   assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplemented  sN    	0$+C ##E3/// # 	 	 	DD	s    
++c                      t          d          )Nz#shouldn't try to pickle a test case)r   )rn   rO   s     r   
__reduce__zBaseTestCase.__reduce__  s    !"GHHHr   N)rs   rt   ru   ALLOWED_TYPESr   r   r   __reduce_ex__rX   r   r   r   r      sJ        7M, , ,0 0 0I I I MMMr   r   c                     	 |                                  S # t          $ r: 	 | 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_valuerB   _Semaphore__value_valuer   rn   s    r   r   r     s    	*~~ * * *	*)))) 	* 	* 	**{"""""! * * *))*	**s8    
A*A
AA AA AAAc                       e Zd Zd ZdS )DummyCallablec                 ^    t          |t                    sJ |                    d           d S N   )r   r   put)rn   qcs      r   r   zDummyCallable.__call__%  s+    !]+++++	ar   N)rs   rt   ru   r   rX   r   r   r   r   $  s#            r   r   c                   2   e Zd ZdZd Zd Z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#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+ Z.d, Z/d- Z0dS )0_TestProcessr   r   c                 @   | j         dk    r-|                     d                    | j                              |                                 }|j        }|                     |                                           |                     |j                    |                     |t                     |                     t          |          dk               |                     |j        t          j                               |                     |j        d            d S )Nr   test not appropriate for {}r   )TYPEskipTestformatcurrent_processauthkey
assertTrueis_alivedaemonassertIsInstancebyteslenri   identr@   getpidexitcode)rn   currentr   s      r   test_currentz_TestProcess.test_current.  s    9	!!MM7>>tyIIJJJ&&((/((**+++GN*+++gu---Gq()))	444)400000r   c                    | j         dk    r|                     d| j                     t          j        t          j                                        t          j        t          j                  g}|D ]n}|                     |           |                                 }|	                                 |
                                 |                     |j        d           od S )Nr   ztest not appropriate for r   )r   r   rx   
executabler   pathlibPathset_executableProcessstartjoinri   r   )rn   pathspathps       r   test_set_executablez _TestProcess.test_set_executable<  s    9	!!MMAdiAABBBNN!!##L((

  	, 	,D%%%AGGIIIFFHHHQZ++++	, 	,r   c           	         dddgdf}t           t          f}t          j        ||          }|D ]\  }}|                     ||          5  |                     d          }|                     | j         |||f                    }d|_        |	                                 |
                                }|                     ||           |                                 t          |           d d d            n# 1 swxY w Y   d S )Nr   rl   r   )rO   	args_typetargetrO   T)listtuple	itertoolsproductsubTestr   r   
_test_argsr   r   getri   r   r!   )	rn   
args_cases
args_types
test_casesrO   r   r   r   
child_argss	            r   test_args_argumentz_TestProcess.test_args_argumentK  s;    T*
E]
&z:>>
) 
	 
	OD)49== 	 	JJqMMLLiiD	>R>RLSS			UUWW
  T222A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 
	s   	B%C::C>	C>	c                 0    |                     |           d S r   )r   )clsr   args      r   r   z_TestProcess._test_args_  s    	c




r   c                    | j         dk    r-|                     d                    | j                              |                     | j                  }|                     |j        |                                 j                   |                     | j        d          }|                     |j                   |                     | j        d          }| 	                    |j                   d S )Nr   r   r   Tr   r   F)
r   r   r   r   _testri   r   r   r   assertFalse)rn   proc0proc1proc2s       r   test_daemon_argumentz!_TestProcess.test_daemon_argumentc  s    9	!!MM7>>tyIIJJJ DJ//t';';'='='DEEEDJt<<%%%DJu==&&&&&r   c                 R   |                                  }|                    |           |                    |           |                    |j                   | j        dk    rC|                    t	          |j                             |                    |j                   d S d S )Nr   )r   r   r)   r   r   r   pid)r   r   rO   r   r   s        r   r   z_TestProcess._testo  s    %%''	d	d	gl8y  EE%(()))EE'+ ! r   c                    | j         dk    r-|                     d                    | j                              |                     |                                            |                     d          \  }}|                     | j        |f          }|                                 |	                                 |
                                \  }}|                     ||                                 j                   |                     |t          j                               |                     ||                                 j                   d S )Nr   r   Fduplexr   )r   r   r   assertIsNoneparent_processPiper   _test_send_parent_processr   r   recvri   r   r   r@   r   r)   )rn   rconnwconnr   
parent_pidparent_names         r   test_parent_process_attributesz+_TestProcess.test_parent_process_attributesy  s   9	!!MM7>>tyIIJJJ$--//000yyy..uLL >eXLNN					"'**,,
KT%9%9%;%;%?@@@RY[[111d&:&:&<&<&ABBBBBr   c                 t    ddl m} |                     |            j         |            j        g           d S )Nr   r   )multiprocessing.processr   sendr   r)   r   r   r   s      r   r   z&_TestProcess._test_send_parent_process  sG    ::::::

NN$$(..*:*:*?@AAAAAr   c                    | j         dk    r-|                     d                    | j                              |                     d          \  }}|                     | j        |f          }|                                 |                    t          j	                  st          d          |                                }|                     |d           |                                 |                                 |                    t          j	                  st          d          |                                }|                     |d	           d S )
Nr   r   Fr   r   r4   z(Could not communicate with child processalive	not alive)r   r   r   r   r   _test_create_grandchild_processr   pollr   LONG_TIMEOUTAssertionErrorr   ri   	terminater   )rn   r   r   r   parent_process_statuss        r   test_parent_processz _TestProcess.test_parent_process  s8   9	!!MM7>>tyIIJJJ
 yyy..uLL7ui  I I				zz'"6z77 	M !KLLL %

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

.<<<<<r   c                     |                      | j        |f          }|                                 t          j        d           d S )Nr   i,  )r   _test_report_parent_statusr   r   sleep)r   r   r   s      r   r  z,_TestProcess._test_create_grandchild_process  s:    KKs=UIKNN				
3r   c                 .   ddl m} |                     |                                            rdnd            |                                t
          j                   |                     |                                            rdnd           d S )Nr   r   r   r   r   )r   r   r   r   r   r   SHORT_TIMEOUTr   s      r   r	  z'_TestProcess._test_report_parent_status  s    ::::::

nn..7799J77{KKKg&;<<<

nn..7799J77{KKKKKr   c                    |                      d          }|                                 }|ddf}ddd}d}|                     | j        |||          }d|_        |                                 }| j        d	k    r |                     |j        |j                   |                     |	                                d
           |                     |j        d           | 
                    ||                                            |                     t          |                                           t          u            |                     |j        d            |                                 |                     |j        d            |                     |	                                d           |                     ||                                            |                     |                                |dd                     |                     |                                |           |                     |                                |j                   | j        d	k    rZ|                     |                                |j                   |                     |                                |j                   |                                 |                     |j        d           |                     |	                                d
           | 
                    ||                                            t-          |           d S )Nr         gRQ@)hellobyeSomeProcess)r   rO   rP   r)   Tr   Fr   )r   Eventr   r   r   r   r   ri   r   r   assertNotInactive_childrenr   typer   r   r   rk   r   r)   r   r   r!   )rn   r   erO   rP   r)   r   r   s           r   test_processz_TestProcess.test_process  s   JJqMMJJLL1ayD))LL:Dd    &&((9	!!QY888u---4(((D0022333T113344<===T***				T***t,,,a--//000$qrr(+++&)))!&)))9	!!QUUWWgo666QUUWWae,,,	Q'''u---D0022333Ar   zneeds native_idc                    | j         dk    r-|                     d                    | j                              t          j                    j        }|                     d          }|                     | j        |f          }|	                                 |
                                }|                                 t          |           |                     ||           d S )Nr   r   r   r   )r   r   r   	threadingmain_thread	native_idr   r   "_test_process_mainthread_native_idr   r   r   r!   assertNotEqual)rn   current_mainthread_native_idr   r   child_mainthread_native_ids        r   !test_process_mainthread_native_idz._TestProcess.test_process_mainthread_native_id  s    9	!!MM7>>tyIIJJJ'0'<'>'>'H$JJqMMLL GqdLSS				%&UUWW"	A8:TUUUUUr   c                 `    t          j                    j        }|                    |           d S r   )r  r  r  r   )r   r   mainthread_native_ids      r   r  z/_TestProcess._test_process_mainthread_native_id  s-    (466@	"#####r   c                 .    t          j        d           d S )Nd   r   r
  r   s    r   _sleep_somez_TestProcess._sleep_some  s    
3r   c                 .    t          j        |           d S r   r&  )r   delays     r   _test_sleepz_TestProcess._test_sleep  s    
5r   c                    | j         dk    r-|                     d                    | j                              |                     | j                  d_                                         |                                                     d           | 	                    | 
                                           |                     j        d            t          j                  }|                      |d          d            |                     |j        d           |                                                     d           |                      |d          d            |                     |j        d           |                                                     d           t!          j        d            |           t%          t&          d	          rÈfd
}t'          j        t&          j        |          }	 t'          j        d           |                      |            d            t'          j        d           t'          j        t&          j        |           nV# t'          j        d           t'          j        t&          j        |           w xY w|                      |            d            |                     |j        d           |                                                     d           |                     | 
                                                                            j        S )Nr   r   r   Tr   r2   r?   r   alarmc                  (    t          dz            )Nzjoin took too long: %sRuntimeError)rO   r   s    r   handlerz+_TestProcess._kill_process.<locals>.handler  s    "#;a#?@@@r   
   F)r   r   r   r   r(  r   r   ri   r   rk   r  r   r{   r   r   r~   r   r
  hasattrsignalSIGALRMr-  r  )rn   methr   r1  old_handlerr   s        @r   _kill_processz_TestProcess._kill_process  s   9	!!MM7>>tyIIJJJLL 0L11				t,,,a--//000T***QV$$a$'''$$T\3777t,,,b4((($$T\3777t,,, 	
1Q67## 	+A A A A A -@@K;R     ...Qfnk:::: Qfnk::::TTVVT***$$T\3777u---D0022333	zs   2I2 25J'c                     |                      t          j        j                  }t          j        dk    r#|                     |t          j                    d S d S Nnt)	r8  r   r   r  r@   r)   ri   r4  SIGTERMrn   r   s     r   test_terminatez_TestProcess.test_terminate,  sM    %%o&=&GHH7d??X77777 ?r   c                     |                      t          j        j                  }t          j        dk    r#|                     |t          j                    d S d S r:  )	r8  r   r   killr@   r)   ri   r4  SIGKILLr=  s     r   	test_killz_TestProcess.test_kill1  sM    %%o&=&BCC7d??X77777 ?r   c                     	 t          j                    }n# t          $ r d}Y nw xY w|                     t	          |          t
          u            |                     |dk               d S r   )r   	cpu_countr   r   r  int)rn   cpuss     r   test_cpu_countz_TestProcess.test_cpu_count6  st    	",..DD" 	 	 	DDD	T

c)***	"""""s    %%c                    |                      t          |                                           t                     |                     t
          j        t          f          }|                     ||                                            d|_	        |
                                 |                     ||                                            |                                 |                     ||                                            d S Nr   T)ri   r  r  r   r   r   r
  DELTAr  r   r   rk   r   rn   r   s     r   test_active_childrenz!_TestProcess.test_active_children>  s    d224455t<<<LL
%L::D0022333				a--//000	D002233333r   c                    |                     |           t          |          dk     r\t          d          D ]N}|                     | j        |||gz   f          }|                                 |                                 Md S d S )Nr  r   )r   r   ranger   _test_recursionr   r   )r   r   idir   s        r   rO  z_TestProcess._test_recursionK  s    

2r77Q;;1XX  KK.eRV_     			 ; r   c                    |                      d          \  }}|                     |g            t          j        t                     g }|                                r;|                    |                                           |                                ;g dgddgddgdgddgddgg}|                     ||           d S )NFr   r   r   )	r   rO  r   r
  rJ  r  appendr   ri   )rn   r   r   resultexpecteds        r   test_recursionz_TestProcess.test_recursionV  s    yyy..uUB'''
5jjll 	(MM%**,,''' jjll 	( cAAcAA 	*****r   c                 0    |                     d           d S )N      $@r/   r   events     r   _test_sentinelz_TestProcess._test_sentinelj  s    

4r   c                    | j         dk    r-|                     d                    | j                              |                                 }|                     | j        |f          }|                     t                    5  |j         d d d            n# 1 swxY w Y   |	                                 | 
                    |j                   |j        }|                     |t                     |                     t          |d                     |                                 |                                 |                     t          |d                     d S )Nr   r   r   r2   r   r   )r   r   r   r  r   r[  rj   rC   sentinelr   
addCleanupr   r   rE  r   r5   setr   )rn   rZ  r   r]  s       r   test_sentinelz_TestProcess.test_sentineln  sg   9	!!MM7>>tyIIJJJ

LL 35(LCCz** 	 	JJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 					:h,,,3???@@@			!<<<=====s   BBBr   Nc                 Z    ||                                  t          j        |           d S r   )r   rx   exit)r   rcr   s      r   _test_closez_TestProcess._test_close~  s%    =EEGGGr   c                 b   | j         dk    r-|                     d                    | j                              |                                 }|                     | j        d|i          }d|_        |                                 |                     |	                                d           | 
                    t                    5  |                                 d d d            n# 1 swxY w Y   |                    d            |                                 |                     |	                                d           |                     |j        d           |                                 | 
                    t                    5  |	                                 d d d            n# 1 swxY w Y   | 
                    t                    5  |                                 d d d            n# 1 swxY w Y   | 
                    t                    5  |                                 d d d            n# 1 swxY w Y   |                                 t#          j        |          }~t'          j                     |                      |            d            t-          |           d S )Nr   r   r   )r   rP   TFr   )r   r   r   r   r   rd  r   r   ri   r   rj   rC   r   r   r   r   r  weakrefrefgccollectassertIsr!   )rn   r   r   wrs       r   
test_closez_TestProcess.test_close  s   9	!!MM7>>tyIIJJJJJLLLL 0#qLBB				t,,,z** 	 	GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
d	u---Q'''				z** 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 					[^^

bbddD!!!AsH   C))C-0C-F//F36F3G55G9<G9H;;H?H?c                 L     j         dk    r-                     d                     j                              t          j                    }|dk    rdnd} fdt          |          D             }|D ]}|                                 |D ]}t          |           |D ]}                     |j	        d            fdt          |          D             }|D ]}|                                 t          j        d	           |D ]}|                                 |D ]}t          |           t          j        d
k    r^t          j         g}t"          j        dk    r |                    t          j                    |D ]}                     |j	        |           d S d S )Nr   r   rL   r   r%  c                 H    g | ]}                     j        d           S )){Gz?r   )r   r+  .0rQ  rn   s     r   
<listcomp>z4_TestProcess.test_many_processes.<locals>.<listcomp>  s<     $ $ $ T%5GDD $ $ $r   r   c                 F    g | ]}                     j                   S )r   )r   r(  rp  s     r   rr  z4_TestProcess.test_many_processes.<locals>.<listcomp>  s:     $ $ $ T%566 $ $ $r   MbP?r;  darwin)r   r   r   r   rN   rN  r   r$   ri   r   r   r
  r  r@   r)   r4  r<  rx   ry   rS  rA  rk   )rn   smNprocsr   	exitcodess   `     r   test_many_processesz _TestProcess.test_many_processes  s   9	!!MM7>>tyIIJJJ-//wAAC$ $ $ $(($ $ $ 	 	AGGIIII 	 	AOOOO 	, 	,AQZ++++$ $ $ $(($ $ $ 	 	AGGIIII
5 	 	AKKMMMM 	 	AOOOO7d?? .)I|x''   &.111 5 5aj)4444 ?5 5r   c                    t                      }t          j        |          }|                                 }|                     |||f          }~|                                 |                                 t          j                     | 	                     |            d            | 
                    |                                d           t          |           d S )Nr   r   )r   rf  rg  r   r   r   r   rh  ri  rj  ri   r   r!   )rn   r   rk  r   r   s        r   test_lose_target_refz!_TestProcess.test_lose_target_ref  s    OO[^^JJLLLLAL//					

bbddD!!!!$$$Ar   c                 z    |                     t          j                               |                                 d S r   )r   r   fd_countr0   )rn   evtr   s      r   _test_child_fd_inflationz%_TestProcess._test_child_fd_inflation  s.    	i ""###




r   c                 R     j         dk    r-                     d                     j                              t          j                    }|dk    r(                     d                    |                     d}                                                                   fdt          |          D             }|D ]}|                                 	 fdt          |          D             } 	                    t          t          |                    d|                                            |D ]}|                                 t                     d S #                                  |D ]}|                                 t                     w xY w)Nr   r   re   r   c                 L    g | ] }                     j        f           !S r   )r   r  )rq  rQ  r  r   rn   s     r   rr  z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>  s@     $ $ $ T%B#qRR $ $ $r   c                 8    g | ]}                                 S rX   r   )rq  rQ  r   s     r   rr  z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>  s!    333Q333r   r   )r   r   r   r   rN   r  r   rN  r   ri   r   r_  r   r!   )rn   rv  rw  rx  r   	fd_countsr  r   s   `     @@r   test_child_fd_inflationz$_TestProcess.test_child_fd_inflation  s    9	!!MM7>>tyIIJJJ-//<< MM7>>rBBCCCjjllJJLL$ $ $ $ $ $(($ $ $ 	 	AGGIIII	3333%((333ISY00!Y??? GGIII  NNNNN GGIII  NNNNs   AE( (>F&c                     fd}fd}t          j        |                                           t          j        |d                                           d S )Nc                  X    t          j        d                                             d S )N      ?r   r
  r_  r  s   r   func1z2_TestProcess._test_wait_for_threads.<locals>.func1  s!    JsOOOGGIIIIIr   c                  X    t          j        d                                             d S )N   )r   r
  clearr  s   r   func2z2_TestProcess._test_wait_for_threads.<locals>.func2  s!    JrNNNIIKKKKKr   r   Tr   )r  Threadr   )rn   r  r  r  s    `  r   _test_wait_for_threadsz#_TestProcess._test_wait_for_threads  s    	 	 	 	 		 	 	 	 	 	&&&,,...d33399;;;;;r   c                 v   | j         dk    r-|                     d                    | j                              |                                 }|                     | j        |f          }|                                 |                                 |                     |	                                           d S )Nr   r   r   )
r   r   r   r  r   r  r   r   r   is_set)rn   r  procs      r   test_wait_for_threadsz"_TestProcess.test_wait_for_threads  s     9	!!MM7>>tyIIJJJjjll||4#>cV|LL

		

%%%%%r   c                     |                                 D ]S\  }}|dk    r(t          j                    }|                                 n
|dk    sJ d }t	          t
          |d            T|                                 d S )Nr   remove)itemsioStringIOr   setattrrx   r_  )rn   r  break_std_streamsstream_nameactionstreams         r   _test_error_on_stdio_flushz'_TestProcess._test_error_on_stdio_flush  s    #4#:#:#<#< 	, 	,K  ))))Cd++++					r   c           	      l   t          j                    d g}|d                                          dD ] }|D ]}t          t          |          }t          t          ||           	 |                                 }|                     | j        |f          }|	                                 |
                                 |                     |                                           |                     |j        d           t          t          ||           # t          t          ||           w xY wd S )Nr   stdoutstderrr   )r  r  r   getattrrx   r  r  r   r  r   r   r   r  ri   r   )rn   streamsr  r  
old_streamr  r  s          r   test_error_on_stdio_flush_1z(_TestProcess.test_error_on_stdio_flush_1  s#   ;==$'
/ 	: 	:K! : :$S+66
[&111	:**,,C<<t/N.1V ( 5 5DJJLLLIIKKKOOCJJLL111$$T]A666Cj9999GCj9999:	: 	:s   %BDD/c           	         dD ]}dD ]}t          t          |          }	 |                                 }|                     | j        |||if          }|                                 |                                 |                     |                                           | 	                    |j
        d           t          t          ||           # t          t          ||           w xY wd S )Nr  )r   r  r   r   )r  rx   r  r   r  r   r   r   r  ri   r   r  )rn   r  r  r  r  r  s         r   test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_20  s     0 	: 	:K- : :$S+66
	:**,,C<<t/N.1K3H-I ( K KDJJLLLIIKKKOOCJJLL111$$T]A666Cj9999GCj9999:	: 	:s   BCC,r2   c                 V    t          j        |           |                                 d S r   r  )rn   r  r*  s      r   _sleep_and_set_eventz!_TestProcess._sleep_and_set_eventA  s#    
5					r   c                    | j         dk    r-|                     d                    | j                              t          j                    }|dk    r(|                     d                    |                     ddlm} |                                 d}|                                 }| 	                    | j
        ||f          }|                                 |j        }t          j        ||           t          j        |dz             |                                 }| 	                    | j
        |f          }	|	                                 |	                                 |                     |                                           |                     |	j        d           |                                 |                     |                                           |                     |j        d	           d S )
Nr   r   
forkserverr   )_forkserverr  r          @)r      )r   r   r   r   rN   multiprocessing.forkserverr  ensure_runningr  r   r  r   _forkserver_pidr@   r@  r   r
  r   r   r  ri   r   rk   )
rn   signumrv  r  r*  r  r  r   evt2r   s
             r   check_forkserver_deathz#_TestProcess.check_forkserver_deathF  s    9	!!MM7>>tyIIJJJ-// MM7>>rBBCCC::::::""$$$ jjll||4#<C<|PP

)
V
53;zz||D$=TGLL

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

%%%dmX.....r   c                 D    |                      t          j                   d S r   )r  r4  SIGINTr   s    r   test_forkserver_sigintz#_TestProcess.test_forkserver_sigintl  s    ##FM22222r   c                 h    t           j        dk    r!|                     t          j                   d S d S r:  )r@   r)   r  r4  rA  r   s    r   test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkillp  s0    7d??''77777 ?r   )r   Nr2   )1rs   rt   ru   r   r   r   r   classmethodr   r   r   r   r   r  r  r	  r  rD   
skipUnlessr  _HAVE_THREAD_NATIVE_IDr!  r  r(  r+  r8  r>  rB  rG  rL  rO  rV  r[  r`  rd  rl  rz  r|  r  r  r  r  r  r  r  r  r  r  r  rX   r   r   r   r   *  si       ,M1 1 1, , ,  (   [
' 
' 
'   [C C C B B [B= = =2   [
 L L [L& & &P X9;LMMV V NMV  $ $ [$   [   [1 1 1f8 8 8
8 8 8
# # #4 4 4   [+ + +(   [> > >     [
  @!5 !5 !5F     [  > 
< 
< [
<
& 
& 
& @B 	 	 	 [	: : :&: : :"    [$/ $/ $/L3 3 38 8 8 8 8r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )_UpperCaserc                     t           j                            |            t          j                    \  | _        | _        d S r   )r   r   r   r   
child_connparent_connr   s    r   r   z_UpperCaser.__init__|  s7    ((...,;,@,B,B))))r   c                     | j                                          t          | j        j        d           D ].}| j                            |                                           /| j                                         d S r   )r  r   iterr  r   r   upperrn   r   s     r   runz_UpperCaser.run  sp       do*D11 	, 	,AO  ++++r   c                     t          |          t          u sJ | j                            |           | j                                        S r   )r  rl   r  r   r   r  s     r   submitz_UpperCaser.submit  sA    Aww#~~~~a   $$&&&r   c                     | j                             d            | j                                          | j                                         d S r   )r  r   r   r  r   s    r   stopz_UpperCaser.stop  sH    d###   r   N)rs   rt   ru   r   r  r  r  rX   r   r   r  r  z  sS        C C C     ' ' '
         r   r  c                   P    e Zd ZdZd Zd Zed             Zed             Zd Z	dS )_TestSubclassingProcessr   c                 L   t                      }d|_        |                                 |                     |                    d          d           |                     |                    d          d           |                                 |                                 d S )NTr  HELLOworldWORLD)r  r   r   ri   r  r  r   )rn   
uppercasers     r   test_subclassingz(_TestSubclassingProcess.test_subclassing  s     ]]
 
**733W===**733W===r   c                 X   | j         dk    r-|                     d                    | j                              t          j        }|                     t          j        |           |                     | j        |f          }|	                                 |
                                 t          |d          5 }|                                }|                     d|           |                     d|           |                     d|           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   utf-8encodingZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)r   r   r   r   TESTFNr^  unlinkr   _test_stderr_flushr   r   openreadrk   )rn   testfnr  fro   s        r   test_stderr_flushz)_TestSubclassingProcess.test_stderr_flush  sD   9	!!MM7>>tyIIJJJ!	(&111||4#:&|KK

		&7+++ 	/q&&((CMM-s333MM3S999MM.#...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   ;ADD#&D#c                     t          j        |t           j        t           j        z  t           j        z            }t          |ddd          t
          _        ddz   d S )Nwr  Fr  closefdr   r   )r@   r  O_WRONLYO_CREATO_EXCLrx   r  )r   r  fds      r   r  z*_TestSubclassingProcess._test_stderr_flush  sH    WVR[2:5	ABB"cGUCCC
	!r   c                     t          j        |t           j        t           j        z  t           j        z            }t          |ddd          t
          _        t          j        |           d S )Nr  r  Fr  )r@   r  r  r  r  rx   r  rb  )r   rR   r  r  s       r   _test_sys_exitz&_TestSubclassingProcess._test_sys_exit  sQ    WVR[2:5	ABB"cGUCCC
r   c                    | j         dk    r-|                     d                    | j                              t          j        }|                     t          j        |           g ddfD ]}|                     | j        ||f          }d|_	        |
                                 t          |           |                     |j        d           t          |d	          5 }|                                }d d d            n# 1 swxY w Y   |                     |                                t#          |                     t%          j        |           g d
}|D ]\  }}|                     |          5  |                     t(          j        |          }d|_	        |
                                 t          |           |                     |j        |           d d d            n# 1 swxY w Y   d S )Nr   r   r   r     zignore thisr   Tr   r  r  )))Tr   )Fr   ))   r  )r   r   )rX   r   rO   )r   r   r   r   r  r^  r  r   r  r   r   r$   ri   r   r  r  rstriprl   r@   r   rx   rb  )	rn   r  rR   r   r  contentcasesrO   rU  s	            r   test_sys_exitz%_TestSubclassingProcess.test_sys_exit  sW   9	!!MM7>>tyIIJJJ!	(&111 II
 	 	F D$7vv>NOOAAHGGIIIOOOQZ+++fw/// #1&&((# # # # # # # # # # # # # # #W^^--s6{{;;;If   $ 	7 	7ND(4(( 7 7LLtL<<			Q  X6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7s%   !DD		D	8A'G++G/	2G/	N)
rs   rt   ru   r   r  r  r  r  r  r  rX   r   r   r  r    s|        "M  / / /"   [   [
&7 &7 &7 &7 &7r   r  c                 z    t          | d          r|                                 S |                                 dk    S )Nemptyr   )r3  r  qsize)r   s    r   queue_emptyr    s4    q' wwyywwyyA~r   c                 z    t          | d          r|                                 S |                                 |k    S )Nfull)r3  r   r  )r   maxsizes     r   
queue_fullr    s4    q& $vvxxwwyyG##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dS )
_TestQueuec                     |                                  t          d          D ]}|                                 |                                 d S )N   )r0   rN  r   r_  )r   r    child_can_startparent_can_continuerQ  s        r   	_test_putz_TestQueue._test_put  sP    q 	 	AIIKKKK!!!!!r   c                    d}|                      |          }|                                 }|                                 }|                     | j        |||f          }d|_        |                                 |                     t          |          d           |                     t          ||          d           |	                    d           |	                    dd           |	                    ddd            |	                    d	d           |	                    d
dd            |
                    d           t          j        t                     |                     t          |          d           |                     t          ||          d           t          |j	                  }t          |j
                  }|                     t           j        |dd           |                     |j        d           |                     t           j        |ddd            |                     |j        d           |                     t           j        |d           |                     |j        d           |                     t           j        |ddt(                     |                     |j        t(                     |                     t           j        |ddt*                     |                     |j        d           |                     t           j        |ddt,                     |                     |j        t,                     |                                 |                                 |                     t          |          d           |                     t          ||          d           |                                 t5          |           d S )Nr  r  r   TFr   r  r  r_   r      r   r   )r   r  r   r	  r   r   ri   r  r  r   
put_nowaitr   r
  rJ  r{   rj   pyqueueFullr   r~   TIMEOUT1TIMEOUT2TIMEOUT3r_  r0   r   r!   )rn   MAXSIZEr    r  r  r  r   r  s           r   test_putz_TestQueue.test_put  s\   

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

U++T222E733U;;;		!		!T		!T4   		!U		!UD!!! 	
5U++U333E733T:::EI&&"5#344
',Q666$$S[!444',Qt<<<$$S[!444',
A666$$Z%7;;;',Qh???$$S[(;;;',Qx@@@$$S[!444',QhGGG$$S[(;;;  """U++T222E733U;;;		Er   c                     |                                  |                    d           |                    d           |                    d           |                    d           |                                 d S )Nr  r  r_   r   )r0   r   r_  r   r    r  r  s       r   	_test_getz_TestQueue._test_get9  sh    		!		!		!		!!!!!!r   c                 .   |                                  }|                                 }|                                 }|                     | j        |||f          }d|_        |                                 |                     t          |          d           |                                 |	                                 t          j        t                     |                     t          |          d           |                     |                    dd           d           |                     |                    d          d           |                     |                    d          d           |                     |                                d	           |                     t          |          d           t          |j                  }t          |j                  }|                     t"          j        |d           |                     |j        d
           |                     t"          j        |dd            |                     |j        d
           |                     t"          j        |           |                     |j        d
           |                     t"          j        |dt*                     |                     |j        t*                     |                     t"          j        |dt,                     |                     |j        d
           |                     t"          j        |t.                     |                     |j        t.                     |                                 t3          |           d S )Nr   TFr  r  r   r   r_   r   r   )r   r  r   r  r   r   ri   r  r_  r0   r   r
  rJ  r   
get_nowaitr{   rj   r  Emptyr   r~   r  r  r  r   r!   )rn   r    r  r  r  r   r  s          r   test_getz_TestQueue.test_getC  s   

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

U++T222  """
5U++U333 	4..2224!,,,1--q111))++Q///U++T222EI&&"5#344
'-e444$$S[!444'-eT:::$$S[!444'-444$$Z%7;;;'-dH===$$S[(;;;'-eX>>>$$S[!444'-h???$$S[(;;;		Er   c                 V    t          dd          D ]}|                    |           d S )Nr2  r  )rN  r   )r   r    rQ  s      r   
_test_forkz_TestQueue._test_forkx  s4    r2 	 	AIIaLLLL	 	r   c                 $   |                                  }t          d          D ]}|                    |           t          j        t
                     |                     | j        |f          }d|_        |	                                 t          d          D ]*}| 
                    |                                |           +|                     t          j        |j        d           |                                 t!          |           d S )Nr2  r   Tr  F)r   rN  r   r   r
  rJ  r   r  r   r   ri   r   rj   r  r  r   r!   )rn   r    rQ  r   s       r   	test_forkz_TestQueue.test_fork  s     

 r 	 	AIIaLLLL 	
5 LLuhL??				 r 	- 	-AUYY[[!,,,,'-E:::	Er   c                    |                                  }	 |                     |                                d           n%# t          $ r |                     d           Y nw xY w|                    d           |                     |                                d           |                    d           |                     |                                d           |                                 |                     |                                d           |                                 |                     |                                d           t          |           d S )Nr   zqsize method not implementedr   r   r  )r   ri   r  r   r   r   r   r!   rn   r   s     r   
test_qsizez_TestQueue.test_qsize  s(   JJLL	:QWWYY****" 	: 	: 	:MM899999	:	aA&&&	aA&&&	A&&&	A&&&As   (? A! A!c                     t          |j        d           D ]/}t          j        t                     |                                 0d S r   )r  r   r   r
  rJ  	task_done)r   r   objs      r   _test_task_donez_TestQueue._test_task_done  sF    t$$ 	 	CJuKKMMMM	 	r   c                                                        fdt          d          D             }|D ]}d|_        |                                 t          d          D ]}                    |                                            |D ]}                    d            |D ]}|                                 t                     d S )Nc                 J    g | ]}                     j        f            S r  )r   r&  )rq  rQ  r    rn   s     r   rr  z-_TestQueue.test_task_done.<locals>.<listcomp>  s>     & & & <<t';5(<KK & & &r   r_   Tr2  )JoinableQueuerN  r   r   r   r   r!   )rn   workersr   rQ  r    s   `   @r   test_task_donez_TestQueue.test_task_done  s    ""$$& & & & &!!HH& & &  	 	AAHGGIIIIr 	 	AIIaLLLL

 	 	AIIdOOOO 	 	AFFHHHHEr   c                    t          j                    5  d}t          |dz   dd          5 }|                    d           d d d            n# 1 swxY w Y   t	          j        t          j                              5  	 t          |           n*# t          j
        $ r |                     d           Y nw xY wd d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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   DirsOnSysPathr@   getcwd
__import__r  r  rg   )rn   module_namer  s      r   test_no_import_lock_contentionz)_TestQueue.test_no_import_lock_contention  s   !! 	3 	3:KkE)3AAA 	Q    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ,RY[[99 3 33{++++} 3 3 3II 2 3 3 3 3 333 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s|   CACA	CA	(C>C BC$B74C6B77C:CC
	
CC
	CC"%C"c                    t          j                    }t          j                    }|                     t
          j        |j        dd           t          j                    |z
  }|                     |d           t          |           d S )NTg?r,   )
r   r   r   r   rj   r  r  r   assertGreaterEqualr!   )rn   r   r   deltas       r   test_timeoutz_TestQueue.test_timeout  st    !##  '-e<<<  5( 	u---Ar   c                 \   | j         dk    r-|                     d                    | j                               G d dt                    }t          j                                        5  |                                 }|                     |                       |                    d           | 	                    |
                    t
          j                             t          |           d d d            n# 1 swxY w Y   t          j                                        5  |                     d          }|                     |                       |                    d           	 |                     |                                d           n# t          $ r Y nw xY w| 	                    |
                    t
          j                             | 	                    |                                           t          |           d d d            d S # 1 swxY w Y   d S )	Nr   r   c                       e Zd Zd ZdS )F_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec                     t           r   )rB   r   s    r   r   zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__  s    $$r   Nrs   rt   ru   r   rX   r   r   NotSerializabler;    s#        % % % % %r   r>  Tr   r   r  )r   r   r   objecttestr   captured_stderrr   r   r   r   r  r!   ri   r  r   r  )rn   r>  r   s      r   "test_queue_feeder_donot_stop_onexcz-_TestQueue.test_queue_feeder_donot_stop_onexc  su   9##MM7>>tyIIJJJ	% 	% 	% 	% 	%f 	% 	% 	% \))++ 	 	

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

1
%%AEE//##$$$EE$KKK  A....&     OOAEE'*?E@@AAAOOAGGII&&&NNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sK   *B	C??DD(A	H!2(FH!
F(%H!'F((A,H!!H%(H%c                    | j         dk    r-|                     d                    | j                               G d dt                     G fddt          j        j                  }             }t          j        	                                5   |t	          j
                              }|                    |           |                    d           |                     |                    t          j        	                     d d d            n# 1 swxY w Y   |                     |j                   |                     |j                   d S )
Nr   r   c                       e Zd ZdZd Zd ZdS )K_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc                 "    d| _         d| _        d S 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=555r   c                     d| _         t          NT)rH  rB   r   s    r   r   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__  s    )-&$$r   N)rs   rt   ru   rv   r   r   rX   r   r   r>  rE    s8        ,,> > >% % % % %r   r>  c                   .    e Zd ZdZe fd            ZdS )E_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                 h    t          | t                    rt          |          rd|_        d S d S d S rK  )r   rB   rI  )r  r%  r>  s     r   _on_queue_feeder_errorz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_error  sO    q.11 @"388@;?C888@ @ @ @r   N)rs   rt   ru   rv   staticmethodrO  )r>  s   r   	SafeQueuerM    sE        CC@ @ @ @ \@ @ @r   rQ  )rq   Tr   )r   r   r   r?  r   r   r   r@  r   rA  get_contextr   r   r   r  rH  rI  )rn   rQ  not_serializable_objr   r>  s       @r   'test_queue_feeder_on_queue_feeder_errorz2_TestQueue.test_queue_feeder_on_queue_feeder_error  s    9##MM7>>tyIIJJJ	% 	% 	% 	% 	%f 	% 	% 	%	@ 	@ 	@ 	@ 	@ 	@ 	@.4 	@ 	@ 	@  /00\))++ 	B 	B	o9;;<<<AEE&''' EE$KKKOOAEE'*?E@@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	,>???,MNNNNNs   A;DD"Dc                    t          j                    t          j                    fD ]}|                                 |                     t
          d          5  |                    d           d d d            n# 1 swxY w Y   |                     t
          d          5  |                                 d d d            n# 1 swxY w Y   d S )Nz	is closedfoo)r   r   r)  r   assertRaisesRegexrC   r   r   r!  s     r   $test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptions.  s2    &((/*G*I*II 	 	AGGIII''
K@@  e              ''
K@@                		 	s$   A::A>	A>	 CC	C	N)rs   rt   ru   r  r	  r  r  r  r  r  r"  r&  r+  r4  r8  rB  rT  rX  rX   r   r   r  r    s        " " ["9 9 9v " " ["3 3 3j   [  8      [
  ,3 3 3*	 	 	  @$O $O $OL    r   r  c                        e Zd Zd Zd Zd ZdS )	_TestLockc                 x   |                                  }|                     |                                d           |                     |                    d          d           |                     |                                d            |                     t
          t          j        f|j                   d S NTF)Lockri   acquirereleaserj   rC   r  ThreadErrorrn   locks     r   	test_lockz_TestLock.test_lock;  s    yy{{...e,,e444...:y'<=t|LLLLLr   c                 \   |                                  }|                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d            |                     |                                d            |                     |                                d            |                     t
          t          f|j                   d S rK  )RLockri   r^  r_  rj   r  r0  ra  s     r   
test_rlockz_TestLock.test_rlockB  s    zz||..................><8$,GGGGGr   c                 b    |                                  5  	 d d d            d S # 1 swxY w Y   d S r   r]  r   s    r   test_lock_contextz_TestLock.test_lock_contextL  sw    YY[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   $((N)rs   rt   ru   rc  rf  ri  rX   r   r   rZ  rZ  9  sG        M M MH H H    r   rZ  c                   &    e Zd Zd Zd Zd Zd ZdS )_TestSemaphorec                    |                      dt          |           |                     |                                d           |                      dt          |           |                     |                                d           |                      dt          |           |                     |                    d          d           |                      dt          |           |                     |                                d            |                      dt          |           |                     |                                d            |                      dt          |           d S )Nr  Tr   r   F)r   r   ri   r^  r_  rn   sems     r   _test_semaphorez_TestSemaphore._test_semaphoreS  s2   ''9c:::---''9c:::---''9c:::U++U333''9c:::---''9c:::---''9c:::::r   c                 j   |                      d          }|                     |           |                     |                                d            |                     dt
          |           |                     |                                d            |                     dt
          |           d S )Nr  r  r_   )	Semaphorero  ri   r_  r   r   rm  s     r   test_semaphorez_TestSemaphore.test_semaphore`  s    nnQS!!!---''9c:::---''9c:::::r   c                 Z    |                      d          }|                     |           d S Nr  )BoundedSemaphorero  rm  s     r   test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphoreh  s/    ##A&&S!!!!!r   c                 F   | j         dk    r-|                     d                    | j                              |                     d          }t	          |j                  }|                      |d          d           |                     |j        d           |                      |dd           d           |                     |j        d           |                      |dt                    d           |                     |j        d           |                      |dt                    d           |                     |j        t                     |                      |t                    d           |                     |j        t                     d S )Nr   r   r   Fr2   Tr   )r   r   r   rq  r{   r^  ri   r   r~   r  r  r  )rn   rn  r^  s      r   r8  z_TestSemaphore.test_timeoutp  sw   9##MM7>>tyIIJJJnnQ,,///$$W_c:::--u555$$W_c:::115999$$W_a888x00%888$$W_h???222E:::$$W_h?????r   N)rs   rt   ru   ro  rr  rv  r8  rX   r   r   rk  rk  Q  sU        ; ; ;; ; ;" " "@ @ @ @ @r   rk  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dS )_TestConditionNc                     |                                  |                                 |                    |           |                                 |                                 d S r   )r^  r_  r0   )r   condsleepingwokenr4   s        r   r  z_TestCondition.f  sQ    		'r   c                     t          d          D ]>}	  |            |k    r n,n# t          $ r Y  nw xY wt          j        t                     ?t          j        t                     |                     ||           d S Nr2  )rN  r   r   r
  rJ  r   )rn   r}   r   rQ  s       r   assertReachesEventuallyz&_TestCondition.assertReachesEventually  s    r 	 	A466U??E #&   Ju
5''t44444s   $
22c                 0   | j         dk    r	 |j                                        |j                                        z
  }|                     |d           |                     |j                                        d           d S # t          $ r Y d S w xY wd S )Nr   r   )r   _sleeping_countr   _woken_countri   _wait_semaphorer   )rn   r{  sleeperss      r   check_invariantz_TestCondition.check_invariant  s    9## 0::<< -7799:  1---  !5!?!?!A!A1EEEEE&    $#s   A6B 
BBc                    |                                  }|                     d          }|                     d          }|                     | j        |||f          }d|_        |                                 |                     |j                   t          j	        | j        |||f          }d|_        |                                 |                     |j                   |
                                 |
                                 t          j        t                     |                     dt          |           |
                                 |                                 |                                 t          j        t                     |                     dt          |           |
                                 |                                 |                                 t          j        t                     |                     dt          |           |                     |           |                                 d S )Nr   r   Tr   r  )	Conditionrq  r   r  r   r   r^  r   r  r  r^  r   r
  rJ  r   r   notifyr_  r  )rn   r{  r|  r}  r   s        r   test_notifyz_TestCondition.test_notify  s   ~~>>!$$q!!LLdHe-DLEE				DF$%1HIII				 	 	
5''9e<<< 	 	
5''9e<<< 	 	
5''9e<<< 	T"""	r   c                    |                                  }|                     d          }|                     d          t          d          D ]}|                     | j        ||t
          f          }d|_        |                                 |                     |j	                   t          j        | j        ||t
          f          }d|_        |                                 |                     |j	                   t          d          D ]}|                                 t          d          D ]}                                 |                     dt                     |                     |           t          d          D ]}|                     | j        ||f          }d|_        |                                 |                     |j	                   t          j        | j        ||f          }d|_        |                                 |                     |j	                   t          d          D ]}|                                 t!          j        t$                     |                     dt                     |                                 |                                 |                                 |                     fdd           |                     |           d S )Nr   r  r   Tr  c                  "    t                     S r   r   r}  s   r   <lambda>z0_TestCondition.test_notify_all.<locals>.<lambda>      Yu-=-= r   )r  rq  rN  r   r  r  r   r   r^  r   r  r  r^  r   r   r  r   r
  rJ  
notify_allr_  r  rn   r{  r|  rQ  r   r   r}  s         @r   test_notify_allz_TestCondition.test_notify_all  s   ~~>>!$$q!! q 	$ 	$ADF#'5("C  E EAAHGGIIIOOAF### '+Xuh&GI I IAAHGGIIIOOAF#### q 	 	A q 	 	AMMOOOO''9e<<< 	T""" q 		$ 		$ADF$%1HIIAAHGGIIIOOAF### dHe5LMMMAAHGGIIIOOAF#### q 	 	A 	
5''9e<<< 	 	$$%=%=%=%=qAAA 	T"""""r   c                    |                                  }|                     d          }|                     d          t          d          D ]}|                     | j        ||f          }d|_        |                                 |                     |j                   t          j
        | j        ||f          }d|_        |                                 |                     |j                   t          d          D ]}|                                 t          j        t                     |                     dt                      |                                 |                    d           |                                 |                     fdd           |                                 |                    d	           |                                 |                     fd
d           |                                 |                    d           |                                 |                     dt                      |                     |           d S )Nr   r  r   Tr  r  )nc                  "    t                     S r   r  r  s   r   r  z._TestCondition.test_notify_n.<locals>.<lambda>1  r  r   r_   c                  "    t                     S r   r  r  s   r   r  z._TestCondition.test_notify_n.<locals>.<lambda>8  r  r   )r  rq  rN  r   r  r   r   r^  r   r  r  r^  r   r
  rJ  r   r   r  r_  r  r  r  s         @r   test_notify_nz_TestCondition.test_notify_n  s6   ~~>>!$$q!! q 		$ 		$ADF$%1HIIAAHGGIIIOOAF### dHe5LMMMAAHGGIIIOOAF#### q 	 	A 	
5''9e<<< 	a 	$$%=%=%=%=qAAA 	a$$%=%=%=%=qAAA 	a''9e<<< 	T"""""r   c                 2   |                                  }t          |j                  }|                                  |t                    }|                                 |                     |d           |                     |j        t                     d S rG  )	r  r{   r0   r^  r  r_  ri   r   r~   )rn   r{  r0   r   s       r   r8  z_TestCondition.test_timeoutD  s{    ~~TY''d8nne$$$$$T\8<<<<<r   c                     |5  d_         |                                 |                    fd          }|rj         dk    rt          j        d           d d d            d S # 1 swxY w Y   d S )Nr   c                       j         dk    S r^   r   states   r   r  z0_TestCondition._test_waitfor_f.<locals>.<lambda>R      EKN r   r_   r   )r   r  wait_forrx   rb  )r   r{  r  rT  s     ` r   _test_waitfor_fz_TestCondition._test_waitfor_fM  s     	 	EKKKMMM]]#:#:#:#:;;F U[A--	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA&&A*-A*zneeds sharedctypesc                    |                                  }|                     dd          |                     | j        |f          }d|_        |                                 |5  |                    fd          }|                     |           |                     j	        d           d d d            n# 1 swxY w Y   t          d          D ]T}t          j        d           |5  xj	        d	z  c_	        |                                 d d d            n# 1 swxY w Y   Ut          |           |                     |j        d           d S )
NrQ  r?   r   Tc                       j         dk    S Nr   r  r  s   r   r  z-_TestCondition.test_waitfor.<locals>.<lambda>a  r  r   r   r_   ro  r   )r  r   r   r  r   r   r  r   ri   r   rN  r   r
  r  r$   r   )rn   r{  r   rT  rQ  r  s        @r   test_waitforz_TestCondition.test_waitforV  s    ~~

3##LL 4D%=LII				 	- 	-]]#:#:#:#:;;FOOF###U[!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 q 	 	AJt  q                	QQ'''''s%   'A	B<<C C .%DD#	&D#	c                 .   |                                  |5  d}t          j                    }|                    fd|          }t          j                    |z
  }|s|dz  |cxk     r	|dz  k     r
n nd|_        d d d            d S # 1 swxY w Y   d S )Nr,   c                       j         dk    S r^   r  r  s   r   r  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>t  r  r   r   g333333?rX  T)r_  r   r   r  r   )r   r{  r  successrn  rU  dtrT  s     `     r   _test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_fn  s     	% 	%H!!B]]#:#:#:#:H]MMF!!B&B %hnrCCCCHtOCCCCC $	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A%B

BBc                    |                                  }|                     dd          }|                     dd          }|                     d          }|                     | j        ||||f          }d|_        |                                 |                     |                    t          j
                             t          d          D ]T}t          j        d           |5  |xj        d	z  c_        |                                 d d d            n# 1 swxY w Y   Ut!          |           |                     |j                   d S )
NrQ  r   Fr   Tr   r  ro  r   )r  r   rq  r   r  r   r   r   r^  r   r  rN  r   r
  r   r  r$   )rn   r{  r  r  rn  r   rQ  s          r   test_waitfor_timeoutz#_TestCondition.test_waitfor_timeoutz  sq    ~~

3""**S%((nnQLL <#UGS9  ; ;				G,@AABBB q 	 	AJt  q                	Q&&&&&s   +%DD 	#D 	c                     |5  |                                  d d d            n# 1 swxY w Y   t          j        d           |!t          j        |t
          j                   d S d S r   )r  r   r
  r@   r@  r4  r  )r   r   r   s      r   _test_wait_resultz _TestCondition._test_wait_result  s     	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
1?GC''''' ?s   $((c                    t          | t                    r$t          j        dk    rt	          j                    }nd }|                                 }|5  |                     |                    d                     |                     |                    d                     | 	                    | j
        ||f          }|                                 |                     |                    d                     |!|                     t          |j        d           |                                 d d d            d S # 1 swxY w Y   d S )Nr.   r   r,   r   <   )r   ProcessesMixinrx   ry   r@   r   r  r   r0   r   r  r   r   rj   KeyboardInterruptr   )rn   r   r   r   s       r   test_wait_resultz_TestCondition.test_wait_result  sY   dN++ 	0G0G)++CCCNN 	 	QVVAYY'''QVVC[[)))D$:!SJJAGGIIIOOAFF2JJ'''!!"3QVR@@@FFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C"EEEr   )rs   rt   ru   r  r  r  r  r  r  r  r8  r  rD   r  HAS_SHAREDCTYPESr  r  r  r  r  rX   r   r   ry  ry    sK          [	5 	5 	5	 	 	+ + +Z<# <# <#|0# 0# 0#d= = =   [ X)+?@@( ( A@(. 	% 	% [	% X)+?@@' ' A@'. ( ( [(    r   ry  c                   2    e Zd Zed             Zd ZddZdS )
_TestEventc                 `    t          j        t                     |                                 d S r   )r   r
  r  r_  rY  s     r   _test_eventz_TestEvent._test_event  s#    
8		r   c                    |                                  }t          |j                  }|                     |                                d           |                      |d          d           |                     |j        d           |                      |t                    d           |                     |j        t                     |                                 |                     |                                d           |                      |            d           |                     |j        d           |                      |t                    d           |                     |j        d           |	                                 | 
                    | j        |f          }d|_        |                                 |                      |            d           |                                 d S )NFr2   Tr   )r  r{   r0   ri   r  r   r~   r  r_  r  r   r  r   r   r   )rn   rZ  r0   r   s       r   
test_eventz_TestEvent.test_event  s   

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

9##T%[[*@AAAIIKKKT%[[*>???KKMMMT%[[*@AAAAAY)##T%[[*UVVVIIKKKT%[[*UVVVVV $#r   )r  N)rs   rt   ru   r  r  r  r  rX   r   r   r  r    sW          [! ! !FW W W W W Wr   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
_DummyListc                     t           j                            t          j        d                    }t          j                    }|                     ||f           d| j        d<   d S )NrQ  r   )r   heapBufferWrapperstructcalcsizer]  __setstate__
_lengthbuf)rn   wrapperrb  s      r   r   z_DummyList.__init__  sZ    !&44V_S5I5IJJ#%%7D/***r   c                     |\  | _         | _        | j                                                             d          | _        d S )NrQ  )_wrapper_lockcreate_memoryviewcastr  )rn   r  s     r   r  z_DummyList.__setstate__  s7    &+#
-99;;@@EEr   c                     | j         | j        fS r   )r  r  r   s    r   __getstate__z_DummyList.__getstate__  s    tz**r   c                 p    | j         5  | j        dxx         dz  cc<   d d d            d S # 1 swxY w Y   d S Nr   r   r  r  )rn   _s     r   rS  z_DummyList.append  s    Z 	$ 	$OA!#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   +//c                 ^    | j         5  | j        d         cd d d            S # 1 swxY w Y   d S r  r  r   s    r   __len__z_DummyList.__len__  sx    Z 	& 	&?1%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   "&&N)rs   rt   ru   r   r  r  rS  r  rX   r   r   r  r    sb          F F F+ + +$ $ $& & & & &r   r  c                  .    t          j        d           d S )Nro  r&  rX   r   r   _waitr    s    Jtr   c                   8    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	S )Bunchz
    A bunch of threads.
    Fc                    || _         || _        || _        |                                | _        |                                | _        |                                | _        |s| j                                         g }t          |          D ]M}|
                    | j                  }d|_        |                                 |                    |           Nd }	t          j        | |	|          | _        dS )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                 8    | D ]}|                                  d S r   )r   )r   r   s     r   finalizez Bunch.__init__.<locals>.finalize%  s*       r   N)r  rO   r  	DummyListstartedfinishedr  	_can_exitr_  rN  r   taskr   r   rS  rf  r  
_finalizer)
rn   	namespacer  rO   r  wait_before_exitr   rQ  r   r  s
             r   r   zBunch.__init__  s     	 **,,!++--"** 	!N   q 	 	A!!!33AAHGGIIINN1	 	 	 "*47CCr   c                    t          j                    }| j                            |           	  | j        | j          | j                            |           | j                            d           | j        	                                sJ d S # | j                            |           | j                            d           | j        	                                sJ w xY w)N   )
r@   r   r  rS  r  rO   r  r  r0   r  rn   r   s     r   r  z
Bunch.task+  s    ikkC   	+DFDIM  %%%N###>((******* M  %%%N###>((*********s   B AC c                     t          | j                  | j        k     r-t                       t          | j                  | j        k     +d S d S r   )r   r  r  r  r   s    r   wait_for_startedzBunch.wait_for_started5  sG    $,$&((GGG $,$&((((((r   c                     t          | j                  | j        k     r-t                       t          | j                  | j        k     +d S d S r   )r   r  r  r  r   s    r   wait_for_finishedzBunch.wait_for_finished9  sG    $-  46))GGG $-  46))))))r   c                 8    | j                                          d S r   )r  r_  r   s    r   	do_finishzBunch.do_finish=  s    r   c                 .    |                                   d S r   )r  r   s    r   r   zBunch.close@  s    r   Nr  )
rs   rt   ru   rv   r   r  r  r  r  r   rX   r   r   r  r    s         D D D D8+ + +          r   r  c                       e Zd Zd Zd ZdS )
AppendTruec                     || _         d S r   )r%  )rn   r%  s     r   r   zAppendTrue.__init__E  s    r   c                 :    | j                             d           d S rK  )r%  rS  r   s    r   r   zAppendTrue.__call__G  s    r   Nr   rX   r   r   r  r  D  s2              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dS )_TestBarrierz$
    Tests for Barrier objects.
    r   g      >@c                 R    |                      | j        | j                  | _        d S )Nr   )Barrierrw  defaultTimeoutbarrierr   s    r   setUpz_TestBarrier.setUpR  s"    ||DFD4G|HHr   c                 F    | j                                          d | _         d S r   )r  abortr   s    r   tearDownz_TestBarrier.tearDownU  s!    r   c                     | j         dk    rg S | j         dk    r| j                                        S t                      S )Nr   r   )r   r   r   r  r   s    r   r  z_TestBarrier.DummyListY  s?    9	!!IY)##<$$&&&<<r   c                     t          | ||| j        dz
            }	  ||  |                                 |                                 d S # |                                 w xY wr   )r  rw  r  r   )rn   r  rO   r   s       r   run_threadsz_TestBarrier.run_threadsa  s`    $4**	AtHH!!!GGIIIIIAGGIIIIs   A A!c                    |j         }|| j        k    sJ t          |          D ]}|d                             d           t	          |d                   ||z  k    sJ |                                 |d                             d           t	          |d                   |dz   |z  k    sJ |                                 	 |j        dk    sJ n# t          $ r Y nw xY w|j        rJ d S )Nr   Tr   )	partiesrw  rN  rS  r   r0   	n_waitingr   broken)r   r  resultsr  mrQ  s         r   	multipassz_TestBarrier.multipassi  s   OCEzzzzq 	 	AAJd###wqz??a!e++++LLNNNAJd###wqz??q1uk1111LLNNNN	$)))))" 	 	 	D	>!!!!!s   C 
C C r   c                     |                                  |                                  g}|                     | j        | j        ||f           dS )z;
        Test that a barrier is passed in lockstep
        N)r  r   r  r  )rn   passesr  s      r   test_barrierz_TestBarrier.test_barrierz  sI     >>##T^^%5%56$,)HIIIIIr   c                 ,    |                      d          S )zC
        Test that a barrier works for 10 consecutive runs
        r2  )r
  r   s    r   test_barrier_10z_TestBarrier.test_barrier_10  s       $$$r   c                 X    |                                 }|                    |           d S r   )r0   r   )r   r  r    r   s       r   _test_wait_return_fz _TestBarrier._test_wait_return_f  s"    llnn		#r   c                 $   |                                  |                     | j        | j        f           fdt	          | j                  D             }|                     |                    d          d           t                     dS )z9
        test the return value from barrier.wait
        c                 8    g | ]}                                 S rX   r  )rq  rQ  r    s     r   rr  z1_TestBarrier.test_wait_return.<locals>.<listcomp>  s!    6661599;;666r   r   r   N)	r   r   r  r  rN  rw  ri   countr!   )rn   r  r    s     @r   test_wait_returnz_TestBarrier.test_wait_return  s     

1DL%3HIII6666df666q))1---Er   c                 b    |                                  t          |          dk    rt          d S r   )r0   r   r0  )r   r  r  s      r   _test_action_fz_TestBarrier._test_action_f  s.    w<<1 r   c                     |                                  }|                     | j        t          |                    }|                     | j        ||f           |                     t          |          d           dS )z,
        Test the 'action' callback
        )r  r   N)r  r  rw  r  r   r  ri   r   )rn   r  r  s      r   test_actionz_TestBarrier.test_action  sr     .."",,tvj.A.A,BB,w.@AAAWq)))))r   c                 B   	 |                                 }|| j        dz  k    rt          |                                  |                    d           d S # t          j        $ r |                    d           Y d S t          $ r |                                 Y d S w xY wNr  T)r0   rw  r0  rS  r  BrokenBarrierErrorr  )r   r  results1results2rQ  s        r   _test_abort_fz_TestBarrier._test_abort_f  s    		ACE1H}}""LLNNNOOD!!!!!+ 	" 	" 	"OOD!!!!!! 	 	 	MMOOOOOO	s   AA $B=BBc                 v   |                                  }|                                  }|                     | j        | j        ||f           |                     t          |          d           |                     t          |          | j        dz
             |                     | j        j                   dS )zK
        Test that an abort will put the barrier in a broken state
        r   r   N)	r  r   r  r  ri   r   rw  r   r  )rn   r  r  s      r   
test_abortz_TestBarrier.test_abort  s     >>##>>##+,(;	= 	= 	=X***Xq111+,,,,,r   c                    |                                 }|| j        dz  k    rO|j        | j        dz
  k     r't          j        d           |j        | j        dz
  k     '|                                 nU	 |                                  |                    d           n*# t          j        $ r |                    d           Y nw xY w|                                  |                    d           d S )Nr  r   rt  T)	r0   rw  r  r   r
  resetrS  r  r  )r   r  r  r  results3rQ  s         r   _test_reset_fz_TestBarrier._test_reset_f  s    LLNNq==#ceAg--
5!!! #ceAg--MMOOOO&%%%%/ & & &%%%%%& 	s   3)B $CCc                    |                                  }|                                  }|                                  }|                     | j        | j        |||f           |                     t          |          d           |                     t          |          | j        dz
             |                     t          |          | j                   dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   r   N)r  r   r"  r  ri   r   rw  )rn   r  r  r!  s       r   
test_resetz_TestBarrier.test_reset  s     >>##>>##>>##+,(HE	G 	G 	GX***Xq111X/////r   c                 "   	 |                                 }|| j        dz  k    rt          |                                  |                    d           nI# t          j        $ r |                    d           Y n#t          $ r |                                 Y nw xY w|                                 | j        dz  k    r|                                 |                                  |                                  |                    d           d S r  )r0   rw  r0  rS  r  r  r  r   )r   r  barrier2r  r  r!  rQ  s          r   _test_abort_and_reset_fz$_TestBarrier._test_abort_and_reset_f  s    		ACE1H}}""LLNNNOOD!!!!+ 	" 	" 	"OOD!!!!! 	 	 	MMOOOOO	
 ==??ceQh&&MMOOOs   AA $B;BBc                    |                                  }|                                  }|                                  }|                     | j                  }|                     | j        | j        ||||f           |                     t          |          d           |                     t          |          | j        dz
             |                     t          |          | j                   dS )zF
        Test that a barrier can be reset after being broken.
        r   r   N)r  r  rw  r   r'  r  ri   r   )rn   r  r  r!  r&  s        r   test_abort_and_resetz!_TestBarrier.test_abort_and_reset  s     >>##>>##>>##<<''5,(HhO	Q 	Q 	QX***Xq111X/////r   c                     |                                 }|| j        dz  k    rt          j        d           	 |                     d           d S # t          j        $ r |                    d           Y d S w xY w)Nr        ?r  T)r0   rw  r   r
  r  r  rS  r   r  r  rQ  s       r   _test_timeout_fz_TestBarrier._test_timeout_f  s    LLNNq==JsOOO	!LL+ 	! 	! 	!NN4      	!s   A $A76A7c                     |                                  }|                     | j        | j        |f           |                     t          |          | j        j                   dS )z$
        Test wait(timeout)
        N)r  r   r-  r  ri   r   r  )rn   r  s     r   r8  z_TestBarrier.test_timeout  sZ     ..""-g/FGGGWt|';<<<<<r   c                     |                     | j                  }|| j        dz  k    rt          j        d           	 |                                  d S # t
          j        $ r |                    d           Y d S w xY w)Nr  r+  T)r0   r  rw  r   r
  r  r  rS  r,  s       r   _test_default_timeout_fz$_TestBarrier._test_default_timeout_f  s    LL+,,q==JsOOO	!LLNNNNN+ 	! 	! 	!NN4      	!s   A $A<;A<c                     |                      | j        d          }|                                 }|                     | j        ||f           |                     t          |          |j                   dS )z4
        Test the barrier's default timeout
        r  r   N)r  rw  r  r   r0  ri   r   r  )rn   r  r  s      r   test_default_timeoutz!_TestBarrier.test_default_timeout   sl     ,,tvs,33..""57IJJJWw77777r   c                     |                      d          }|                                 |                                 d S r   )r  r0   )rn   r   s     r   test_single_threadz_TestBarrier.test_single_thread)  s/    LLOO		r   c                     t          |          D ]E}|                                 |5  |                    |           d d d            n# 1 swxY w Y   Fd S r   )rN  r0   r   )r   r  r	  connrb  rQ  s         r   _test_thousand_fz_TestBarrier._test_thousand_f.  s    v 	 	ALLNNN  		!              	 	s   A

A	A	c                 H   | j         dk    r-|                     d                    | j                              d}|                                 }|                     d          \  }}t          | j                  D ]U}|                     | j        | j	        |||f          }|
                                 |                     |j                   Vt          |          D ]A}t          | j                  D ]*}|                     |                                |           +Bd S )Nr   r     Fr   )r   r   r   r]  r   rN  rw  r   r7  r  r   r^  r   ri   r   )rn   r	  rb  r6  r  jr   rQ  s           r   test_thousandz_TestBarrier.test_thousand5  s   9	!!MM7>>tyIIJJJyy{{99U++jtv 	$ 	$AD$9!%vz4 H  J JAGGIIIOOAF####v 	1 	1A46]] 1 1  a00001	1 	1r   Nr   )rs   rt   ru   rv   rw  r  r  r  r  r   r  r  r
  r  r  r  r  r  r  r  r"  r$  r'  r)  r-  r8  r0  r2  r4  r7  r;  rX   r   r   r  r  K  s
         	
ANI I I          " " [" J J J J% % %   [     [
* * * 
 
 [

- 
- 
-   ["0 0 0   [*0 0 0 ! ! [!= = = ! ! [!8 8 8  
   [1 1 1 1 1r   r  c            	       z    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dS )
_TestValuer  )rQ  i  i^  )dg      @g      )hi   )r                   r   xyc                 B    t           s|                     d           d S d S Nz%requires multiprocessing.sharedctypesr  r   r   s    r   r  z_TestValue.setUpU  0     	CMMABBBBB	C 	Cr   c                 V    t          || j                  D ]\  }}|d         |_        d S rt  )zipcodes_valuesr   )r   valuessvcvs       r   r   z_TestValue._testY  s9    &#"233 	 	FB!uBHH	 	r   Fc                     |r fd j         D             }n fd j         D             }t          | j                   D ]&\  }}                     |j        |d                    '                      j        |f          }d|_        |                                 |                                 t          | j                   D ]&\  }}                     |j        |d                    'd S )Nc                 D    g | ]\  }}}                     ||          S rX   )RawValuerq  coder   r  rn   s       r   rr  z)_TestValue.test_value.<locals>.<listcomp>a  s=     ? ? ?($q mmD%00 ? ? ?r   c                 D    g | ]\  }}}                     ||          S rX   )r   rR  s       r   rr  z)_TestValue.test_value.<locals>.<listcomp>d  s=     ? ? ?($q jju-- ? ? ?r   r   r   Tr  )	rK  rJ  ri   r   r   r   r   r   r   )rn   rawrL  rM  rN  r  s   `     r   
test_valuez_TestValue.test_value_  s'    	?? ? ? ?,0,=? ? ?FF? ? ? ?,0,=? ? ?F &$"344 	. 	.FBRXr!u----||4:VI|>>

		&$"344 	. 	.FBRXr!u----	. 	.r   c                 2    |                      d           d S NT)rU  )rV  r   s    r   test_rawvaluez_TestValue.test_rawvaluer  s    D!!!!!r   c                    |                      dd          }|                                }|                                }|                      ddd           }|                                }|                                }|                                 }|                      dd|          }|                                }	|                                }
|                     ||	           |                      ddd          }|                     t          |d                     |                     t          |d                     |                     t          | j         ddd           | 	                    dd          }|                     t          |d                     |                     t          |d                     d S )NrQ  r   rb  Fget_lockget_objnavalue)
r   r\  r]  r]  ri   r   r3  rj   rB   rQ  )rn   val1lock1obj1val2lock2obj2rb  val3lock3obj3arr4arr5s                r   test_getobj_getlockz_TestValue.test_getobj_getlocku  s}   zz#q!!||~~zz#qtz,,||~~yy{{zz#qtz,,||~~u%%%zz#quz--z22333y11222.$*c19MMM}}S!$$z22333y1122222r   Nr  )rs   rt   ru   r   r   rK  r  r  r   rV  rY  rj  rX   r   r   r=  r=  I  s        "M 		eeCjj%%**%
LC C C   [
. . . .&" " "3 3 3 3 3r   r=  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dS )
_TestArrayr  c                 x    t          dt          |                    D ]}||xx         ||dz
           z  cc<   d S r   )rN  r   )r   seqrQ  s      r   r  z_TestArray.f  sK    q#c((## 	 	AFFFc!A#hFFFF	 	r   Nzrequires _ctypesFc                 D   g d}|r|                      d|          }n|                     d|          }|                     t          |          t          |                     |                     |d         |d                    |                     t	          |dd                   t	          |dd                              t          j        dg d          x|dd<   |dd<   |                     t	          |d d                    |           |                     |           |                     | j        |f	          }d
|_        |	                                 |
                                 |                     t	          |d d                    |           d S )N)
i  ir  i  i5        i$  i  i  i?  rQ  r  r  r  )r   r  r  r_   r_   r  r   T)RawArrayArrayri   r   r   arrayr  r   r   r   r   )rn   rU  rn  arrr   s        r   
test_arrayz_TestArray.test_array  sp   @@@ 	'--S))CC**S#&&CS3s88,,,QQ(((c!A#hc!A#h888#k#|||<<<AaC3qs8c!!!fs+++sLLcVL44					c!!!fs+++++r   c           	         d}t          d          D ]}|                     d|          }|                     t          |          |           |                     t	          |          dg|z             t          d          |d d <   |                     t	          |          t	          t          d                               ~d S )Nr2  r  rQ  r   )rN  rs  ri   r   r   )rn   sizer  ru  s       r   test_array_from_sizez_TestArray.test_array_from_size  s    
 q 	 	A**S$''CSXXt,,,T#YYd
3332YYCFT#YYU2YY888	 	r   c                 2    |                      d           d S rX  )rv  r   s    r   test_rawarrayz_TestArray.test_rawarray  s    D!!!!!r   c                 |   |                      dt          t          d                              }|                                }|                                }|                      dt          t          d                    d           }|                                }|                                }|                                 }|                      dt          t          d                    |          }|                                }	|                                }
|                     ||	           |                      dt          d          d          }|                     t          |d                     |                     t          |d                     | 	                    t          | j         dt          d          d           |                     dt          d                    }|                     t          |d                     |                     t          |d                     d S )NrQ  r2  r[  Fr\  r]  notalock)rs  r   rN  r\  r]  r]  ri   r   r3  rj   rB   rr  )rn   arr1r`  ra  arr2rc  rd  rb  arr3rf  rg  rh  ri  s                r   test_getobj_getlock_objz"_TestArray.test_getobj_getlock_obj  s   zz#tE"II//||~~zz#tE"IITz::||~~yy{{zz#tE"IITz::||~~u%%%zz#uRyyuz55z22333y11222.*c599: 	 	G 	G 	G }}S%)),,z22333y1122222r   r  )rs   rt   ru   r   r  r  rD   rw   r:   rv  ry  r{  r  rX   r   r   rl  rl    s        "M  [ X_Ud]$677, , , 87,0 X_Ud]$677  87 X_Ud]$677" " 87" X_Ud]$6773 3 873 3 3r   rl  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )_TestContainersr   c                    |                      t          t          d                              }|                     |d d          t          t          d                               |                                  }|                     |d d          g            |                    t          t          d                               |                     |d d          t          t          d                               |                     |d         d           |                     |dd         g d           |dz  }|                     |d d          g d           |                     |ddgz   g d           |                     |d d          t          t          d                               ||g}|                      |          }|                     d |D             g d	g dg           |                      |g          }|                    d
           |                     |d         d d          g d           d S )Nr2  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  c                 "    g | ]}|d d          S r   rX   )rq  elements     r   rr  z-_TestContainers.test_list.<locals>.<listcomp>  s     )))GWQQQZ)))r   )
r   r   r  r  r_   r   r  r  r  	   r  r   )r   r   r  r  r_   r   r  r  r  r  r  )r   rN  ri   extendrS  )rn   r   r   r>  r  r  s         r   	test_listz_TestContainers.test_list  s   IId599oo&&111tE"II///IIKK111r"""	eAhh   111tE!HH~~...1q!!!1R4'''***	Q111===>>>aV%I%I%IJJJ111tE"II///FIIaLL))q)))+++-K-K-KL	 	 	
 IIqcNN	1aaa"I"I"IJJJJJr   c                    |                      t          t          d                              }t          |          }|                     t          |          t          t          d                               |                     t          |          g            t          |          }d|d<   |                     t	          |          d           d S )Nr2  r%  r   )r   rN  r  ri   next)rn   r   its      r   test_list_iterz_TestContainers.test_list_iter	  s    IId599oo&&!WWb4b		??333b2&&&!WW!b3'''''r   c                                            fdt          d          D                       }                     d |D             g dgdz             d|d         d<                        |d         d d          g d           t          d	d          D ](}                     ||         d d          g d           )                     |d	                                         d
                                t	          |d	                   d
           t          ddd
          D ]+}                     t	          ||                   d           ,~                                  }|                    |           ~d S )Nc                 T    g | ]$}                     t          d                     %S )r  )r   rN  )rq  _irn   s     r   rr  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>	  s+    >>>rtyyq**>>>r   r  c                 "    g | ]}|d d          S r   rX   )rq  inners     r   rr  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>	  s     222u%(222r   )r   r   r  7   r   r?   )r   r   r  r   r  )r   rN  ri   popr   rS  )rn   r   rQ  r   s   `   r   test_list_proxy_in_listz'_TestContainers.test_list_proxy_in_list	  su   II>>>>U1XX>>>??22222YYYK!ODDD!R1aaa***---q! 	1 	1AQqT!!!Wiii00001Q'''QqTA&&&q!Q 	+ 	+AS1YY****IIKK	AAr   c                 z   |                                  }t          t          dd                    }|D ]}t          |          ||<   |                     |                                t          d |D                                  |                     t          |                                          |           |                     t          |                                          d |D                        |                     t          |	                                          d |D                        d S )NA   F   c              3   8   K   | ]}|t          |          fV  d S r   chrrq  rQ  s     r   	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>(	  s,      'E'ECFF'E'E'E'E'E'Er   c                 ,    g | ]}t          |          S rX   r  r  s     r   rr  z-_TestContainers.test_dict.<locals>.<listcomp>*	  s    -F-F-Fc!ff-F-F-Fr   c                 0    g | ]}|t          |          fS rX   r  r  s     r   rr  z-_TestContainers.test_dict.<locals>.<listcomp>+	  s"    ,J,J,JQaQ[,J,J,Jr   )
dictr   rN  r  ri   r   sortedkeysrL  r  )rn   r>  indicesrQ  s       r   	test_dictz_TestContainers.test_dict#	  s   IIKKuR}}%% 	 	Aq66AaDD4'E'EW'E'E'E#E#EFFF))7333

++-F-Fg-F-F-FGGG		**,J,J',J,J,JKKKKKr   c                    |                                  }t          t          dd                    }|D ]}t          |          ||<   t	          |          }|                     t          |          |           |                     t          |          g            t	          |          }|                                 |                     t          t          |           d S )Nr  r  )
r  r   rN  r  r  ri   r  rj   r0  r  )rn   r>  r  rQ  r  s        r   test_dict_iterz_TestContainers.test_dict_iter-	  s    IIKKuR}}%% 	 	Aq66AaDD!WWb7+++b2&&&!WW				,b11111r   c                 "   |                      dd          }|                      dd          }|                      ||          }|                     |d         d           |                     |d	         d         d           d
|d	         d<   |                     |d         d
           |                     |d	         d         d
           d|d	         d<   |                     |d         d           |                     |d	         d         d           ~~|                     |d         d         d           d|d	         d<   |                     |d	         d         d           |d         }|d	         }d|d<   |                     |d         d           |                     |d	         d         d           |                                 |                     t          |          d           |                     |d         d           |                     |d         d           |                     ||g          }d|d         d<   |                     |d         d           |                     |d         d         d           ~~|                     |d         d         d           |                     ddg|g          }|                     |d         t                     |                     |d         d         d         d           d S )Nr  r_   )ferretshamstersr2  r  )waterfeed)petssuppliesr  r  r   blanketsr  r  r     r   r  r   marmotsX   c   r?   r  )r  ri   r  r   r   r   )rn   r  r  r>  louters         r   test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nested:	  s   yyQy//992A9..II4(I33'*B///:w/444$%*j!*-q111:z2A666!"*g'*A...:w/33369-q111$&*j!:z2B777yZ='*A...:w/333				Q###'*A...j)1---IItX&''!Yi!,,,1i!,,,1i!,,,		B8Q-((eAh---r2v.22222r   c                    |                                  }|                    |                                            |d                             d           |                     |d                                         d           |                                 }|                                 |d<   |d                             d           |                     |d                                         d           d S )Nr   {     )r   rS  r   r   ri   r   r  r   s      r   test_nested_queuez!_TestContainers.test_nested_queueh	  s    IIKK		!1S)))IIKKzz||!	!1S)))))r   c                 t   |                                  }d|_        d|_        d|_        |                     |j        |j        fd           |`|                     t          |          d           |                     t          |d                     |                     t          |d                      d S )NBobBuilderhidden)r  r  zNamespace(name='Bob')r)   job)	Namespacer)   r  _hiddenri   rl   r   r3  )rn   r  s     r   test_namespacez_TestContainers.test_namespacer	  s    NN	!&!%*<===EQ!89996**+++GAu---.....r   N)rs   rt   ru   r   r  r  r  r  r  r  r  r  rX   r   r   r  r    s         MK K K>( ( (  (L L L2 2 2,3 ,3 ,3\* * *	/ 	/ 	/ 	/ 	/r   r  r2   c                 4    t          j        |           | | z  S r   r&  )rC  r0   s     r   sqrr  	  s    JtQ3Jr   c                     | |z  S r   rX   rC  rD  s     r   mulr  	      Q3Jr   c                 N    t          j        |            t          ddz            )NrC  i   )r   r
  rC   r/   s    r   raise_large_valuerrorr  	  s$    Jt
S7]
#
##r   c                     | S r   rX   rC  s    r   identityr  	  s    Hr   c                       e Zd ZdZd Zd ZdS )CountedObjectr   c                 V    | xj         dz  c_         t                              |           S r   )n_instancesr?  __new__r'  s    r   r  zCountedObject.__new__	  s$    1~~c"""r   c                 @    t          |           xj        dz  c_        d S r   )r  r  r   s    r   __del__zCountedObject.__del__	  s"    T

!#r   N)rs   rt   ru   r  r  r  rX   r   r   r  r  	  s7        K# # #$ $ $ $ $r   r  c                       e Zd ZdS )SayWhenErrorNrs   rt   ru   rX   r   r   r  r  	  s          r   r  c              #      K   |dk    rt          d          t          |           D ]}||k    rt          d          |V  d S )Nr?   zSomebody said when)r  rN  )totalwhenrQ  s      r   exception_throwing_generatorr  	  s`      rzz/0005\\  993444 r   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                 |    t                                                       |                     d          | _        d S r^   )super
setUpClassPoolpoolr   	__class__s    r   r  z_TestPool.setUpClass	  s.    88A;;r   c                     | j                                          | j                                          d | _         t                                                       d S r   )r  r  r   r  tearDownClassr  s    r   r  z_TestPool.tearDownClass	  sI    r   c                     | j         j        }|                      |t          d          t          d                     |                      |t          dddi          t          d                     d S )N)r   r   rX   rC  r  r  )r  applyri   r  )rn   papplys     r   
test_applyz_TestPool.test_apply	  si    T**CFF333R#a113888<<<<<r   c                    | j         j        }|                      |t          t	          t          d                              t	          t          t          t	          t          d                                                   |                      |t          t	          t          d                    d          t	          t          t          t	          t          d                                                   d S )Nr2  r%  r  	chunksize)r  mapri   r  r   rN  )rn   pmaps     r   test_mapz_TestPool.test_map	  s    y}c4b		??33T#c4b		??:S:S5T5TUUUc4c

#3#3rBBBc#tE#JJ'7'78899	; 	; 	; 	; 	;r   c           
      .   | j         j        }t          t          t	          d          t	          ddd                              }|                      |t          |          t          t          j        t          |                               t          t          t	          d          t	          ddd                              }|                      |t          |d          t          t          j        t          |                               d S )Nr2  r  r?   r%  r  r  r  )r  starmapr   rJ  rN  ri   r  r   )rn   psmaptupless      r   test_starmapz_TestPool.test_starmap	  s    	!c%))U1R__5566sF++i/V<<==	? 	? 	?c%**eBr2&6&67788sFb999i/V<<==	? 	? 	? 	? 	?r   c           
      N   t          t          t          d          t          ddd                              }|                     | j                            t          |                                          t          t          j	        t          |                               d S )Nr%  r  r?   )
r   rJ  rN  ri   r  starmap_asyncr  r   r   r  )rn   r  s     r   test_starmap_asyncz_TestPool.test_starmap_async	  s    c%**eBr2&6&6778800f==AACCi/V<<==	? 	? 	? 	? 	?r   c                 :   |                      | j                            t          t	          t          d                                                              t	          t          t          t	          t          d                                                   d S r  )ri   r  	map_asyncr  r   rN  r   r  r   s    r   test_map_asyncz_TestPool.test_map_async	  sq    ,,S$uRyy//BBFFHHc#tE"II7788	: 	: 	: 	: 	:r   c                 Z   | j         dk    r| j                                        ng }| j                            t
          dg|j        |j                                                   |                     dt          |                     |                     dg|d                    | j                            t
          dg|j        |j                                                   |                     dt          |                     | 
                    |d         t                     d S )Nr   1)callbackerror_callbackr   r   r   r  )r   r   r   r  r  rE  rS  r0   ri   r   r   rC   )rn   	call_argss     r   test_map_async_callbacksz"_TestPool.test_map_async_callbacks	  s   +/9	+A+ADL%%'''r		C#%.%5+4+; 	 	= 	==ATVVVC	NN+++!il+++	C#%.%5+4+; 	 	= 	==ATVVVC	NN+++ilJ77777r   c                 Z   | j         dk    r-|                     d                    | j                               G d dt                    }|                     t
                    5  | j                            t           |            gdz             d d d            d S # 1 swxY w Y   d S )Nr   r   c                       e Zd Zd ZdS )*_TestPool.test_map_unplicklable.<locals>.Ac                      t          d          )Nzcannot pickler/  r   s    r   r   z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__	  s    "?333r   Nr=  rX   r   r   Ar  	  s#        4 4 4 4 4r   r  r2  )	r   r   r   r?  rj   r0  r  r  r  )rn   r  s     r   test_map_unplicklablez_TestPool.test_map_unplicklable	  s    9	!!MM7>>tyIIJJJ	4 	4 	4 	4 	4 	4 	4 	4 |,, 	) 	)IMM#uRx(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   &-B  B$'B$c                     	 | j                             t          g d                              t                     d S # t
          j        $ r |                     d           Y d S w xY w)Nr   r  r   z2pool.map_async with chunksize stalled on null list)r  r  r  r   r  r   TimeoutErrorrg   r   s    r   test_map_chunksizez_TestPool.test_map_chunksize	  sz    	LIR15599(9KKKKK+ 	L 	L 	LIIJKKKKKK	Ls   ;? $A'&A'c                 D   | j         dk    r-|                     d                    | j                              |                     t                    5  | j                            t          t          dd          d           d d d            n# 1 swxY w Y   |                     t                    5  | j                            t          t          dd          d           d d d            n# 1 swxY w Y   |                     t                    5  | j                            t          t          dd          d           d d d            n# 1 swxY w Y    G d d          }|                     t                    5  | j                            t           |            d           d d d            n# 1 swxY w Y   |                     t                    5  | j                            t           |            d           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r?   r2  r  c                        e Zd Zd Zd Zd ZdS )E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                     | S r   rX   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                     dS r   rX   r   s    r   r  zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__	  s    qr   N)rs   rt   ru   r  r  r  rX   r   r   SpecialIterabler  	  sA          # # #    r   r  )	r   r   r   rj   r  r  r  r  r  )rn   r  s     r   "test_map_handle_iterable_exceptionz,_TestPool.test_map_handle_iterable_exception	  sZ   9	!!MM7>>tyIIJJJ |,, 	G 	GIMM#;ArBBAFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G |,, 	G 	GIMM#;ArBBAFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G |,, 	G 	GIMM#;BBBAFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G	 	 	 	 	 	 	 	 |,, 	5 	5IMM#00!444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5|,, 	5 	5IMM#00!444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sZ   0BBB40C00C47C40EEE*F99F= F=*HHHc                     | j                             t          dt          f          }t	          |j                  }|                      |            d           |                     |j        t                     d S )Nr  1   )	r  apply_asyncr  r  r{   r   ri   r   r~   rn   r   r   s      r   
test_asyncz_TestPool.test_async
  sf    i##C!X88CG$$###$$S[(;;;;;r   c                    | j                             t          dt          dz   f          }t	          |j                  }|                     t          j        |t                     | 	                    |j
        t                     d S )Nr  r+  r   )r  r  r  r  r{   r   rj   r   r	  r   r~   r  s      r   test_async_timeoutz_TestPool.test_async_timeout
  sm    i##C!X^)<==CG$$/6XNNN$$S[(;;;;;r   c                    | j                             t          t          t	          d                              }|                     t          |          t          t          t          t          t	          d                                                   | j                             t          t          t	          d                              }t	          d          D ](}|                     t          |          ||z             )|                     t          |j
                   | j                             t          t          t	          d                    d          }t	          d          D ](}|                     t          |          ||z             )|                     t          |j
                   d S Nr2  r9  r%  r  )r  imapr  r   rN  ri   r  r  rj   StopIterationr  rn   r  rQ  s      r   	test_imapz_TestPool.test_imap
  sK   Y^^CeBii11b4CeBii(A(A#B#BCCCY^^CeBii11r 	, 	,AT"XXqs++++-555Y^^CeDkk!2!2c^BBt 	, 	,AT"XXqs++++-55555r   c                    | j         dk    r-|                     d                    | j                              | j                            t
          t          dd          d          }|                     t          |j	                   | j                            t
          t          dd          d          }|                     t          |j	                   | j                            t
          t          dd          d          }t          d          D ](}|                     t          |          ||z             )|                     t          |j	                   | j                            t
          t          dd          d	          }t          d
          D ](}|                     t          |          ||z             )|                     t          |j	                   | j                            t
          t          dd          d          }t          d          D ](}|                     t          |          ||z             )|                     t          |j	                   d S )Nr   r   r   r?   r2  r  r  r  r  r  r_   )r   r   r   r  r  r  r  rj   r  r  rN  ri   r  r   s      r   #test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exception 
  s   9	!!MM7>>tyIIJJJ Y^^C!=a!D!DaHH,444Y^^C!=a!D!DaHH,444Y^^C!=b!!D!DaHHq 	, 	,AT"XXqs++++,444 Y^^C!=b!!D!DaHHq 	, 	,AT"XXqs++++,444Y^^C!=b!!D!DaHHq 	, 	,AT"XXqs++++,44444r   c                 f   | j                             t          t          t	          d                              }|                     t          |          t          t          t          t          t	          d                                                   | j                             t          t          t	          d                    d          }|                     t          |          t          t          t          t          t	          d                                                   d S r  )r  imap_unorderedr  r   rN  ri   r  r  )rn   r  s     r   test_imap_unorderedz_TestPool.test_imap_unordered:
  s    Y%%c4b		??;;T#c4b		??*C*C%D%DEEEY%%c4d+<+<%LLT#c4d3D3D*E*E%F%FGGGGGr   c           
      \   | j         dk    r-|                     d                    | j                              | j                            t
          t          dd          d          }|                     t          |j	                   | j                            t
          t          dd          d          }|                     t          |j	                   | j                            t
          t          dd          d          }t          t          t
          t          t          d                                        }|                     t                    5  t          d          D ]<}t          |          }|                     ||           |                    |           =	 d d d            n# 1 swxY w Y   | j                            t
          t          dd          d	          }t          t          t
          t          t          d                                        }|                     t                    5  t          d          D ]<}t          |          }|                     ||           |                    |           =	 d d d            d S # 1 swxY w Y   d S )
Nr   r   r   r?   r2  r  r  r  r  )r   r   r   r  r%  r  r  rj   r  r  r   r  rN  r  rk   r  )rn   r  expected_valuesrQ  r   s        r   -test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exceptionA
  s   9	!!MM7>>tyIIJJJ Y%%c&B1b&I&I&') ) 	,444Y%%c&B1b&I&I&') ) 	,444Y%%c&B2q&I&I&') ) s3U2YY8899|,, 	. 	.2YY . .Re_555&&u----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. Y%%c&B2q&I&I&') ) s3U2YY8899|,, 	. 	.2YY . .Re_555&&u----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s&   AF66F:=F:AJ!!J%(J%c                    | j         dk    rt          nt          }|                     || j        d           |                     || j        d           | j         dk    r|                     d          }	 |                     dt          |j                             |                                 |	                                 d S # |                                 |	                                 w xY wd S )Nr   r?   r   r  )
r   RemoteErrorrC   rj   r  ri   r   _poolr   r   )rn   expected_errorr   s      r   test_make_poolz_TestPool.test_make_poole
  s    )-i)?)?++) 	 	.$)R888.$)Q7779	!!		!A  CLL111			 			 "!s   3(C *C/c                 0   | j                             t          j        d t	          d          D             d          }| j                                          t          | j         j                  } |             |                     |j	        d           d S )Nc                     g | ]}d S )r,   rX   r  s     r   rr  z,_TestPool.test_terminate.<locals>.<listcomp>v
  s    333333r   i'  r   r  r  )
r  r  r   r
  rN  r  r{   r   
assertLessr~   )rn   rT  r   s      r   r>  z_TestPool.test_terminatet
  s    $$J33eEll333q %   		TY^,,c*****r   c                 P   |                      d          }|                     |                    t          g           g            |                     t	          |                    t          g                     g            |                     t	          |                    t          g                     g            |                     |                    t          g                                           g            |	                                 |
                                 d S r   )r  ri   r  r  r   r  r%  r  r   r   r   rK  s     r   test_empty_iterablez_TestPool.test_empty_iterable~
  s    IIaLLsB,,,affS"oo..333a..sB7788"===S"--1133R888					r   c                    | j         dk    rt          t          d                    }d |D             }|                     d          5 }|                    t
          |          }|                     |                                |           d d d            n# 1 swxY w Y   |                                 | 	                    t          |j        t
          |           d S d S )Nr   r2  c                 ,    g | ]}t          |          S rX   )r  r  s     r   rr  z*_TestPool.test_context.<locals>.<listcomp>
  s    ***1A***r   r  )r   r   rN  r  r  r  ri   r   r   rj   rC   )rn   LrU  r   rs        r   test_contextz_TestPool.test_context
  s    9##U2YYA*****H1 4KKQ''  (3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 FFHHHj!+sA>>>>> $#s   	ABB Bc                      t          d          )Nr  r/  r'  s    r   _test_tracebackz_TestPool._test_traceback
  s    3r   c                 D   | j         dk    r|                     d          5 }	 |                    | j                   |                     d           n# t
          $ r}|}Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |                                 |                     t          |          t                     | 
                    |j        d           |j        }|                     t          |          t          j        j                   |                     d|j                   t$          j                                        5 }	 |# t          $ r" t+          j        t+          j                      Y nw xY w	 d d d            n# 1 swxY w Y   |                     d|                                           |                     d          5 }	 |                    t4          t7          dd          d           |                     d           n# t
          $ r}|}Y d }~nd }~ww xY w|                     t          |          t8                     |                     |j        d            d d d            n# 1 swxY w Y   |                                 d S d S )Nr   r   zexpected RuntimeError)r  z&raise RuntimeError(123) # some commentr?   zexpected SayWhenError)r   r  r  r:  rg   rf   r   rj  r  r0  ri   rO   	__cause__r   r  RemoteTracebackrk   tbr@  r   rA  rx   
excepthookexc_infogetvaluer  r  r  r  )rn   r   r  exccausef1s         r   test_tracebackz_TestPool.test_traceback
  sA    9##1 77GGD0111 II56666 !   CCCCCC7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 FFHHHMM$s))\222SXv...MEMM$u++';'KLLLMMBEHMMM--// 424I# 4 4 4NCLNN333343	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 MMB++--) ) ) 1 37EE#;ArBBAFFF II56666 !   CCCCCC d3ii666cmT2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 FFHHHHHC $#s   A9AA9
A*A% A9%A**A99A= A=FE)E=:F<E==FFFI?*HI?
H-!H(#I?(H--AI??JJc                      t          d          )NrV  r/  r'  s    r   _test_wrapped_exceptionz!_TestPool._test_wrapped_exception
  s    5!!!r   c                     |                      d          5 }|                     t                    5  |                    | j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                 d S r   )r  rj   r0  r  rG  r   rK  s     r   test_wrapped_exceptionz _TestPool.test_wrapped_exception
  s    YYq\\ 	6Q""<00 6 645556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	
s4   A/AA/A	A/A	 A//A36A3c                 x   t          j                    }|                     t                    5  |                     d          5 }	 |                    t          ddg           t          j        d           |                                 |	                                 nA# t          j        d           |                                 |	                                 w xY w	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 
                    t          j                    |z
  d           d S )Nr  r   r   r  g?)r   r   rj   rC   r  r  r  r
  r   r   assertGreater)rn   t_startr   s      r   test_map_no_failfastz_TestPool.test_map_no_failfast
  s    .""z** 	 	1 EE/!Q888JsOOOGGIIIFFHHHH JsOOOGGIIIFFHHHHH              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4>++g5s;;;;;sM   DC.B #=C. >CC."D.C2	2D5C2	6DD	D	c                    d t          d          D             }d |D             }| j                            t          |           ~t	          j                     t          j        t                     | 	                    t          d |D                       d h           | 	                    t          j        d           d S )Nc                 *    g | ]}t                      S rX   )r  r  s     r   rr  z4_TestPool.test_release_task_refs.<locals>.<listcomp>
  s    333A333r   r2  c                 6    g | ]}t          j        |          S rX   )rf  rg  )rq  os     r   rr  z4_TestPool.test_release_task_refs.<locals>.<listcomp>
  s     ---1A---r   c              3   *   K   | ]} |            V  d S r   rX   )rq  rk  s     r   r  z3_TestPool.test_release_task_refs.<locals>.<genexpr>
  s(      11bRRTT111111r   r   )rN  r  r  r  rh  ri  r   r
  rJ  ri   r_  r  r  )rn   objsrefss      r   test_release_task_refsz _TestPool.test_release_task_refs
  s     43r333-----	h%%%


511D11111D6::: 	2A66666r   c                 h   | j         dk    r|                     d           |                     d          }|5  	 d d d            n# 1 swxY w Y   |                     t                    5  |5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                 d S )Nr   test not applicable to managerr   )r   r   r  rj   rC   r   rn   r  s     r   
test_enterz_TestPool.test_enter
  sk   9	!!MM:;;;yy|| 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 z** 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 			sG   AA
A
+B.A<0B<B 	 BB 	BBBc                 ~   | j         dk    r|                     d           |                     d          }|                                 |                                 t
          j        j        |_        t          j
        dt          f          5  d }t          j                     d d d            d S # 1 swxY w Y   d S )Nr   rW  r   z%unclosed running multiprocessing pool)r   r   r  r  r   r   r  RUN_stater
   check_warningsResourceWarningr   
gc_collectrX  s     r   test_resource_warningz_TestPool.test_resource_warning
  s    9	!!MM:;;;yy||		 &*.+8/JL L 	! 	!D   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   B22B69B6)"rs   rt   ru   r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r!  r#  r&  r)  r.  r>  r3  r8  r:  rE  rG  rI  rM  rU  rY  r`  __classcell__r  s   @r   r  r  	  s           [         [ = = =
; ; ;? ? ?? ? ?
: : :8 8 8) ) )L L L5 5 54< < << < <6 6 65 5 54H H H". ". ".H  + + +
 
 
? ? ?     [ $ $ $L " " ["  < < <(7 7 7   ! ! ! ! ! ! !r   r  c                       t          d          )Nkey)KeyErrorrX   r   r   raisingrf    s    
5//r   c                      d S )Nc                      dS )N*   rX   rX   r   r   r  z%unpickleable_result.<locals>.<lambda>  s    2 r   rX   rX   r   r   unpickleable_resultrj    s
    :r   c                       e Zd ZdZd Zd ZdS )_TestPoolWorkerErrorsr  c                    t          j        d          }d gfd}|                    t          |          }|                     t
          |j                   |                     d                    |                     d         t
                     |	                                 |
                                 d S )Nr  c                     | d<   d S r  rX   rB  
scratchpads    r   errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback  s    JqMMMr   r  r   )r   r  r  rf  rj   re  r   r   r   r   r   )rn   r   rq  r   rp  s       @r   test_async_error_callbackz/_TestPoolWorkerErrors.test_async_error_callback  s     ##V
	  	  	  	  	  mmGGm<<(CG,,,
1&&&jmX666					r   c                    ddl m} t          j        d          }t	          d          D ]}d gfd}|                    t          |          }|                     ||j                   d         }| 	                    |           | 
                    d         |           |                     |j                   |                     |j                   |                                 |                                 d S )Nr   )MaybeEncodingErrorr  r  c                     | d<   d S r  rX   ro  s    r   rq  z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback,  s     #
1r   rr  )multiprocessing.poolru  r   r  rN  r  rj  rj   r   r   r   assertIsNotNonerB  r   r   r   )rn   ru  r   	iterationrq  r   wrappedrp  s          @r   test_unpickleable_resultz._TestPoolWorkerErrors.test_unpickleable_result$  s   ;;;;;; ## r 	0 	0IJ$ $ $ $ $ -- 3G-LLC0#'::: mGOOG$$$!!*Q-1CDDD  ---  ////					r   N)rs   rt   ru   r   rs  r{  rX   r   r   rl  rl    s7        #M      r   rl  c                   *    e Zd ZdZd Zd Zd Zd ZdS )_TestPoolWorkerLifetimer  c                    t          j        dd          }|                     dt          |j                             d |j        D             }g }t          d          D ]1}|                    |                    t          |f                     2t          |          D ]:\  }}|                     |
                                t          |                     ;|                                 d}|r\t          d |j        D                       s>|dz  }t          j        t                     |rt          d |j        D                       >d	 |j        D             }|                     d |           |                     d |           |                     t%          |          t%          |                     |                                 |                                 d S )
Nr  r2  maxtasksperchildc                     g | ]	}|j         
S rX   r   rq  r  s     r   rr  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>@  s    111A!%111r   r%  2   c              3   >   K   | ]}|                                 V  d S r   r   r  s     r   r  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>N  s*      #B#BQAJJLL#B#B#B#B#B#Br   r   c                     g | ]	}|j         
S rX   r  r  s     r   rr  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>Q  s    222Q15222r   )r   r  ri   r   r,  rN  rS  r  r  	enumerater   _repopulate_poolallr   r
  rJ  r  r  r  r   r   )	rn   r   origworkerpidsr  rQ  r:  r   	countdownfinalworkerpidss	            r   test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetime=  s    R888CLL)))11111s 	6 	6ANN1==qe445555 "'** 	0 	0HQSWWYYA////	 	 	#B#B!'#B#B#B B B 	NIJu  	#B#B!'#B#B#B B B 	 32!'222~...///F>22F?4K4KLLL					r   c                    t          j        dd          }g }t          d          D ]2}|                    |                    t
          |df                     3|                                 |                                 t          |          D ]:\  }}| 	                    |
                                t          |                     ;d S )Nr  r   r  r  g333333?)r   r  rN  rS  r  r  r   r   r  ri   r   )rn   r   r  rQ  r:  r   s         r   %test_pool_worker_lifetime_early_closez=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeZ  s      Q777q 	9 	9ANN1==q#h778888					!'** 	0 	0HQSWWYYA////	0 	0r   c                     dD ]J}|                      t                    5  t          j        d|           d d d            n# 1 swxY w Y   Kd S )N)r   r?   r  12r  r  )rj   rC   r   r  )rn   r   s     r   "test_pool_maxtasksperchild_invalidz:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalidg  s    ' 	@ 	@E"":.. @ @$Q????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s   AA		A	c                     d}t           j        j                            d|          \  }}}|                     |d           d S )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_okri   rn   cmdrc  outro   s        r   >test_worker_finalization_via_atexit_handler_of_multiprocessingzV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingl  sG     |1BB4MMCQr   N)rs   rt   ru   r   r  r  r  r  rX   r   r   r}  r}  :  sX        #M  :0 0 0@ @ @
         r   r}  )BaseManager	BaseProxyr+  c                        e Zd Zd Zd Zd ZdS )FooBarc                     dS )Nf()rX   r   s    r   r  zFooBar.f  s    ur   c                     t           r   )rC   r   s    r   gzFooBar.g  s    r   c                     dS )N_h()rX   r   s    r   _hz	FooBar._h  s    vr   N)rs   rt   ru   r  r  r  rX   r   r   r  r    sA                r   r  c               #   <   K   t          d          D ]	} | | z  V  
d S r  )rN  )rQ  s    r   bazr    s4      2YY  c				 r   c                       e Zd ZdZd Zd ZdS )IteratorProxy)r  c                     | S r   rX   r   s    r   r  zIteratorProxy.__iter__  s    r   c                 ,    |                      d          S )Nr  )_callmethodr   s    r   r  zIteratorProxy.__next__  s    
+++r   N)rs   rt   ru   	_exposed_r  r  rX   r   r   r  r    s7        I  , , , , ,r   r  c                       e Zd ZdS )	MyManagerNr  rX   r   r   r  r    s        Dr   r  Foo)callableBar)r  r  )r  exposedr  )r  	proxytypec                   *    e Zd ZdZd Zd Zd Zd ZdS )_TestMyManagerr  c                    t          t                    }|                                 |                     |           |                                 |                     |j        j        dt          j	         f           d S N)shutdown_timeoutr   )
r  SHUTDOWN_TIMEOUTr   commonshutdownrk   _processr   r4  r<  rn   r   s     r   test_mymanagerz_TestMyManager.test_mymanager  so    -=>>>G
 	g&/!fn_1EFFFFFr   c                     t          t                    }|5  |                     |           d d d            n# 1 swxY w Y   |                     |j        j        dt          j         f           d S r  )r  r  r  rk   r  r   r4  r<  r  s     r   test_mymanager_contextz%_TestMyManager.test_mymanager_context  s    -=>>> 	! 	!KK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 	g&/!fn_1EFFFFFs   :>>c                     t          t                    }|                                 |5  |                     |           d d d            n# 1 swxY w Y   |                     |j        j        d           d S r  )r  r  r   r  ri   r  r   r  s     r   !test_mymanager_context_prestartedz0_TestMyManager.test_mymanager_context_prestarted  s    -=>>> 	! 	!KK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!)2A66666s   AAAc                    |                                 |                                |                                }fddD             }fddD             }|                     |ddg           |                     |ddg           |                                                     d           |                     t          j                   |                                         d          d           |                     t          j        d           |                                                     d           |                     
                                d           |                                         d          d           |                                         d          d           |                     t          |          d	 t          d
          D                        d S )Nc                 4    g | ]}t          |          |S rX   r3  )rq  r)   rV  s     r   rr  z)_TestMyManager.common.<locals>.<listcomp>  (    OOOGC<N<NOtOOOr   )r  r  r  c                 4    g | ]}t          |          |S rX   r  )rq  r)   bars     r   rr  z)_TestMyManager.common.<locals>.<listcomp>  r  r   r  r  r  r  r  c                     g | ]}||z  S rX   rX   r  s     r   rr  z)_TestMyManager.common.<locals>.<listcomp>  s    $<$<$<QQqS$<$<$<r   r2  )r  r  r  ri   r  rj   rC   r  r  r+  r  r   rN  )rn   r   r  foo_methodsbar_methodsr  rV  s        @@r   r  z_TestMyManager.common  s   kkmmkkmmkkmmOOOO(8OOOOOOO(8OOOsCj111sDk222%(((*ce,,,--u555+s===%(((6***--u555..777c$<$<%))$<$<$<=====r   N)rs   rt   ru   r   r  r  r  r  rX   r   r   r  r    s[         M	G 	G 	GG G G7 7 7> > > > >r   r  c                      t           S r   )_queuerX   r   r   	get_queuer    s    Mr   c                       e Zd ZdZdS )QueueManagerz$manager class used by server processNrs   rt   ru   rv   rX   r   r   r  r    s        ....r   r  r  c                       e Zd ZdZdS )QueueManager2z@manager class which specifies the same interface as QueueManagerNr  rX   r   r   r  r    s        JJJJr   r  	xmlrpclibc                   J    e Zd ZdZg dZedd         Zed             Zd ZdS )_TestRemoteManagerr  )hello worldNT      @u   hallå världenu   привіт світs   hall vrldenNc                     t          ||t          t                    }|                                 |                                }|                    t          | j                             d S )Nr   r   
serializerr  )r  
SERIALIZERr  connectr  r   r   rL  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        |f          }d|_        |                                 t          |j        |t
          t                    }|                                 |                                }|                     |                                | j                   |                     t*          |j        t.          j                   ~d S )N    r   r  r   T)r@   urandomr  r   HOSTr  r  r   r^  r  r   r  r   r   r  r  r  ri   r   rT  rj   rf   r   r   r
  )rn   r   r   r   manager2r    s         r   test_remotez_TestRemoteManager.test_remote  s   *R.."'+W-/ / / 	()))LLGOW3MLNN				 OW-/ / / 	""$$dk222 	)UY
;;; EEr   )	rs   rt   ru   r   rL  rT  r  r  r  rX   r   r   r  r    sa         M  F
 AAAYF% % [%    r   r  md5c                   *    e Zd Zed             Zd ZdS )_TestManagerRestartc                     t          ||t          t                    }|                                 |                                }|                    d           d S )Nr  r  )r  r  r  r  r  r   r  s        r   r  z_TestManagerRestart._putter  s[    W-/ / / 	!!##		-     r   c                 v   t          j        d          }t          t          j        df|t
          t                    }	 |                                }|j        }|j	        
                                 |                                 |                     | j        |j        |f          }|                                 |                                 |                                }|                     |                                d           ~t%          |d          r|                                 n*# t%          |d          r|                                 w w xY wt          ||t
          t                    }	 |                                 |                     |j                   d S # t*          $ r}|j        t,          j        k    r t1          j        d           t          ||t
          t                    }t%          |d          r |                     |j                   Y d }~d S Y d }~d S d }~ww xY w)Nr  r   r  r   r  r  r+  )r@   r  r  r   r  r  r  
get_serverr   listenerr   r   r   r  r   r  ri   r   r3  r  r^  OSErrorerrno
EADDRINUSEr   r
  )rn   r   r   srvraddrr   r    r  s           r   test_rapid_restartz&_TestManagerRestart.test_rapid_restart&  s?   *R.."'+W!4DF F F	#%%''D<D M!!!MMOOODL7QRRAGGIIIFFHHH%%''EUYY[[-888w
++ #  """ w
++ #  """"# 'j-/ / /	2MMOOOOOG,----- 
	2 
	2 
	2w%*** JsOOO"g*!13 3 3G w
++ 2 01111111112 2 2 2 2 2
	2s%   CD4 4'E<.F, ,
H86A1H33H8N)rs   rt   ru   r  r  r  rX   r   r   r  r    s>         ! ! [!'2 '2 '2 '2 '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dS )_TestConnectionr   c                     t          |j        t                    D ]}|                    |           |                                 d S r   )r  
recv_bytesSENTINEL
send_bytesr   )r   r6  msgs      r   _echoz_TestConnection._echoY  sC    22 	! 	!COOC    

r   c                    |                                  \  }}|                     | j        |f          }d|_        |                                 g d}t          d          }|dz  }t          j        dt          t          d                              }| j	        dk    r:| 
                    t          |                                          t                     | 
                    |                    |          d            | 
                    |                                |           | 
                    |                    |          d            | 
                    |                                |           | j	        dk    rNt          j        dd	gdz            }t          |          d	gdt%          |          z
  z  z   }	| 
                    |                    |          d            | 
                    |                    |          t%          |          |j        z             | 
                    t          |          |	           t          j        dd	gdz            }d	gd
z  t          |          z   d	gdt%          |          z
  z  z   }	| 
                    |                    |          d            | 
                    |                    |d
|j        z            t%          |          |j        z             | 
                    t          |          |	           t+          t          d                    }| 
                    |                    |          d            	 |                    |          }
|                     d|
z             n8# t.          j        $ r&}| 
                    |j        |f           Y d }~nd }~ww xY wt5          |j                  }| 
                     |            d           |                     |j        d	           | 
                     |d          d           |                     |j        d	           | 
                     |t<                    d           |                     |j        t<                     |                    d            t?          j         d           | 
                     |t<                    d           |                     |j        d	           | 
                    |                                d            t          d          dz  }|                    |           | 
                    |                                |           |                    tB                     |"                                 | j	        dk    rv| 
                    |j#        d           | 
                    |j$        d           | %                    tL          |j                   | %                    tL          |j                   |'                                 d S )Nr   T)r   r  Nr  r2  rQ  r_   r   r   r  r  z(                                        zexpected BufferTooShort, got %sFr?   r,   Xi   )(r   r   r  r   r   r   rt  r   rN  r   ri   r  filenorE  r   r   r  r  r   recv_bytes_intoitemsize	bytearrayrg   r   BufferTooShortrO   r{   r  r   r~   r  r   r
  r  r   readablewritablerj   EOFErrorr   )rn   r6  r  r   rn  r  longmsgru  bufferrU  r   r  r  really_big_msgs                 r   test_connectionz_TestConnection.test_connection_  sl   99;;jLL
*L??				ooM""(k#tE!HH~~..9##T$++--00#6663...c***--t444**C0009##[qc"f--FCyyA3"s3xx-#88HT__S114888T11&99 XX79 9 9T&\\8444[qc"f--FsQwc*aSFSXX4E-FFHT__S114888T11&!fo:MNN XX79 9 9T&\\8444uX//FT__W55t<<<C**622 		;cABBBB #1 5 5 5  '444444445
 TY'''''$$T\1555b5)))$$T\1555h///$$T\8<<<		$
2h...$$T\1555d+++s'78'''**N;;;!!!9##T]D111T]D111h	222h888	s   2N   O/OOc                    |                      d          \  }}|                     |                    d          d            |                     |                                d           | j        dk    r|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     t          |j        d           |                     t          |j                   |                     t          |j	                   d S d S )NFr   r   r   Tr  )
r   ri   r   r   r   r  r  rj   r  r  )rn   readerwriters      r   test_duplex_falsez!_TestConnection.test_duplex_false  s   %00Q...***9##V_d333V_e444V_e444V_d333gv{A666gv{333gv{33333 $#r   c                    |                                  \  }}|                     | j        |f          }d|_        |                                 |                                 t          d          }|                    |           |                     |	                                |           |                    t                     |                                 |                                 d S )Nr   Tr  )r   r   r  r   r   r   r   r  ri   r  r  r   )rn   r6  r  r   r  s        r   test_spawn_closez _TestConnection.test_spawn_close  s      99;;jLL
*L??				Gnn**C000!!!

	r   c                    | j         dk    r-|                     d                    | j                              t          d          }|                                 \  }}|                    |           |                     |                                |           |                    |d           |                     |                                |dd                     |                    |dd           |                     |                                |dd                    |                    |d           |                     |                                t          d	                     |                    |dd
           |                     |                                t          d	                     |                     t          |j        |d           |                     t          |j        |dd           |                     t          |j        |dd           |                     t          |j        |d           |                     t          |j        |dd           d S )Nr   r   abcdefghijklmnopqrstuvwxyzr   r  r        r  r         r   r?   r_   )
r   r   r   r   r   r  ri   r  rj   rC   )rn   r  r   r   s       r   test_sendbytesz_TestConnection.test_sendbytes  s   9##MM7>>tyIIJJJ011yy{{1	S---	S!QRR111	S!QQsU444	S"r333	S"a   r333*alC<<<*alCQ???*alCQ???*alC<<<*alCB?????r   c                     	 t          j        |           dS # t          $ r!}|j        t          j        k    rY d }~dS  d }~ww xY wr\  )r@   fstatr  r  EBADF)r   r  r  s      r   _is_fd_assignedz_TestConnection._is_fd_assigned  s[    	HRLLL 4  	 	 	w%+%%uuuuu	s    
A>>AFc                 n   |rOt          dd          D ]>}|                     |          s't          j        |                                |           ?t          j        |          }t          rt          j        |t          j	                  }t          j
        ||           t          j        |           d S )Nr   r7   )rN  r  r@   dup2r  r   recv_handlemsvcrtopen_osfhandler  r/  r   )r   r6  datacreate_dummy_fdsrQ  r  s         r   _writefdz_TestConnection._writefd  s     	.1c]] . .**1-- .GDKKMM1---"4(( 	8&r2;77B
T
r   $test needs multiprocessing.reductionc                    | j         dk    r|                     d           |                     d          \  }}|                     | j        |df          }d|_        |                                 |                     t          j	        t          j
                   t          t          j
        d          5 }|                                }t          rt          j        |          }t          j        |||j                   d d d            n# 1 swxY w Y   |                                 t          t          j
        d          5 }|                     |                                d           d d d            d S # 1 swxY w Y   d S )	Nr   only makes sense with processesTr   s   foor   wbrb)r   r   r   r   r#  r   r   r^  r   r  r  r  r  r  get_osfhandler   send_handler   r   ri   r  )rn   r6  r  r   r  r  s         r   test_fd_transferz _TestConnection.test_fd_transfer  s   9##MM;<<<99D911jLLZ4HLII					()*:;;;)"D)) 	3QB .)"--!$AE222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 	
)"D)) 	/QQVVXXv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s%   7ADDD)E==FFr.   *test semantics don't make sense on Windowsr7   z)largest assignable fd number is too smallr  ztest needs os.dup2()c                    | j         dk    r|                     d           |                     d          \  }}|                     | j        |ddf          }d|_        |                                 |                     t          j	        t          j
                   t          t          j
        d          5 }|                                }t          dt                    D ]}|                     |          s n|                     d	           t#          j        ||           	 t'          j        |||j                   t#          j        |           n# t#          j        |           w xY w	 d d d            n# 1 swxY w Y   |                                 t          t          j
        d
          5 }|                     |                                d           d d d            d S # 1 swxY w Y   d S )Nr   r&  Tr   s   barr   r'  r7   z2could not find an unassigned large file descriptorr(  )r   r   r   r   r#  r   r   r^  r   r  r  r  r  rN  MAXFDr  rg   r@   r  r   r*  r   r   r   ri   r  )rn   r6  r  r   r  r  newfds          r   test_large_fd_transferz&_TestConnection.test_large_fd_transfer  s<    9##MM;<<<99D911jLLZ4NLOO					()*:;;;)"D)) 	 QBsE** P P++E22 E 		NOOOGB %dE15999	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	
)"D)) 	/QQVVXXv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s=   8A.E='EE=E--E==FF6)G,,G03G0c                 T    t          j        |                                d           d S )N    )r@   r/  r  rn   r6  s     r   _send_data_without_fdz%_TestConnection._send_data_without_fd;  s"    
&&&&&r   zdoesn't make sense on Windowsc                 \   | j         dk    r|                     d           |                     d          \  }}|                     | j        |f          }d|_        |                                 |                     t          t          j
        |           |                                 d S )Nr   r&  Tr   r   )r   r   r   r   r4  r   r   rj   r0  r   r  r   rn   r6  r  r   s       r   test_missing_fd_transferz(_TestConnection.test_missing_fd_transfer?  s    
 9##MM;<<<99D911jLL :*LOO				,	(=tDDD	r   c                    |                                  \  }}|5  |5  |                    d           |                     |                                d           | j        dk    r4|                     |j                   |                     |j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        dk    rv|                     |j                   |                     |j                   |                     t          |j                   |                     t          |j                   d S d S N  r   )
r   r   ri   r   r   r   closedr   rj   r  r   s      r   r8  z_TestConnection.test_contextN  s   yy{{1 	+ 	+ 	+ 	+FF4LLLQVVXXt,,,yK''  ***  ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 9##OOAH%%%OOAH%%%gqv...gqv.....	 $#s5   B=A=B&B=&B*	*B=-B*	.B==CCNr  )rs   rt   ru   r   r  r  r
  r  r  r  r  r#  rD   r  HAS_REDUCTIONr+  rw   rx   ry   r.  r3  r@   r0  r4  r7  r8  rX   r   r   r  r  U  s       ,M  [
M M M^4 4 4  *@ @ @@   [ 	 	 	 [	 X(NOO/ / PO/$ X(NOOX_S\W,AC CX_Uc\@B BXV,,/1 1/ /1 1B BC C PO/4 ' ' [' X(NOOX_S\W,.MNN  ON PO/ / / / /r   r  c                   \    e Zd ZdZd Zd Z ej        ej	        d          d             Z
dS )_TestListenerr  c                     | j         j        D ]c}| j                             |          }|                     |j                   |                     t          | j         j        |j        |           dd S )Nfamily)
connectionfamiliesListenerr^  r   rj   r  r   )rn   rA  r  s      r   test_multiple_bindz _TestListener.test_multiple_bindb  sy    o. 	1 	1F(((77AOOAG$$$gt'?i1 1 1 1	1 	1r   c                    | j                                         5 }| j                             |j                  5 }|                                5 }|                    d           |                     |                                d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        dk    r"| 	                    t          |j                   d S d S r9  rB  rD  Clientr   acceptr   ri   r   r   rj   r  )rn   r  r   r>  s       r   r8  z_TestListener.test_contexti  s   _%%'' 	51''	22 5aXXZZ 51FF4LLL$$QVVXXt4445 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 9##gqx00000 $#sX    CB0>BB0BB0 B!B0$C0B4	4C7B4	8CCCz"test needs abstract socket supportc                    | j                             d          5 }| j                             |j                  5 }|                                5 }|                    d           |                     |                                d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        dk    r"| 	                    t          |j                   d S d S )Nz
 somethingr:  r   rG  )rn   r  clientr>  s       r   test_abstract_socketz"_TestListener.test_abstract_sockets  s    _%%m44 	5''(899 5V__&& 5!KK%%%$$QVVXXt4445 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 9##gx77777 $#sX    CB1>BB1BB1!B"B1%C1B5	5C8B5	9CCCN)rs   rt   ru   r   rE  r8  rD   r  r   abstract_sockets_supportedrL  rX   r   r   r>  r>  ^  sl        "M1 1 11 1 1 X8=? ?8 8? ?8 8 8r   r>  c                   :    e Zd ZdZed             Zd Zd Zd ZdS )_TestListenerClientr   c                     | j                             |          }|                    d           |                                 d S )Nr  )rB  rH  r   r   )r   r   r6  s      r   r   z_TestListenerClient._test  s:    ~$$W--		'

r   c                    | j         j        D ]}| j                             |          }|                     | j        |j        f          }d|_        |                                 |                                }| 	                    |
                                d           |                                 |                                 d S )Nr@  r   Tr  )rB  rC  rD  r   r   r   r   r   rI  ri   r   r   r   )rn   rA  r  r   r6  s        r   test_listener_clientz(_TestListenerClient.test_listener_client  s    o. 	 	F(((77ADJai\BBAAHGGIII88::DTYY[['222FFHHHGGIIII	 	r   c                    | j                                         }|                     | j        |j        f          }d|_        |                                 t          j        d           |	                                }| 
                    |                                d           |                                 |                                 |                                 d S )Nr   Tr   r  )rB  rD  r   r   r   r   r   r   r
  rI  ri   r   r   r   )rn   r  r   r6  s       r   test_issue14725z#_TestListenerClient.test_issue14725  s    O$$&&LL
!)L>>				
1
 xxzzg...

							r   c                    | j         j        D ]}| j                             |          }| j                             |j                  }|                                }|                    d           |                     |                    d                     |	                                 |	                                 |	                                 d S )Nr@     hellor   )
rB  rC  rD  rH  r   rI  r  r   r  r   )rn   famr  r   r   s        r   test_issue16955z#_TestListenerClient.test_issue16955  s    ?+ 	 	C(((44A&&qy11A

ALL"""OOAFF1II&&&GGIIIGGIIIGGIIII	 	r   N)	rs   rt   ru   r   r  r   rR  rT  rX  rX   r   r   rO  rO    s_        ,M  [
	 	 	   	 	 	 	 	r   rO  c                   l    e Zd ZdZd Zed             Zd Zed             Zd Z	ed             Z
d Zd	S )
	_TestPollr   c                 N   |                                  \  }}|                     |                                d           |                    d           |                     |                                d           |                     |                                d           d S )NFr   T)r   ri   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           |                    |           ,|                                 d S Nr,   )r   r
  r  r   )r   r6  stringsr   s       r   _child_stringsz_TestPoll._child_strings  sD     	 	AJsOOOOOA

r   c                 t   d}|                                  \  }}|                     | j        ||f          }|                                 |D ]U}t	          d          D ]}|                    d          r n|                                }|                     ||           V|                                 d S )N)rV  r      a   br   s   byer   s   lopr      ro  )	r   r   r`  r   rN  r  r  ri   r   )rn   r_  r   r   r   r   rQ  rC  s           r   test_stringsz_TestPoll.test_strings  s    Gyy{{1LL 31g,LGG				 	# 	#A3ZZ  66$<< EAQ""""	r   c                 0    |                     d           d S r   )r  )r   r7  s     r   _child_boundariesz_TestPoll._child_boundaries  s     	
q					r   c                    |                      d          \  }}|                     | j        |f          }|                                 t	          j        d           ddg}|D ]}|                    |           |                                 |                                 | 	                    |
                                |           d S )NFr   r  s   firsts   second)r   r   rg  r   r   r
  r  r   r   rk   r  )rn   r7  r  r   r6  r%  s         r   test_boundariesz_TestPoll.test_boundaries  s    yy1LL 6aTLBB				
1y! 	 	CLL					allnna(((((r   c                     |                     d           |                     d           |                     d           d S )Nrb  rc     cd)r  )r   r   s     r   _child_dont_mergez_TestPoll._child_dont_merge  s>    	T	T	Ur   c                    |                                  \  }}|                     |                    d          d           |                     |                    d          d           |                     | j        |f          }|                                 |                     |                                d           |                     |                    d          d           |                     |                    d          d           |                     |                                d           |                     |                    d          d           |                     |                    d          d           |                     |                    d          d           |                     |                                d	           |                                 d S )
Nr2   Fr,   r   rb  r+  Trc  rk  )r   ri   r  r   rl  r   r  r   )rn   r   r   r   s       r   test_dont_mergez_TestPoll.test_dont_merge  s   yy{{1e,,,e,,,LL 6aTLBB				...d+++d+++...d+++d+++d+++///	r   N)rs   rt   ru   r   r\  r  r`  re  rg  ri  rl  rn  rX   r   r   rZ  rZ    s        ,M) ) )   [     [
) 
) 
)   [
    r   rZ  r$  c                   v    e Zd ZdZed             Zed             Zed             Zd Zed             Z	d Z
dS )	_TestPicklingConnectionsr  c                 R    ddl m} |                    t          j                   d S )Nr   )resource_sharerr   )r   rr  r  r   r  )r   rr  s     r   r  z&_TestPicklingConnections.tearDownClass  s4    333333W%9:::::r   c                 z   |D ]}| j                             |          }|                    |j                   |                                }|                    |           |                                 |                                 t          j        t          j	        df          }|                    |
                                           |                                \  }}|                    |           |                                 |                                 |                                 d S )Nr@  r   )rB  rD  r   r   rI  r   socketcreate_serverr   r  getsocknamer   )r   r6  rC  rW  r  new_connr  s          r   	_listenerz"_TestPicklingConnections._listener  s     	 	C''s'33AIIai   xxzzHIIhNNGGIIII -"4a!899		!--//"""$		(						r   c                    t          |j        d           D ]Z\  }}| j                            |          }|                    |                                           |                                 [|                                \  }}t          j                    }|                    |           |	                    |                                           |                                 |                                 d S r   )
r  r   rB  rH  r   r  r   rt  r  sendall)r   r6  r   r  rK  s        r   _remotez _TestPicklingConnections._remote   s    "49d33 	 	NWc^**733FKK		$$$LLNNNNyy{{wsyy{{###

r   c                 l   | j         j        }|                                 \  }}|                     | j        ||f          }d|_        |                                 |                                 |                                 \  }}|                     | j        |f          }d|_        |                                 |                                 |D ]}d|z  	                    d          }	|
                                }
|                    |
|	f           |
                                }|                     |
                                |	                                           |                    d            t          d          }	|
                                }
|                    |
|	f           |
                                }g }	 |
                    d          }|sn|                    |           .d                    |          }|                     ||	                                           |                                 |                    d            |                                 |                                 |                                 |                                 d S )Nr   TzThis connection uses family %sasciiz$This connection uses a normal socketr%  r   )rB  rC  r   r   rx  r   r   r   r{  r   r   r   ri   r  r   rS  r   )rn   rC  lconnlconn0lpr   rconn0rprW  r  r   rw  bufr   s                 r   test_picklingz&_TestPicklingConnections.test_pickling/  s8   ?+		v\\vx6H\II	



		v\\VI\>>	



 	; 	;C3c9AA'JJCjjllGJJ~&&&zz||HX]]__ciikk::::

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

GS>"""::<<	c""A JJqMMM		
 hhsmmciikk***

4
			
					r   c                 (   |                                 }|                    d           |                                 |                                 }|                                 }|                    |dz             |                                 d S )Nall is wellr  )r   r   r   )r   r6  r  r7  r  s        r   child_accessz%_TestPicklingConnections.child_access]  so    IIKK	}				IIKKffhh		#a%

r   c                    |                                  \  }}|                     | j        |f          }d|_        |                                 |                                 |                      d          \  }}|                    |           |                                 |                     |                                d           |                                 |                      d          \  }}|                    |           |                                 |                    d           |                                 |                     |                                d           |	                                 d S )Nr   TFr   r  foobarfoobarfoobar)
r   r   r  r   r   r   r   ri   r   r   )rn   r6  r  r   r7  r  s         r   test_accessz$_TestPicklingConnections.test_accessi  s5     99;;jLL 1LFF				yyy&&1		!				=111				yyy&&1		!					x				j111	r   N)rs   rt   ru   r   r  r  rx  r{  r  r  r  rX   r   r   rp  rp    s         #M; ; [;   [$   [, , ,\ 	 	 [	    r   rp  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                                        t          j        j        _        d S r   )r  r  r   r  r  _heapold_heapHeaprn   r  s    r   r  z_TestHeap.setUp  sG    ',:@3B3G3L3L3N3N*000r   c                 ~    | j         t          j        j        _        t                                                       d S r   )r  r   r  r  r  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                            |          }|	                    |           t          |          |k    rt          j        |          }||= ~|j        5  g }d}	d}
t          |j                                                  D ]H}|D ]C\  }}}|	                    |j                            |          ||||z
  df           |	||z
  z  }	DI|j                                        D ]J\  }}|D ]B\  }}|	                    |j                            |          ||||z
  df           |
||z
  z  }
CK|                     |	|
z   t+          d |j        D                                  |                                 t          t          |          dz
            D ]}||         d d	         \  }}}||dz            d d	         \  }}}||k    r=|                     ||j        |         j                   |                     |d           p|                     ||           	 d d d            n# 1 swxY w Y   t          j        |           |r|                                 ||                     |j        |j                   |                     t          |j                  d           |                     t          |j                  d           |                     t          |j                  d|j                   |                     t          |j                  d           d S )
N  r  r   r   r9  freeoccupiedc              3   $   K   | ]}|j         V  d S r   rx  )rq  arenas     r   r  z&_TestHeap.test_heap.<locals>.<genexpr>  s$       F F F F F F F Fr   r  )r   r  r  r  _DISCARD_FREE_SPACE_LARGER_THANrN  rE  randomlognormvariaterS  r   	randranger  r   _len_to_seqrL  _arenasindex_allocated_blocksr  ri   sumsortrx  shuffler  _n_frees
_n_mallocs_pending_free_blocks)rn   
iterations	maxblocksblocksr  rQ  rx  r   r  r  r  r6  r  r   r  arena_blocksnarenanstartnstops                      r   	test_heapz_TestHeap.test_heap  s   
	 #17/0, z"" 	 	Av,Q22T9::D$22488AMM!6{{Y&&$Y//1I Z 	3 	3CDH$*113344 ) )*+ ) )&E5$JJ 2 25 9 95$ $U
F 4 5 5 5T%Z(DD) (,'='C'C'E'E - -#|#/ - -KE4JJ 2 25 9 95$ $U
J 8 9 9 9e,HH-
 TH_  F F F F FFFH H H HHJJJ3s88A:&& 	3 	3'*1vbqbz$t*-ac(2A2,'F??$$T4<+>+CDDD$$VQ//// $$T62222	3-	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3D 	v 	JJLLL  	 	888T677;;;T\**A...T344a9OPPPT-..22222s   G	JJJc                    t          j                    s2t          j                     |                     t           j                   t          j                    } | j        t           j        g|R   t          j        d           t          d          D ]N}t          j	        
                    d          }t          j	        
                    d          }||_        ||_        Od S )Nr2  r  r   )rh  	isenabledenabler^  disableget_thresholdset_thresholdrN  r   r  r  buddy)rn   
thresholdsrQ  r   r   s        r   test_free_from_gcz_TestHeap.test_free_from_gc  s     |~~ 	(IKKKOOBJ'''%''
(6:6666
 t 	 	A$22155A$22155AAGAGG	 	r   )	rs   rt   ru   r   r  r  r  r  ra  rb  s   @r   r  r    sz        "MO O O O O    >3 >3 >3@      r   r  c                   $    e Zd ZdefdefdefgZdS )_FoorC  rD  zN)rs   rt   ru   r:   r;   r<   _fields_rX   r   r   r  r    s+        	e	h	j
HHHr   r  c                   B    e Zd ZdZd Zed             Zd	dZd Zd Z	dS )
_TestSharedCTypesr  c                 B    t           s|                     d           d S d S rF  rG  r   s    r   r  z_TestSharedCTypes.setUp  rH  r   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_        |xj         dz  c_         t          t	          |                    D ]}||xx         dz  cc<   d S rt  )r   rC  rD  rN  r   )r   rC  rD  r  rV  ru  stringrQ  s           r   _doublez_TestSharedCTypes._double  s    	1	1	1

s3xx 	 	AFFFaKFFFF	 	r   Fc           	         t          dd|          }t          t          d|          }t          t          d|          }t          t          dd|          }|                     dt          t          d	                    |          }|                     d
d|          }t          d          |_        | 	                    | j
        ||||||f          }d|_        |                                 |                                 |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           t          d	          D ]!}	|                     ||	         |	dz             "|                     |j        t          d                     d S )NrQ  r  r[  gUUUUUU?rA  r  r  r>  r2  r   r  r  r   T   gUUUUUU?rB  r        @
hellohello)r   r;   r<   r  rs  r   rN  r   r   r   r  r   r   r   ri   r   rC  rD  )
rn   rb  rC  rD  r  rV  ru  r  r   rQ  s
             r   test_sharedctypesz#_TestSharedCTypes.test_sharedctypes  s   #qt$$$(G$///*gD111D!QT***jjd599ooDj99C$//W~~LLAq!S#v3NLOO					"%%%qw000'***"""suc***r 	0 	0A""3q61Q3////u\':':;;;;;r   c                 2    |                      d           d S )NTr[  )r  r   s    r   test_synchronizez"_TestSharedCTypes.test_synchronize#  s    D)))))r   c                    t          ddd          }t          |          }d|_        d|_        d|_        |                     |j        d           |                     |j        d           |                     |j        d           d S )Nr        @rA  r   )r  r   rC  rD  r  ri   r   )rn   rV  r  s      r   	test_copyz_TestSharedCTypes.test_copy&  s    1c7##3ii"""suc***(((((r   Nr  )
rs   rt   ru   r   r  r  r  r  r  r  rX   r   r   r  r    sx        "MC C C   [< < < <.* * *) ) ) ) )r   r  z&requires multiprocessing.shared_memoryc                       e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Z ej        ej        d
k    d          d             Z ej        ej        d
k    d          d             Zd Zd Zd Zd Zd ZdS )_TestSharedMemoryr  c                     t          | t                    rt          j        |           }n| }||j        d t          |          <   |                                 d S r   )r   rl   r   SharedMemoryr  r   r   )shmem_name_or_objbinary_data	local_smss      r   !_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_write7  s]    '-- 	*%23DEEII)I+6	's;'''(r   c                 H    |t          t          j                              z   S r   )rl   r@   r   )rn   prefixs     r   _new_shm_namez_TestSharedMemory._new_shm_name@  s     BIKK((((r   c                 X   |                      d          }t          j        |dd          }|                     |j                   |                     |j        |           |                     |j        d           |                     t          |j
                  |j                   |                     |j        t          |                     |                     t          |j                  t          |                     d|j
        d<   |                     |j
        d         d           t          j        |          }|                     |j
        d         d           |                                 t          j        |d|j        z            }|                     |j        d|j        z             |                                 |                     t                     5  t          j        dd	           d d d            n# 1 swxY w Y   |                     t                     5  t          j        d
           d d d            n# 1 swxY w Y   t"          j                            d          5 }t          j        |                      d          |                      d          g}fd|D             }||_        t          j        dd          }|                     |j                   |                     |j        |d                    ||_        t          j        dd          }|                     |j                   |                     |j        |d                    d d d            n# 1 swxY w Y   t          j        r|                      d          }	t          j        |	dd          }
|                     t0                    5  	 |                     |
j        d           t          j        |	          }|                                 |                                 |
                                 |
                                 n# |
                                 w xY w	 d d d            n# 1 swxY w Y   |                     t2                    5  t          j        |dd          }d d d            n# 1 swxY w Y   t          j        rW G d dt          j                  } ||          }|                     |j        |j                   |                                 |                     t0                    5  t          j        d          }|                                 d d d            n# 1 swxY w Y   |                                 d S )Ntest01_tsmbT   createrx  ri  r   r  r  Fr  ,multiprocessing.shared_memory._make_filename	test01_fn	test02_fnc                     g | ]}|z   S rX   rX   rq  r)   NAME_PREFIXs     r   rr  z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>s      :::D[4':::r   r   test01_dblunlinkr  c                   ,    e Zd Zej        ej        z  ZdS )O_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rs   rt   ru   r@   r  O_RDWR_flagsrX   r   r   OptionalAttachSharedMemoryr    s        bi/r   r  test01_notthere)r  r   r  r^  r  ri   r)   r6  rx  r   r  rk   rl   r   r1  rj   rC   rD   mockpatch_SHM_NAME_PREFIXside_effect_name
_USE_POSIXFileNotFoundErrorFileExistsError)rn   	name_tsmbsmsalso_smssame_smsmock_make_filenamenamesshm1shm2name_dblunlinksms_unosms_duothere_can_only_be_one_smsr  ok_if_exists_smsnonexisting_smsr  s                   @r   test_shared_memory_basicsz+_TestSharedMemory.test_shared_memory_basicsF  s   &&}55	(4cJJJ
### 	9---#...CGch777 	chC)))c#(mmSXX... 
R((( !-i88a"--- !-ibkJJJr#({333 z** 	= 	=&d<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= z** 	5 	5&e4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 ]  :< < 	3?Q'8K''44d6H6H6U6UVE ;:::E:::E-2* -TBBBDOODK(((TZq222-2* -TBBBDOODK(((TZq222#	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3& # 	% "//0BCCN#0  G
 ""#455 
% 
%	%++GL$???+8HHGNN$$$MMOOOMMOOO NN$$$$GNN$$$$$
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% 
% // 	 	 )6(B) ) )%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 # 	%0 0 0 0 0]-G 0 0 099)DD-2CH===""$$$ 011 	% 	%+89JKKO""$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 			s   +HHH3III?C5N  NNRA+Q
RQ55RR	R	*SSS)VVVc                 `   t           j                            d          5 }t          j        |                     d          |                     d          g}fd|D             }||_        t          j        dd          }|                     |j	                   | 
                    |j        |d                    ||_        t          j        dd          }|                     |j	                   | 
                    |j        |d                    d d d            d S # 1 swxY w Y   d S )	Nr  	test03_fn	test04_fnc                     g | ]}|z   S rX   rX   r  s     r   rr  zA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>  r  r   Tr   r  r   )rD   r  r  r   r  r  r  r  r^  r  ri   r  )rn   r  r  r  r  r  s        @r   test_shared_memory_recreatez-_TestSharedMemory.test_shared_memory_recreate  sg    ]  :< < 	3?Q'8K''44d6H6H6U6UVE ;:::E:::E-2* -TBBBDOODK(((TZq222-2* -TBBBDOODK(((TZq222#	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   C5D##D'*D'c                    |                      t                    5  t          j        dd          }d d d            n# 1 swxY w Y   |                      t                    5  t          j        dd          }d d d            n# 1 swxY w Y   |                      t                    5  t          j        d          }d d d            d S # 1 swxY w Y   d S )NTr?   r  r   r  )rj   rC   r   r  )rn   sms_invalids     r   "test_invalid_shared_memory_crationz4_TestSharedMemory.test_invalid_shared_memory_cration  s   z** 	K 	K'4DrJJJK	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K z** 	J 	J'4DqIIIK	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J z** 	B 	B'4DAAAK	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs3   >AA#BB
B
+CCCc           	      `   t          t          j        dz             D ]}|                     |          5  t	          j        dd          }|                     |j                   d|j        dd<   t          j	        ||	          }t          j
        |          }|                     |t          j                   |                     |j        |j                   |                     t          |j        dd                   d           |                     t          |j        dd                   d           d
|j        dd<   |                     t          |j        dd                   d
           |                     t          |j        dd                   d
           d|j        dd<   |                     t          |j        dd                   d           |                     t          |j        dd                   d           d d d            n# 1 swxY w Y   d S )Nr   protoTr  r     pickler   r  protocols   newvals   oldval)rN  pickleHIGHEST_PROTOCOLr   r   r  r^  r  r  dumpsloadsr   ri   r)   r   )rn   r  r  pickled_smssms2s        r   "test_shared_memory_pickle_unpicklez4_TestSharedMemory.test_shared_memory_pickle_unpickle  sL   62Q677 	B 	BEE** B B#03GGG
+++(! %l3??? |K00%%dM,FGGG  49555  swqs|!4!4i@@@  tx!}!5!5yAAA  )!  swqs|!4!4i@@@  tx!}!5!5yAAA )1  swqs|!4!4i@@@  tx!}!5!5yAAA-B B B B B B B B B B B B B B B	B 	Bs   GH!!H%	(H%	c                    t          t          j        dz             D ]}|                     |          5  t	          j        dd          }d|j        dd<   t          j        ||	          }|                                 |	                                 | 
                    t                    5  t          j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )
Nr   r  Tr  r  r  r   r  r  )rN  r  r  r   r   r  r  r  r   r  rj   r  r  )rn   r  r  r  s       r   .test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_object  sc   62Q677 	. 	.EE** . .#03GGG(!$l3??? 		

&&'899 . .L---. . . . . . . . . . . . . . .. . . . . . . . . . . . . . .	. 	.s6   A;C(0CC(CC(CC((C,	/C,	c                    t          j        dd          }|                     |j                   |                     | j        |j        df          }d|_        |                                 |	                                 | 
                    t          |j        d d                   d           |                     | j        |df          }d|_        |                                 |	                                 | 
                    t          |j        d d                   d           |                                 d S )NTr  r  s   howdyr   r   s   HELLO)r   r  r^  r  r   r  r)   r   r   r   ri   r   r  r   )rn   r  r   s      r   #test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processes  s%    (3???
### LL9(H%  
 
 					swrr{++X666 LL9x  
 
 					swrr{++X666		r   r%   z#not feasible in non-posix platformsc                 0   t           j                                        }|                                 |                    t          d                    }t          j        |j        j	        t          j                   |                    t          d                    }|                     t                    5  t          j        t          j                    t          j                   d d d            n# 1 swxY w Y   |                                 d S r  )r   managersSharedMemoryManagerr   ShareableListrN  r@   r@  r  r   r4  r  rj   r  r   r  )rn   smmslsl2s       r   4test_shared_memory_SharedMemoryServer_ignores_sigintzF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigint  s    &::<<		 uRyy))
 	 &-000b		** 011 	0 	0GBIKK///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	s   :1C77C;>C;zresource_tracker is posix onlyc                     d}t           j        j                            d|          \  }}}|                     |           d S )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_tracker6  sG     |1BB4MMC 	r   c                    t           j                                        |                     t                    5                      d           d d d            n# 1 swxY w Y                                    fdt          dd          D             }fdt          ddd	          D             }t          j	        |d
         j
        j                  }|                     t          |          d           t          j        |d
         j                  }|                     t          |j                  d           |d
         j        }                                 t"          j        dk    rG|                     t&                    5  t          j        |          }d d d            n# 1 swxY w Y   t           j                                        5 }|	                    d          }|                    d          }	|j
        j        }d d d            n# 1 swxY w Y   t"          j        dk    rJ|                     t&                    5  t          j	        |          }
d d d            d S # 1 swxY w Y   d S d S )Nr  r  c                 T    g | ]$}                     t          |                    %S rX   )r!  rN  )rq  rQ  smm1s     r   rr  zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>P  s-    DDD""588,,DDDr   r   r2  c                 <    g | ]}                     |           S )r  )r  )rq  r:  r*  s     r   rr  zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>Q  s*    GGGa!!q!))GGGr   r        r   r)   r.   howdy)r   r  r   rj   rC   r  r   rN  r   r!  shmr)   ri   r   r6  r  r  rx   ry   r  )rn   lollomdoppleganger_list0doppleganger_shm0	held_name
absent_shmsmm2r#  r0  	absent_slr*  s              @r   -test_shared_memory_SharedMemoryManager_basicsz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsK  sh   ';;==z** 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&

DDDDeArllDDDGGGG5S"3E3EGGG*8c!fjoNNN/00!444)6CFKHHH$5$9 : :B???FK	<7"" ""#455 H H*7YGGG
H H H H H H H H H H H H H H H %99;; 	$t##G,,B###--CI	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ <7""""#455 H H)7YGGG	H H H H H H H H H H H H H H H H H H #"sG   AA!$A!F22F69F68HH#&H#I77I;>I;c                    t          j        g d          }|                     |j        j                   |                     |j        j        t          |                     |                     t          t          |                    t          |                     | 	                    t                    5  |d          d d d            n# 1 swxY w Y   | 	                    t                    5  d|d<   d d d            n# 1 swxY w Y   |                    d          }d|d<   |                     ||                    d                     |                     |j        d           |                     t          |          d           t          j                    5  t          j        d           | 	                    t$                    5  |                    d           d d d            n# 1 swxY w Y   |                     |                    d	          d
           d d d            n# 1 swxY w Y   |                     |d         d           |                     |d         d           |                     t)          |          d           d|d
<   |                     |d
         d           d|d<   |                     |d         d           |                     |j        d           |                     t$          d          5  d|d<   d d d            n# 1 swxY w Y   |                     |d         d           d|d<   |                     |d         d           |                     |d         d           |                     t$          d          5  d|d<   d d d            n# 1 swxY w Y   |                     |d         d           |                     t$          d          5  d|d<   d d d            n# 1 swxY w Y   |                     |d         d           t          j                    5  t          j        d           |                     |                    d          d           |                     |                    d          d           |                     |                    d          d           d d d            n# 1 swxY w Y   |                     d          }t          j        ||          }	 |                     |j        j        |j        j                   |                     ||j        j                   |                     t          |          t          |                     |                     |j        |j                   d|d<   |                     |d         d           |                     |d         d           |j                                         |j                                         n# |j                                         w xY wt          j        |j        j                  }|                     |j        j        |j        j                   d|d<   |                     |d         d           |j                                         |j                                         t          j                    }	 |                     t          |          d           |                     |j        d           |                     |                    d          d           | 	                    t$                    5  |                    d            d d d            n# 1 swxY w Y   |j                                         |j                                         d S # |j                                         w xY w) N)r/     HoWdYgX9vqr%  NTri  r  r  r   r/  z8s8sdqxxxxxx?xxxxxxxx?qignore100r%  r  r  Tri  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!  r^  r0  r  rk   r)   rl   r   rj   
IndexError_get_packing_formatri   r   r   warningscatch_warningssimplefilterrC   r  r   rW  r  r  r  r   )rn   r#  current_formatname_duplicatesl_copysl_tetheredempty_sls          r   'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basicsi  s[	   (>>>
 
 	&&& 	bfk3r77+++c$r((mmSWW--- z** 	 	qEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 z** 	 	BqE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 //221)?)?)B)BCCC 	$=>>> 	R!$$$ $&& 	/ 	/!(+++"":..                                 RXXc]]A...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	A(((B&&& 	"II>	
 	
 	
 1A###1A'''$7888##J$?A A 	# 	#"BqE	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	A'''1A
+++A)))##J$?A A 	  	 BqE	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	A)))##J$?A A 	! 	! BqE	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	A))) $&& 	4 	4!(+++RXXb\\1---RXXh//333RXXh//333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 ++,>??-b~FFF
	!W[-=>>>^W[-=>>>T"XXtG}}555RY777GBKWR["---2+++KK    GK     $1rv{CCCko&:;;;BB%%%
 !.00	"S]]A...X_b111X^^E22A666"":.. % %t$$$% % % % % % % % % % % % % % %L   L!!!!!HL!!!!s   :	CCC4DD
D
%/H6G6*H66G:	:H6=G:	>,H66H:=H:L&&L*-L*%N77N;>N;9PPPBS!!S%(S%C0X" "X=0B_ 1^_ ^_ ^_ _-c                 B   t          t          j        dz             D ] }|                     |          5  t	          j        t          d                    }|                     |j        j                   t          j	        ||          }t          j
        |          }|                     |t          j                   |                     |d         d           |                     ||           d|d<   |                     |d         d           d	|d
<   |                     |d
         d	           t	          j        t          d                    }|                     |j        j                   t          j	        ||          }|                     t          |          t          |                     |j                                         |j                                         |j                                         d d d            n# 1 swxY w Y   d S )Nr   r  r2  r  r?   r  changedr_   newvaluer  i  )rN  r  r  r   r   r!  r^  r0  r  r  r  r   ri   assertIsNotr   r   )rn   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2Q677 	 	EE**  "0r;;... &R% @ @ @"(,}"="=%%#]%@B B B  !4a888  _555%."  A	222"1  !3Z@@@)7c

CC		 4555'-|I'N'N'N$  ]!3!3S9M5N5NOOO##%%%#))+++/              	 	s   GHH	H	c                    t          t          j        dz             D ]}|                     |          5  t	          j        t          d                    }t          j        ||          }|j                                         |j        	                                 | 
                    t                    5  t          j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nr   r  r2  r  )rN  r  r  r   r   r!  r  r0  r   r  rj   r  r  )rn   r  r#  rQ  s       r   5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_object  sY   62Q677 	0 	0EE** 
0 
0"0r;; &R% @ @ @ &&'899 0 0L///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0	0 	0s6   BC19CC1CC1!C"C11C5	8C5	c                    d}t          j        t          j        dd|gt           j        t           j                  5 }|j                                                                                                        }|	                                 |
                                 t          j                    t          j        z   }d}t          j                    |k     rft          j        |           t!          |dz  d          }	 t#          j        |d	          }n# t&          $ r Y n*w xY wt          j                    |k     ft)          d
          t*          j        dk    rYt/          j        d| d           |j                                                                        }|                     d|           d d d            d S # 1 swxY w Y   d S )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  r,   r  r   Fr  zJA SharedMemory segment was leaked after a process was abruptly terminated.r%   /r   z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)
subprocessPopenrx   r   PIPEr  readlinestripdecoder  r0   r   r   r   r  r
  minr   r  r  r  r@   r)   r&   
unregisterr  r  rk   )rn   r  r   r)   deadliner   r"  ro   s           r   4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_termination  s   	 s~tT3?%/_%/_6 6 6 %	J9:8$$&&,,..5577D KKMMMFFHHH~'''*>>HA.""X--
1!QKK'4T%HHHCC(   E .""X-- % &K L L L w'!! !+JJJHHH
 hmmoo,,..DEHJ J JG%	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	J %	Js7   CGDG
D'$G&D''BGG
G
N)rs   rt   ru   r   rP  r  r  r  r	  r  r  r  r  rD   rw   r@   r)   r%  r'  r9  rL  rU  rW  rd  rX   r   r   r  r  1  sd        #M  \) ) )n n n`3 3 3,B B BB B B4. . .  8 X_RW')NOO  PO. X_RW')IJJ  KJ(H H H<o" o" o"b  60 0 00J 0J 0J 0J 0Jr   r  c                   @    e Zd ZdZd Zd Zed             Zd Zd Z	dS )_TestFinalizer  c                     t           j                                        | _        t           j                                         d S r   )r   _finalizer_registryr   registry_backupr  r   s    r   r  z_TestFinalize.setUp=  s4    #7<<>> &&(((((r   c                     t          j                     |                     t          j                   t          j                            | j                   d S r   )rh  ri  r   r   rh  updateri  r   s    r   r  z_TestFinalize.tearDownA  sD    

122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                     |                                 t          j	        d           d S )Nc                       e Zd ZdS ))_TestFinalize._test_finalize.<locals>.FooNr  rX   r   r   r  rn  H          Dr   r  )r   r  )r   )r   )d10r   )rO   exitpriority)d01r   )d02)d03)r  i)STOPi)
r?  r   Finalizer   rh  ri  _exit_functionr   r@   _exit)r   r6  r  r   r   close_br   rp  rr  rs  rt  s              r   _test_finalizez_TestFinalize._test_finalizeF  s   	 	 	 	 	& 	 	 	 CEEa0000

CEE-496:::						

CEEa0000ceec498!DDDDceec498!DDDDceec498!DDDDceec498!DDDDdDIFEEEEdDIIDIIII 	


r   c                 :   |                                  \  }}|                     | j        |f          }d|_        |                                 |                                 d t          |j        d          D             }|                     |g d           d S )Nr   Tc                     g | ]}|S rX   rX   )rq  r%  s     r   rr  z/_TestFinalize.test_finalize.<locals>.<listcomp>v  s    999##999r   ru  )r   r   rp  rt  rs  rr  r  )	r   r   rz  r   r   r   r  r   ri   )rn   r6  r  r   rT  s        r   test_finalizez_TestFinalize.test_finalizen  s    99;;jLL 3:-LHH					99di!8!8999!L!L!LMMMMMr   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            n# 1 swxY w Y   	 t          j        |           t          j        |  t          j                     d S # t          j        |           t          j        |  t          j                     w xY w)Nc                      d S r   rX   rX   r   r   cbz,_TestFinalize.test_thread_safety.<locals>.cb{      Dr   c                       e Zd Z fdZdS )-_TestFinalize.test_thread_safety.<locals>.Fooc                 j    | | _         t          j        | t          j        dd                     d S )Nr   r%  )rq  )rg  r   rv  r  randint)rn   r  s    r   r   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__  s3    dBV^As5K5KLLLLLLr   N)rs   rt   ru   r   )r  s   r   r  r  ~  s5        M M M M M M Mr   r  Fc                      sZt          j        t          j                    dz             	 t          j                     n# t
          $ r} | Y d } ~ nd } ~ ww xY wXd S d S r^  )r   r
  r  r   _run_finalizersrf   )r  rB  finishs    r   run_finalizersz8_TestFinalize.test_thread_safety.<locals>.run_finalizers  s     
6=??T1222 (****    CCCCCC      s   A 
AAAc                      i } sc	 fdt          d          D             | t          j        d          <   n-# t          $ r }||                                  Y d }~nd }~ww xY wad S d S )Nc                 $    h | ]}             S rX   rX   )rq  rQ  r  s     r   	<setcomp>zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>  s    /I/I/I!/I/I/Ir   r2  r   )rN  r  getrandbitsrf   r  )r>  r  r  rB  r  s     r   make_finalizersz9_TestFinalize.test_thread_safety.<locals>.make_finalizers  s    A  0J/I/I/IuRyy/I/I/IAf(++,,    CGGIIIIIIII      s   08 
A"AA"gư>r   r   r  T)r?  rx   getswitchintervalrh  r  setswitchintervalr  r  r  r	   start_threadsr   r
  ri  )
rn   r  r  old_intervalold_thresholdr   r  r  rB  r  s
         @@@@r   test_thread_safetyz _TestFinalize.test_thread_safetyy  s   	 	 		M 	M 	M 	M 	M 	M 	M& 	M 	M 	M 		 		 		 		 		 		
	 
	 
	 
	 
	 
	 
	 ,..(**	!$'''Q1%%% '~>>> '???AG!/88  
3               	  !,///m,,JLLLLL !,///m,,JLLLLs1   A(D' =C D'  C$$D' 'C$(D' '7EN)
rs   rt   ru   r   r  r  r  rz  r}  r  rX   r   r   rf  rf  9  st        "M) ) )> > >
 % % [%N	N 	N 	N4 4 4 4 4r   rf  c                       e Zd Zd Zd ZdS )_TestImportStarc                 t   dd l }t          j                            t          j                  }t          j                            |                    |          d          }|                     |          }d |D             }d |D             }|                    d           |	                    d           |S )Nr   z*.pyc                     g | ]J}t           j                            t           j                            |          d                    d         KS )r   r   )r@   r   splitextsplit)rq  r  s     r   rr  z4_TestImportStar.get_module_names.<locals>.<listcomp>  s@    KKK27##BGMM!$4$4Q$788;KKKr   c                     g | ]}d |z   S )zmultiprocessing.rX   )rq  r  s     r   rr  z4_TestImportStar.get_module_names.<locals>.<listcomp>  s    ;;;a%);;;r   zmultiprocessing.__init__r   )
globr@   r   dirnamer   __file__r   escaper  rS  )rn   r  folderpatternfilesmoduless         r   get_module_namesz _TestImportStar.get_module_names  s    !9::',,t{{622F;;		'""KKUKKK;;7;;;1222()))r   c                 b   |                                  }t          j        dk    r@|                    d           |                    d           |                    d           n1|                    d           t          s|                    d           t
          |                    d           |D ]z}t          |           t          j        |         }|                     t          |d          |           |j
        D ]+}|                     t          ||          |d|           ,{d S )	Nr.   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes__all__z does not have attribute )r  rx   ry   r  r<  r:   r2  r  r   r3  r  )rn   r  r)   modattrs        r   test_importz_TestImportStar.test_import  s@   ''))<7""NN7888NN=>>>NN>????NN>???  CABBB=NN9::: 		 		Dt+d#COOGC33T:::  C&&7:ssDDA   		 		r   N)rs   rt   ru   r  r  rX   r   r   r  r    s2        	 	 	    r   r  c                   4    e Zd ZdZd Zed             Zd ZdS )_TestLoggingr  c                     t          j                    }|                    t          j                   |                     |d u           |                    d           |                    d           |                    t                     d S )Nzthis will not be printedznor will this)	r   
get_loggersetLevelr   
SUBWARNINGr   debuginfo	LOG_LEVEL)rn   loggers     r   test_enable_loggingz _TestLogging.test_enable_logging  sx     +--(((d*+++/000O$$$	"""""r   c                 z    t          j                    }|                    |                                           d S r   )r   r  r   getEffectiveLevel)r   r6  r  s      r   _test_levelz_TestLogging._test_level  s4     +--		&**,,-----r   c                    d}d}t          j                    }t          j                    }|j        }t          j        d          \  }}|                    |           |                     | j        |f          }|	                                 | 
                    ||                                           |                                 |                                 |                    t          j                   |                    |           |                     | j        |f          }|	                                 | 
                    ||                                           |                                 |                                 |                    |           |                    t                     d S )Nr  %   Fr   r   )level)r   r  logging	getLoggerr  r   r  r   r  r   ri   r   r   r   NOTSETr  )	rn   LEVEL1LEVEL2r  root_logger
root_levelr  r  r   s	            r   
test_levelz_TestLogging.test_level  sm    +--')) &
(-U;;;LL 0yLAA				///					'''V$$$LL 0yLAA				///					Z(((i(((((r   N)rs   rt   ru   r   r  r  r  r  rX   r   r   r  r    sR        "M# # # . . [.) ) ) ) )r   r  c                   p    e Zd ZdZed             Z ej         ee	d          d          d             Z
dS )_TestPollEintrr  c                 l    t          j        d           t          j        |t          j                   d S r^  )r   r
  r@   r@  r4  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        |f          }|                                 	 |                     t          j        d          }|                                 |	                                 |	                                 n# |	                                 w xY w| 
                    d                    |                     |j        d           t          j        t          j        |           d S # t          j        t          j        |           w xY w)NFc                      dd<   d S )NTr   rX   )rO   
got_signals    r   recordz._TestPollEintr.test_poll_eintr.<locals>.record0  s     JqMMMr   r   )r  r   )r@   r   r4  r  r   r  r   r   r
  r   r   ri   r   )rn   r  r   
oldhandlerkillerr   r  s         @r   test_poll_eintrz_TestPollEintr.test_poll_eintr-  s%   W
	! 	! 	! 	! 	!ikk]6>6::
	6\\SF\CCFLLNNNLL
L>>			OOJqM***QZ+++M&.*55555FM&.*5555s$   1D= /A	C 8D= C##9D= =!EN)rs   rt   ru   r   r  r  rD   r  r3  r4  r  rX   r   r   r  r  $  sk        "M% % [% X335GHH6 6 IH6 6 6r   r  c                   B    e Zd Z ej        ed          d             ZdS )TestInvalidHandleskipped on Windowsc                 *   t           j                            d          }	 |                                 n# t          t
          f$ r Y nw xY wd |_        n# d |_        w xY w|                     t          t
          ft           j        j        d           d S )NiMr?   )r   rB  
Connectionr  rC   r  _handlerj   r3  s     r   test_invalid_handlesz&TestInvalidHandle.test_invalid_handlesH  s    )44X>>	 IIKKKKG$ 	 	 	D	
  DLL4DL:w/)4?	E 	E 	E 	E 	Es&   6 A A
A 	A

A 	AN)rs   rt   ru   rD   rw   WIN32r  rX   r   r   r  r  F  sB        X_U011E E 21E E Er   r  c                       e Zd Zd Zd ZdS )	OtherTestc                      G d dt                     }|                     t          j        t          j        j         |            d           d S )Nc                       e Zd Zd Zd ZdS )FOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc                     dS )N   something bogusrX   rn   rx  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytes^  s    ))r   c                     d S r   rX   rn   r!  s     r   r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytes`      r   N)rs   rt   ru   r  r  rX   r   r   _FakeConnectionr  ]  s2        * * *    r   r     abc)r?  rj   r   AuthenticationErrorrB  deliver_challengern   r  s     r   #test_deliver_challenge_auth_failurez-OtherTest.test_deliver_challenge_auth_failure\  sk    	 	 	 	 	f 	 	 	
 	/=)4F)/++V	5 	5 	5 	5 	5r   c                      G d dt                     }|                     t          j        t          j        j         |            d           d S )Nc                        e Zd Zd Zd Zd ZdS )EOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc                     d| _         d S r  )r  r   s    r   r   zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__h  s    


r   c                 x    | xj         dz  c_         | j         dk    rt          j        j        S | j         dk    rdS dS )Nr   r  r  r   )r  r   rB  	CHALLENGEr  s     r   r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesj  s>    

a

:??*5??Z1__--sr   c                     d S r   rX   r  s     r   r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesq  r  r   N)rs   rt   ru   r   r  r  rX   r   r   r  r  g  sA                r   r  r  )r?  rj   r   r  rB  answer_challenger  s     r   "test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failuref  sk    	 	 	 	 	f 	 	 	 	/=)4E)/++V	5 	5 	5 	5 	5r   N)rs   rt   ru   r  r  rX   r   r   r  r  Y  s2        5 5 55 5 5 5 5r   r  c                 &    | xj         dz  c_         d S r   )r@  )nss    r   initializerr  {  s    GGqLGGGGr   c                   &    e Zd Zd Zd Zd Zd ZdS )TestInitializersc                     t          j                    | _        | j                                        | _        d| j        _        d S r  )r   Managermgrr  r  r@  r   s    r   r  zTestInitializers.setUp  s4    "*,,($$&&r   c                 j    | j                                          | j                                          d S r   )r  r  r   r   s    r   r  zTestInitializers.tearDown  s)    r   c                 V   t           j                                        }|                     t          |j        d           |                    t          | j        f           |                     | j        j	        d           |
                                 |                                 d S r   )r   r  SyncManagerrj   	TypeErrorr   r  r  ri   r@  r  r   )rn   r  s     r   test_manager_initializerz)TestInitializers.test_manager_initializer  s    $0022)QWa000	dgZ(((q)))	

	r   c                 &   |                      t          t          j        d           t          j        dt          | j        f          }|                                 |                                 |                     | j        j	        d           d S )Nr   )r  )
rj   r  r   r  r  r  r   r   ri   r@  rK  s     r   test_pool_initializerz&TestInitializers.test_pool_initializer  sr    )_%9qIII K$'<<					q)))))r   N)rs   rt   ru   r  r  r  r   rX   r   r   r  r  ~  sP          
    * * * * *r   r  c                 `    	 |                      d          }d S # t          j        $ r Y d S w xY w)NF)block)r   r  r  )r   items     r   _this_sub_processr    sB    uu5u!!=   s    --c                      t          j                    } t          j        t          | f          }d|_        |                                 |                                 d S rI  )r   r   r   r  r   r   r   )r    subProcs     r   _test_processr    sM    !##E%->eXNNNGGNMMOOOLLNNNNNr   c                     | | z  S r   rX   r  s    r   _afuncr	    r  r   c                      t          j        d          } |                     t          g d          }|                                  |                                  d S )Nr_   r  )r   r  r  r_   r   r  r  )r   r  r  r	  r   r   )r  rC  s     r   pool_in_processr    sM    !,,,D...//AJJLLLIIKKKKKr   c                   6    e Zd Zd Zed             Zd Zd ZdS )
_file_likec                 "    || _         d | _        d S r   )	_delegate_pid)rn   delegates     r   r   z_file_like.__init__  s    !			r   c                 h    t          j                    }|| j        k    r|| _        g | _        | j        S r   )r@   r   r  _cacher  s     r   cachez_file_like.cache  s0    ikk$)DIDK{r   c                 :    | j                             |           d S r   )r  rS  r  s     r   r/  z_file_like.write  s    
$r   c                 x    | j                             d                    | j                             g | _        d S )Nr  )r  r/  r   r  r  r   s    r   flushz_file_like.flush  s1    RWWTZ00111r   N)rs   rt   ru   r   propertyr  r/  r  rX   r   r   r  r    s\             X         r   r  c                        e Zd Zd Zd Zd ZdS )TestStdinBadfiledescriptorc                     t          j        t                    }|                                 |                                 d S Nr   )r   r   r  r   r   )rn   r  s     r   test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_process  s3    &m<<<

		r   c                     t          j        t                    }|                                 |                                 d S r  )r   r   r  r   r   rK  s     r   test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_process  s3    #?;;;					r   c                    t          j                    }t          |                              d           t	          j        fd          }                                 |                                dk    sJ d S )NrV  c                  ,                                      S r   )r  )flikes   r   r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>  s    ekkmm r   r   )r  r  r  r/  r   r   r  rA  )rn   sior  r"  s      @r   test_flushingz(TestStdinBadfiledescriptor.test_flushing  st    kmm3E&.C.C.C.CDDD||~~&&&&&&r   N)rs   rt   ru   r  r  r$  rX   r   r   r  r    sA          
  
' ' ' ' 'r   r  c                   ~    e Zd Zed             ZddZed             ZddZd Zd Z	d Z
ed	             Zd
 Zd ZdS )TestWaitc                     t          d          D ]T}|r(t          j        t          j                    dz             |                    |t          j                    f           U|                                 d S )Nr2  r,   )rN  r   r
  r  r   r@   r   r   )r   r  slowrQ  s       r   _child_test_waitzTestWait._child_test_wait  sk    r 	% 	%A 0
6=??3.///FFAry{{#$$$$						r   Fc                 "   ddl m} g }g g }t          d          D ]}t          j        d          \  }}t          j        | j        ||f          }d|_        |                                 |	                                 |
                    |           
                    |           |                     |j                   |rs ||          D ]e}	 |                                }	|
                    |	           -# t          $ r, |                    |           |	                                 Y bw xY w|s|                                 t#          fdt          d	          D                       }
|                     ||
           d S )
Nr   r/   r_   Fr   r   Tc              3   4   K   | ]}D ]}||j         fV  d S r   r  )rq  rQ  r   rx  s      r   r  z%TestWait.test_wait.<locals>.<genexpr>  s6      GGGGA1ae*GGGGGGGr   r2  )multiprocessing.connectionr0   rN  r   r   r   r)  r   r   r   rS  r^  r   r   r  r  r  r  ri   )rn   r(  r0   readersmessagesrQ  r7  r  r   r  rU  rx  s              @r   	test_waitzTestWait.test_wait  s   333333q 	$ 	$A"'u555DAq't/DAt9UUUAAHGGIIIGGIIINN1LLOOOOOAF#### 	)T']] ) ))&&((C
 OOC((((	     NN1%%%GGIIIII	  	) 	GGGGeBiiGGGGG8,,,,,s   D3D87D8c                 L   t          j                     }|                    |           t          d          D ]W}|r(t          j        t          j                    dz             |                    d|z                      d                     X|                                 d S )Nr2  r,   %s
r}  )	rt  r  rN  r   r
  r  rz  r   r   )r   r   r(  r   rQ  s        r   _child_test_wait_socketz TestWait._child_test_wait_socket  s    MOO			'r 	4 	4A 0
6=??3.///IIvz))'223333						r   c                     ddl m} t          j        t          j        df          }|                                }g }g }i }t          d          D ]i}t          j	        | j
        ||f          }	d|	_        |	                                 |                    |	           |                     |	j                   jt          d          D ]3}|                                \  }
}|                    |
           g ||
<   4|                                 |rl ||          D ]^}
|
                    d          }|s*|                    |
           |
                                 C||
                             |           _|ld                    d t          d	          D                                           d
          }|                                D ]+}|                     d                    |          |           ,d S )Nr   r/   r_   r   Tr  r  c              3       K   | ]	}d |z  V  
dS )r1  NrX   r  s     r   r  z,TestWait.test_wait_socket.<locals>.<genexpr>.  s&      99!6A:999999r   r2  r}  r   )r,  r0   rt  ru  r   r  rv  rN  r   r   r2  r   r   rS  r^  r   rI  r   r   r  r   rL  ri   )rn   r(  r0   r  r  r-  rx  dicrQ  r   r7  r  r  rU  vs                  r   test_wait_socketzTestWait.test_wait_socket  s   333333 -"4a!899}}q 	$ 	$A't/K.2D\; ; ;AAHGGIIILLOOOOOAF####q 	 	A88::DAqNN1CFF				 	'T']] ' 'ffRjj 'NN1%%%GGIIIIFMM#&&&&  	' 7799uRyy99999@@II 	4 	4ASXXa[[(3333	4 	4r   c                 0    |                      d           d S rK  )r/  r   s    r   test_wait_slowzTestWait.test_wait_slow2  s    tr   c                 0    |                      d           d S rK  )r7  r   s    r   test_wait_socket_slowzTestWait.test_wait_socket_slow5  s    d#####r   c                 2   ddl m} d}t          j                    \  }}t	          j                    } |||g|          }t	          j                    |z
  }|                     |g            |                     ||dz             |                     ||dz             |	                    d            t	          j                    } |||gd          }t	          j                    |z
  }|                     ||g           |                     |d           d S )Nr   r/   r   r  r  r  皙?)
r,  r0   r   r   r   r   ri   r1  rK  r   )rn   r0   rU  r   r   r   r   r7  s           r   test_wait_timeoutzTestWait.test_wait_timeout8  s   333333#%%1  dAq68$$  5(b!!!x!|,,,5(S.111	t  dAq62  5(qc"""s#####r   c                 V    |                                  t          j        |           d S r   )r_  r   r
  )r   rn  periods      r   signal_and_sleepzTestWait.signal_and_sleepO  s%    
6r   c                 .   ddl m} d}d }t          j        d          }t          j                    \  }}t          j        | j        ||f          }|                                 |                     |j	        t                     |                     |                    d                     t          j                    } |||j	        |g|dz             }	t          j                    |z
  }
|                     |	|j	        g           |                     |
|dz              |                     |
|dz
             |                    d            t          j                    } |||j	        |gd          }	t          j                    |z
  }
|                      ||	           ||j	        |g                     |                     |
d	           |                    d            t          j                    } |||j	        |gd          }	t          j                    |z
  }
|                      ||	           |||j	        |g                     |                     |
d	           |                                 |                                 d S )
Nr   r/   r  c                 &    t          | d           S )Nc                      t          |           S r   )rP  r  s    r   r  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>X  s    BqEE r   )rd  )r  )r  s    r   r  z,TestWait.test_wait_integer.<locals>.<lambda>X  s    F1//::: r   r   r  r   r  r=  )r,  r0   r   rq  r   r   rA  r   r   r]  rE  r   r^  r   r   ri   r1  rK  r   r  r   )rn   r0   rU  sorted_rn  r   r   r   r   r   r7  s              r   test_wait_integerzTestWait.test_wait_integerT  sk   333333::'**#%%1#4+@*-x: : : 	
			aj#...B//000  dAqz1%x"}55  5(qzl+++x!|,,,5(Q,///	t  dAqz1%r**  5(ww
A'?'?@@@s###	t  dAqz1%r**  5(ww1:q/A'B'BCCCs###		r   c                 T   ddl m} t          j                    \  }}t	          j                    } ||gd          }t	          j                    |z
  }|                     |g            |                     |d           |                                 |                                 d S )Nr   r/   r?   r   r   )	r,  r0   r   r   r   r   ri   r1  r   )rn   r0   r   r   r   r   s         r   test_neg_timeoutzTestWait.test_neg_timeout  s    333333#%%1NdA3###Nq b!!!1										r   Nr  )rs   rt   ru   r  r)  r/  r2  r7  r9  r;  r>  rA  rF  rH  rX   r   r   r&  r&    s          [- - - -<   [!4 !4 !4 !4F  $ $ $$ $ $.   [) ) )V	 	 	 	 	r   r&  c                   v    e Zd Z ej        ed          d             Z ej        ed          d             ZdS )TestInvalidFamilyr  c                     |                      t                    5  t          j                            d           d d d            d S # 1 swxY w Y   d S )Nz\\.\testrj   rC   r   rB  rD  r   s    r   test_invalid_familyz%TestInvalidFamily.test_invalid_family  s    z** 	= 	=&//<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=    AAAz skipped on non-Windows platformsc                     |                      t                    5  t          j                            d           d d d            d S # 1 swxY w Y   d S )Nz/var/test.piperL  r   s    r   test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32  s    z** 	B 	B&//0@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BrN  N)	rs   rt   ru   rD   rw   r  rM  r  rP  rX   r   r   rJ  rJ    so        X_U011= = 21= X BCCB B DCB B Br   rJ  c                   @    e Zd Zed             Zed             Zd ZdS )	TestFlagsc                 ^    |                     t          t          j                             d S r   )r   r   rx   flagsr   r6  s     r   run_in_grandchildzTestFlags.run_in_grandchild  s$    		%	""#####r   c                    dd l }t          j        d          \  }}t          j        | j        |f          }|                                 |                                }|                                 |                                 |                                 t          t          j                  |f}t          |                    |                     d S )Nr   Fr   r   )jsonr   r   r   rV  r   r   r   r   r   rx   rT  printr  )r   rX  r7  r  r   grandchild_flagsrT  s          r   run_in_childzTestFlags.run_in_child  s    #51111#3+@tLLL				6688									sy!!#34djj     r   c                     dd l }d}t          j        t          j        dddd|g          }|                    |                    d                    \  }}|                     ||           d S )Nr   zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()rY  z-Sz-Or  r}  )rX  r[  check_outputrx   r   r  r`  ri   )rn   rX  progr!  child_flagsrZ  s         r   
test_flagszTestFlags.test_flags  sv    +&^T4tT:< <(,

4;;w3G3G(H(H%%&677777r   N)rs   rt   ru   r  rV  r[  r`  rX   r   r   rR  rR    sW        $ $ [$ 
! 
! [
!8 8 8 8 8r   rR  c                   *    e Zd Zed             Zd ZdS )TestTimeoutsc                    t          j        d           |                    d           |                                 t          j                            |          }|                    d           |                                 d S )Nr   r  r  )r   r
  r   r   r   rB  rH  )r   childr   r6  s       r   _test_timeoutzTestTimeouts._test_timeout  sa    
1

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

r   c                    t          j                    }	 t          j        d           t          j        d          \  }}t          j                            d          }t          j        | j        ||j	        f          }|
                                 |                                 |                     |                                d           |                                 |                                }|                     |                                d           |                                 |                                 t          |           t          j        |           d S # t          j        |           w xY w)	Nr,   Tr   AF_INETr@  r   r  r  )rt  getdefaulttimeoutsetdefaulttimeoutr   r   rB  rD  r   re  r   r   r   ri   r   rI  r$   )rn   old_timeoutparentrd  r  r   r6  s          r   r8  zTestTimeouts.test_timeout  sB   .00	2$S)))+0===MFE*3393EEA't/A.3QY-?A A AAGGIIIKKMMMV[[]]C000LLNNN88::DTYY[[#...JJLLLGGIIIOOO$[11111F$[1111s   EE0 0FN)rs   rt   ru   r  re  r8  rX   r   r   rb  rb    s<          [2 2 2 2 2r   rb  c                       e Zd Zd ZdS )TestNoForkBombc                 8   t          j                    }t          j                            t          j                            t                    d          }|dk    rWt          j        j	        
                    ||          \  }}}|                     |d           |                     d|           d S t          j        j	                            ||          \  }}}|                     |                                d           |                     |d           d S )Nzmp_fork_bomb.pyre   r   s   RuntimeErrors   123)r   rN   r@   r   r   r  r  r@  r   r   assert_python_failureri   rk   r  r  )rn   rv  r)   rc  r  ro   s         r   test_noforkbombzTestNoForkBomb.test_noforkbomb  s    -//w||BGOOH557HII<<<5KKDRTUULBSS#&&&MM/3/////<5FFtRPPLBSSZZ\\6222S#&&&&&r   N)rs   rt   ru   rp  rX   r   r   rm  rm    s#        
' 
' 
' 
' 
'r   rm  c                   *    e Zd Zed             Zd ZdS )TestForkAwareThreadLockc                 B   |dk    rXt          j        | j        |dz
  |f          }|                                 |                                 t          |           n,|                    t          t          j	                             |                                 d S )Nr   r   )
r   r   rd  r   r   r$   r   r   r   _afterfork_registry)r   r  r6  r   s       r   rd  zTestForkAwareThreadLock.child  s    q55'sy!T{KKKAGGIIIJJLLLOOOOIIc$233444

r   c                    t          j        d          \  }}t          j                    }t	          t          j                  }t          j        | j        d|f          }|                                 |	                                 |
                                }t          |           |                     ||           d S )NFr   r   )r   r   r   ForkAwareThreadLockr   rt  r   rd  r   r   r   r$   assertLessEqual)rn   r7  r  r  old_sizer   new_sizes          r   rc  z!TestForkAwareThreadLock.test_lock  s    #E**1$&&t/00#4:QFCCC								6688QXx00000r   N)rs   rt   ru   r  rd  rc  rX   r   r   rr  rr    s>        
   [	1 	1 	1 	1 	1r   rr  c                   6    e Zd Zd Zd Zed             Zd ZdS )TestCloseFdsc                 H   t           r%t          j                                                    S t          j                                                    }g }|dk     r/|                    |           t	          j        |          }|dk     /|D ]}t	          j        |           |S )Nr  )r  rt  detachrS  r@   dupr   )rn   r  to_closerC  s       r   get_high_socket_fdzTestCloseFds.get_high_socket_fd  s     	 =??))+++ ''))BHr''###VBZZ r''   Ir   c                     t           r?t          j        t          j        t          j        |                                           d S t          j        |           d S )N)r  )r  rt  rg  SOCK_STREAMr   r@   )rn   r  s     r   r   zTestCloseFds.close$  sI     	M&.&*<RHHHNNPPPPPHRLLLLLr   c                    	 t          j        |t           j        t           j                  }|                                 |                    d            d S # t          $ r }|                    |           Y d }~d S d }~ww xY wr   )rt  fromfdrg  r  r   r   rf   )r   r6  r  r   r  s        r   _test_closefdszTestCloseFds._test_closefds*  s}    	b&.&2DEEA GGIIIIIdOOOOO	  	 	 	IIaLLLLLLLLL	s   *A 
B!A<<Bc                 b   t           st          j        d          t          j                    \  }}|                                 }	 t          j        | j        ||f          }|                                 |	                                 |
                                }t          |           | 	                    |           |	                                 |	                                 nB# | 	                    |           |	                                 |	                                 w xY wt          j                    dk    r|                     |d            d S d}|                     |t                     |                     |j        t"          j        k    p
|j        |k    |           d S )Nzrequires fd picklingr   re   i6'  )r<  rD   rE   r   r   r  r   r  r   r   r   r$   rN   rj  r   r  r   r  r  winerror)rn   r  r  r  r   r  WSAENOTSOCKs          r   test_closefdzTestCloseFds.test_closefd4  sz    	<#$:;;;(-//$$&&
	't/B.4b\; ; ;AGGIIILLNNNAOOOJJrNNNLLNNNLLNNNN JJrNNNLLNNNLLNNNN+--77MM!T"""""K!!!W---OOAGu{2 6J+5q: : : : :s   A(C- -?D,N)rs   rt   ru   r  r   r  r  r  rX   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dS )TestIgnoreEINTRc                     d }t          j         t           j        |           |                    d           |                                }|                    |           |                    d| j        z             d S )Nc                     d S r   rX   r  frames     r   r1  z-TestIgnoreEINTR._test_ignore.<locals>.handlerY  r  r   ready   x)r4  r  r   r   r  CONN_MAX_SIZE)r   r6  r1  rC  s       r   _test_ignorezTestIgnoreEINTR._test_ignoreW  ss    	 	 	fng...		'IIKK		!s0011111r   r  r  c                    t          j                    \  }}	 t          j        | j        |f          }d|_        |                                 |                                 |                     |                                d           t          j
        d           t          j        |j        t          j                   t          j
        d           |                    d           |                     |                                d           t          j
        d           t          j        |j        t          j                   |                     |                                d| j        z             t          j
        d           |                                 |                                 d S # |                                 w xY w)Nr   Tr  r,   i  r  )r   r   r   r  r   r   r   ri   r   r   r
  r@   r@  r   r4  r  r   r  r  r   r6  s       r   test_ignorezTestIgnoreEINTR.test_ignorea  sd   */11j	't/@.8]< < <AAHGGIIITYY[['222JsOOOGAE6>***JsOOOIIdOOOTYY[[$///JsOOOGAE6>***T__..t7I0IJJJJsOOOFFHHHJJLLLLLDJJLLLLs   FF: :Gc                 >   d }t          j         t           j        |           t          j                                        5 }|                    |j                   |                                }|                    d           d d d            d S # 1 swxY w Y   d S )Nc                     d S r   rX   r  s     r   r1  z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerz  r  r   welcome)r4  r  r   rB  rD  r   r   rI  )r   r6  r1  r  r   s        r   _test_ignore_listenerz%TestIgnoreEINTR._test_ignore_listenerx  s    	 	 	fng...'0022 	aIIai   

AFF9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABBBc                    t          j                    \  }}	 t          j        | j        |f          }d|_        |                                 |                                 |                                }t          j	        d           t          j        |j        t          j                   t          j	        d           t           j                            |          }|                     |                                d           |                                 |                                 d S # |                                 w xY w)Nr   Tr,   r  )r   r   r   r  r   r   r   r   r   r
  r@   r@  r   r4  r  rB  rH  ri   r   )rn   r6  r  r   r   rK  s         r   test_ignore_listenerz$TestIgnoreEINTR.test_ignore_listener  s   */11j	't/I.8]< < <AAHGGIIIiikkGJsOOOGAE6>***JsOOO$/66w??FV[[]]I666FFHHHJJLLLLLDJJLLLLs   DD4 4E
N)rs   rt   ru   maxr   PIPE_MAX_SIZESOCK_MAX_SIZEr  r  r  rD   r  r3  r4  r  r  r  rX   r   r   r  r  R  s         C-w/DEEM2 2 [2 X335GHH  IH,   [ X335GHH  IH  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dS )TestStartMethodc                 R    |                     t          j                               d S r   )r   r   rN   rU  s     r   _check_contextzTestStartMethod._check_context  s#    		/24455555r   c                    |                     d          \  }}|                    | j        |f          }|                                 |                                 |                                }|                                 |                                 |                     ||                                           d S )NFr   r   )	r   r   r  r   r   r   r   ri   rN   )rn   rq   r7  r  r   child_methods         r   check_contextzTestStartMethod.check_context  s    xxux%%1KKt2!K>>								vvxx					s';';'='=>>>>>r   c                    dD ]}	 t          j        |          }n# t          $ r Y $w xY w|                     |                                |           |                     |                                |           |                     t          |j        d           |                     t          |j        d            |                     |           d S )Nre   rL   r  rL   )	r   rR  rC   ri   rN   rj  rj   rh   r  )rn   methodrq   s      r   r8  zTestStartMethod.test_context  s    5 		$ 		$F%1&99   S1133V<<<MM#//++S111j#*>HHHj#*>EEEs####		$ 		$s   
((c                    	 t          j        d          }n"# t          $ r t          j        d          w xY w|                     t          d          5  |                    g d           d d d            d S # 1 swxY w Y   d S )Nr  zforkserver should be availablez&module_names must be a list of stringsr  )r   rR  rC   rD   rE   rW  r  set_forkserver_preload)rn   rq   s     r   test_context_check_module_typesz/TestStartMethod.test_context_check_module_types  s    	F!-l;;CC 	F 	F 	F#$DEEE	F##I/WXX 	2 	2&&yyy111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s    6A99A= A=c                 v   t          j        t                     d}t          j                    }	 dD ]<}	 t          j        |d           n# t
          $ r Y 'w xY w|                     t          j                    |           t          j                    }|                     |                                |           |                     t          |          j
                                                            |                     |                     |j        j
                                                            |                     |                     t                      |dz  }>	 t          j        |d           n# t          j        |d           w xY w|                     |d           d S )Nr   r  Trc   r   )r   r  PRELOADrN   rh   rC   ri   rR  r   r  rs   lower
startswithr   r  r6  )rn   r  
old_methodr  rq   s        r   test_set_getzTestStartMethod.test_set_get  s   .w777$577
	E9  #4V4HHHHH!   H  !A!C!CVLLL%133  !5!5!7!7@@@S		 2 8 8 : : E Ef M MNNNK(..00;;FCCE E E""?333
 ,ZtDDDDDO,ZtDDDDDq)))))s/   F AF 
AF ADF F c                     t          j                    }t          j        dk    r|                     |dg           d S |                     |ddgk    p|ddgk    p|g dk    p|g dk               d S )Nr.   rL   re   r  )rL   re   r  )r   get_all_start_methodsrx   ry   ri   r   )rn   methodss     r   test_get_allzTestStartMethod.test_get_all  s    !799<7""Wwi00000OOG'88 G#'88G#'F'F'FFG $'F'F'FFH H H H Hr   c                 (   t          j                    dk    r|                     d           t          j                            t          j                            t                    d          }t          j	        j
                            |          \  }}}|                                }|                                }|                                dk    s|dk    r5t          |           t          |           |                     d           d S d S )Nr  z*test only relevant for 'forkserver' methodzmp_preload.pyokr  z(failed spawning forkserver or grandchild)r   rN   r   r@   r   r   r  r  r@  r   r   r  r`  r  rY  rg   )rn   r)   rc  r  ro   s        r   test_preload_resourcesz&TestStartMethod.test_preload_resources  s    +--==MMFGGGw||BGOOH55GG|1BB4HHCjjlljjll::<<43"99#JJJ#JJJII@AAAAA $-9r   r.   z*Only Spawn on windows so no risk of mixingavoids redundant testing.c                    dD ]}t          j        d                                          }t          j        |          }|                    t          |f          }d}|                     t          |          5  |                                 d d d            n# 1 swxY w Y   dD ]}t          j                    D ]}t          j        |                                          }t          j        |          }|                    t          |f          }|                                 |	                                 d S )N)rL   r  re   r   zA SemLock created in a fork)
r   rR  r   r   r!   rW  r0  r   r  r   )rn   process_methodr    process_ctxr   err_msgqueue_methods          r   test_mixed_startmethodz&TestStartMethod.test_mixed_startmethod  sq   
 6 	 	N#/77==??E)5nEEK##;eX#FFA3G''g>>  			               4 	 	L"1"G"I"I  '3LAAGGII-9.II''{%'JJ				 	s   9BB	!B	N)rs   rt   ru   r  r  r  r8  r  r  r  r  rD   rw   rx   ry   rY   r  rX   r   r   r  r    s        6 6 [6? ? ?
$ 
$ 
$2 2 2* * *,H H H
B 
B 
B X_S\W,AC C  !<==  >=C C  r   r  r,  c                   N    e Zd Zd Zd Zd Zd Zd Zed             Z	d Z
d Zd	S )
TestResourceTrackerc                    d}t           j        D ]}|                     |          5  |dk    r	 d d d            -t          j                    \  }}t          j        t          j        dd|	                    ||          g|gt
          j
                  }t          j        |           t          |dd	
          5 }|                                                                                    d          }|                                                                                    d          }d d d            n# 1 swxY w Y   t!          ||           |                                 |                                 t'          j                    t*          j        z   }	t'          j                    |	k     rt'          j        d           	 t!          ||           nH# t0          $ r;}
|                     |
j        t4          j        t4          j        f           Y d }
~
n2d }
~
ww xY wt'          j                    |	k     t;          d| d          |j                                                            d          }|j                                         d	                    |          }|                      ||           |                      |d|z             d d d            n# 1 swxY w Y   d S )Na+  if 1:
            import time, os, tempfile
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")
            rand = tempfile._RandomNameSequence()


            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*   nooprY  r  )r  r*   )pass_fdsr  r(  T)r  r}  r  zA z= resource was leaked after a process was abruptly terminated.r  z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r&   r(   r   r@   piper[  r\  rx   r   r   r]  r   r  r^  r  r`  r+   r  r0   r   r   r   r  r
  r  rk   r  ENOENTEINVALr  r  r  r  )rn   r  r*   r7  r  r   r  name1name2rc  r  ro   rU  s                r   test_resource_trackerz)TestResourceTracker.test_resource_tracker  s   < &4 &	P &	PEE** %P %PF??%P %P %P %P %P %P %P wyy1$cn%)4au1M1M&O/0c,6O= = = !T4000 BAJJLL//1188AAEJJLL//1188AAEB B B B B B B B B B B B B B B !...>++g.BBn&&11JrNNN(6666"    agel/KLLL		 n&&11 )0U 0 0 01 1 1 hmmoo,,W55   &&,f!'# '#    h///  &F&NOOOK%P %P %P %P %P %P %P %P %P %P %P %P %P %P %P&	P &	Psh   K#BK#=A3D<0K#<E  K#E BK#GK#
H!&1HK#H!!B6K##K'	*K'	c                    ddl m} |j        }|@t          j        |t
          j                   t          j        |t
          j                    t          j
                    5  t          j        d           |                                 d d d            n# 1 swxY w Y   |j        }t          j        ||           t          j        d           t          j        d          }t          j
        d          5 }t          j        d	           |                                }|                                 |                                 t)          j        |          }~t-          j                     |                      |                       |r|                     t5          |          d
           |d         }	|                     t9          |	j        t<                               |                     dt?          |	j                   v            n#|                     t5          |          d           d d d            d S # 1 swxY w Y   d S )Nr   _resource_tracker)r   r<  r+  rL   T)r  alwaysr   zresource_tracker: process died)! multiprocessing.resource_trackerr  r  r@   r@  r4  rA  r   wait_processrD  rE  rF  r  r   r
  r   rR  rq  r^  r_  rf  rg  rh  ri  r   ri   r   r   
issubclasscategoryUserWarningrl   message)
rn   r  
should_dier  r   rq   all_warnrn  rk  the_warns
             r   check_resource_tracker_deathz0TestResourceTracker.check_resource_tracker_deathI  s    	GFFFFF$?GC((( ????$&& 	/ 	/!(+++,,...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/  $
V
3)'22$D111 	3X!(+++--//CKKMMMKKMMMS!!B JLLLbbdd### 3  X222#A;
8+<k J JKKK @#&x'7#8#8!9 : : : :   X222%	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s%   #)BBB<D=II
I
c                 F    |                      t          j        d           d S rG  )r  r4  r  r   s    r   test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigintn  s     ))&-?????r   c                 F    |                      t          j        d           d S rG  )r  r4  r<  r   s    r   test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigtermr  s     ))&.%@@@@@r   c                 F    |                      t          j        d           d S rK  )r  r4  rA  r   s    r   test_resource_tracker_sigkillz1TestResourceTracker.test_resource_tracker_sigkillv  s     ))&.$?????r   c                     ddl m} |                                 |j        d |fv }||                                z  }|                     |           d S )Nr   r  )r  r  r  r  _check_aliver   )r6  r   r  reuseds       r   _is_resource_tracker_reusedz/TestResourceTracker._is_resource_tracker_reusedz  sh    FFFFFF((*** #'D#;6#00222		&r   c                    ddl m} |                                 |j        }t	          j        d          \  }}t	          j        | j        ||f          }|                                 |	                                }|
                                 |                                 |                                 |                     |           d S )Nr   r  Fr   r   )r  r  r  r  r   r   r   r  r   r   r   r   r   )rn   r  r   r7  r  r   is_resource_tracker_reuseds          r   test_resource_tracker_reusedz0TestResourceTracker.test_resource_tracker_reused  s    FFFFFF((***$#51111#4+K*+S3 3 3				%&VVXX" 	
								233333r   c                     d}ddt          |          z
  z  }|                     t                    5  t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r  )r   rj   rC   r&   register)rn   r*   too_long_name_resources      r   test_too_long_name_resourcez/TestResourceTracker.test_too_long_name_resource  s      !$c%jj(8!9z** 	E 	E%&<eDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   AAAN)rs   rt   ru   r  r  r  r  r  rP  r  r  r  rX   r   r   r  r    s        HP HP HPT#3 #3 #3J@ @ @A A A@ @ @   \4 4 4$E E E E Er   r  c                   Z    e Zd Zed             Zd Zd Zej        j	        d             Z
dS )TestSimpleQueuec                 &   |                                  	 |                    |                                           |                    |                                           |                                 d S # |                                 w xY wr   )r0   r   r  r_  r  s       r   _test_emptyzTestSimpleQueue._test_empty  s~    	&IIekkmm$$$IIekkmm$$$##%%%%%##%%%%s   AA: :Bc                    t          j                    }t          j                    }t          j                    }t          j        | j        |||f          }d|_        |                                 |                     |                                           |	                                 |
                                 |                     |                                           |                     |                                d           |                     |                                d           |                     |                                           |                                 d S )Nr   TF)r   SimpleQueuer  r   r  r   r   r   r  r_  r0   r   ri   r   r   )rn   r    r  r  r  s        r   
test_emptyzTestSimpleQueue.test_empty  s,   +--)/11-355&#*=>
 
 
 

&&&  """'''d+++e,,,&&&		r   c                 |    t          j                    }|                                 |                                 d S r   )r   r  r   rn   r    s     r   rl  zTestSimpleQueue.test_close  s.    +--r   c                     t          j                    }|                                 |                     |j        j                   |                     |j        j                   d S r   )r   r  r   r   _readerr;  _writerr  s     r   test_closedzTestSimpleQueue.test_closed  sQ    +--,---,-----r   N)rs   rt   ru   r  r  r  rl  r@  r   cpython_onlyr  rX   r   r   r  r    sl        & & [&  0   
\. . . . .r   r  c                       e Zd Zd ZdS )TestPoolNotLeakOnFailurec                    dg  G fdd          }|                      t          d          5  t          j                            dt
          j                            |                    }|                                 |	                                 d d d            n# 1 swxY w Y   | 
                    t          d D                                  d S )	Nr  c                   6    e Zd Z fdZfdZd Zd Zd ZdS )RTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                 \    d| _         d | _        d | _                            |            d S )NzFake Process)r)   r   r  rS  )rn   rP   forked_processess     r   r   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__  s2    *	 $!
 ''-----r   c                 J    dk    rt          d          dz  d| _        d S )Nr   Manually induced OSErrorr   r  )r  r  )rn   will_fail_ins    r   r   zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.start  s2    1$$!"<===!&


r   c                     d| _         d S )Nstoppingr  r   s    r   r  z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminate  s    '


r   c                 .    | j         dk    r	d| _         d S d S )Nr  stoppedr  r   s    r   r   zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.join  s"    :++!*DJJJ ,+r   c                 .    | j         dk    p
| j         dk    S )Nr  r  r  r   s    r   r   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_alive  s    zY.J$*
2JJr   N)rs   rt   ru   r   r   r  r   r   )r  r  s   r   FailingForkProcessr    sy        . . . . .' ' ' ' '( ( (+ + +K K K K Kr   r  r   r   )r   )contextc              3   >   K   | ]}|                                 V  d S r   r  )rq  r#   s     r   r  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>  s.      CCw  ""CCCCCCr   )rW  r  r   r  r  rD   r  	MagicMockr   r   r   rA  )rn   r  r   r  r  s      @@r   test_release_unused_processesz6TestPoolNotLeakOnFailure.test_release_unused_processes  sY    	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K0 ##G-GHH 	 	$))!X]5L5L* 6M 6, 6,) - -AGGIIIFFHHH		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	CC2BCCCCC	E 	E 	E 	E 	Es   A(B&&B*-B*N)rs   rt   ru   r  rX   r   r   r  r    s(        $E $E $E $E $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*d&S )*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                 x    |                                  | _        | j                                         d | _        d S r   )manager_classr   r   r  r   s    r   r  zTestSyncManagerTypes.setUp  s4    ))++			r   c                     | j         K| j                                         r2| j                                          | j                                          | j                                         d | _        d | _         d S r   )r  r   r  r   r   r  r   s    r   r  zTestSyncManagerTypes.tearDown  si    9 TY%7%7%9%9 I!!!INN			r   c                 ,    t          j                     d S r   )r   reap_childrenr'  s    r   r  zTestSyncManagerTypes.setUpClass!  s    r   c                    t          | j                   t          j                    }d}t	          t          j                              dk    rt          j        |           |dz  }t          j                    |z
  }|dk    r?dt          j	        _
        t          j        dt          j                     d| d           d S t	          t          j                              dk    d S d S )	Nro  r   r  r  T"multiprocessing.Manager still has  active children after  seconds)r$   r  r   r   r   r   r  r
  r@  r   environment_alteredprint_warning)rn   
start_timer   r  s       r   wait_proc_exitz#TestSyncManagerTypes.wait_proc_exit'  s     	TY^%%
/13344q88JqMMMFA!!J.BSyy370% 'L)8)H)J)J'L 'L?A'L 'L 'L M M M  /13344q888888r   c                     t          j        ||f          | _        d| j        _        | j                                         |                                  |                     | j        j        d           d S )Nr   Tr   )r   r   r  r   r   r  ri   r   )rn   workerr%  s      r   
run_workerzTestSyncManagerTypes.run_worker9  sj    #+6HHH			+Q/////r   c                     |                                 sJ |                                 |                                 |                    d           d S Nrt  )r  r0   r  r   r%  s     r   r  z TestSyncManagerTypes._test_event@  sC    zz||


		r   c                     | j                                         }|                                 |                     | j        |           |                                rJ |                    d           d S r  )r   r  r_  r  r  r  r0   rn   rQ  s     r   r  zTestSyncManagerTypes.test_eventG  s`    L  	(!,,,88::	ur   c                 .    |                                  d S r   r^  r   s     r   
_test_lockzTestSyncManagerTypes._test_lockN      r   r]  c                      t          | j        |                      }|                     | j        |           |                                 |                     t          |j                   d S r   )r  r   r  r%  r_  rj   r0  rn   lnamerQ  s      r   rc  zTestSyncManagerTypes.test_lockR  s\    (GDL%((**+++			,	22222r   c                 V    |                                  |                                 d S r   r^  r_  r   s     r   _test_rlockz TestSyncManagerTypes._test_rlockX       r   c                 v     t          | j        |                      }|                     | j        |           d S r   )r  r   r  r,  r(  s      r   rf  zTestSyncManagerTypes.test_rlock]  s8    (GDL%((**(!,,,,,r   c                 .    |                                  d S r   r$  r   s     r   ro  z$TestSyncManagerTypes._test_semaphorea  r&  r   rq  c                      t          | j        |                      }|                     | j        |           |                                 d S r   )r  r   r  ro  r_  )rn   snamerQ  s      r   rr  z#TestSyncManagerTypes.test_semaphoree  sC    (GDL%((**,a000			r   c                 2    |                      d           d S )Nru  )r1  )rr  r   s    r   rv  z+TestSyncManagerTypes.test_bounded_semaphorej  s     "455555r   c                 V    |                                  |                                 d S r   r+  r   s     r   _test_conditionz$TestSyncManagerTypes._test_conditionm  r-  r   c                 n    | j                                         }|                     | j        |           d S r   )r   r  r  r4  r"  s     r   test_conditionz#TestSyncManagerTypes.test_conditionr  s2    L""$$,a00000r   c                 H    |j         dk    sJ |                                 d S r   )r  r   r   s     r   _test_barrierz"TestSyncManagerTypes._test_barrierv  s&    {a		r   c                 p    | j                             d          }|                     | j        |           d S r   )r   r  r  r8  r"  s     r   r
  z!TestSyncManagerTypes.test_barrier{  s4    L  ##*A.....r   c                 >    |5  	 d d d            d S # 1 swxY w Y   d S r   rX   r   s     r   
_test_poolzTestSyncManagerTypes._test_pool  sq      	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   c                 r    | j                             d          }|                     | j        |           d S )Nr_   r  )r   r  r  r;  r"  s     r   	test_poolzTestSyncManagerTypes.test_pool  s6    L**+++++r   c                 R   |                                 dk    sJ |                                sJ |                                rJ |                                dk    sJ |                                rJ |                                dk    sJ |                                sJ d S Nr  r   r  )r  r   r  r   r   s     r   _test_queuez TestSyncManagerTypes._test_queue  s    yy{{axxzz99;;wwyyA~~~~99;;wwyyA~~~~yy{{r   r   c                 $    t          | j        |          d          }|                    d           |                    d           |                     | j        |           |                                sJ |                                rJ d S r?  )r  r   r   r  r@  r  r   )rn   qnamerQ  s      r   
test_queuezTestSyncManagerTypes.test_queue  s    (GDL%((++	a	a(!,,,wwyy6688r   c                 0    |                      d           d S )Nr)  )rC  r   s    r   test_joinable_queuez(TestSyncManagerTypes.test_joinable_queue  s    (((((r   c                 H   |d         dk    sJ |                     d          dk    sJ |                    d          dk    sJ |                                 |                                 |D ]}t	          |          dk    sJ |                    d          dk    sJ d S )Nr   r   r   )r  r  r  reverser   r  )r   r%  rC  s      r   
_test_listzTestSyncManagerTypes._test_list  s    1v{{{{yy||q    yy||q    


 	 	A3xx1}}}}wwqzzQr   c                     | j                                         }|                    d           |                     | j        |           |rJ |                     t          |          d           d S )Nr   r   )r   r   rS  r  rH  ri   r   r"  s     r   r  zTestSyncManagerTypes.test_list  se    L	+++Q#####r   c                    t          |          dk    sJ |d         dk    sJ |                    d          dk    sJ t          |                                          dgk    sJ t          |                                          dgk    sJ t          |                                          dgk    sJ |                                ddik    sJ |                                dk    sJ d S )Nr   rV  r   )rV  r   )r   r   r   r  r  rL  r   popitemr   s     r   
_test_dictzTestSyncManagerTypes._test_dict  s    3xx1}}}}5zQwwu~~""""CIIKK  ZL0000CHHJJE7****CJJLL!!aS((((xxzzeQZ''''{{}}
******r   c                     | j                                         }d|d<   |                     | j        |           |rJ |                     t          |          d           d S )Nr   rV  r   )r   r  r  rL  ri   r   r"  s     r   r  zTestSyncManagerTypes.test_dict  s_    L%+++Q#####r   c                 ~    |j         dk    sJ |                                dk    sJ |                    d           d S )Nr   r  )r   r   r_  r   s     r   _test_valuez TestSyncManagerTypes._test_value  s9    yA~~~~wwyyA~~~~




r   c                     | j                             dd          }|                     | j        |           |                     |j        d           |                     |                                d           d S )NrQ  r   r  )r   r   r  rO  ri   r   r   r"  s     r   rV  zTestSyncManagerTypes.test_value  sl    LsA&&(!,,,!$$$!$$$$$r   c                     |d         dk    sJ |d         dk    sJ t          |          dk    sJ t          |          ddgk    sJ d S )Nr   r   r  )r   r   r   s     r   _test_arrayz TestSyncManagerTypes._test_array  sX    1v{{{{1v{{{{3xx1}}}}CyyQF""""""r   c                 v    | j                             dddg          }|                     | j        |           d S )NrQ  r   r   )r   rs  r  rR  r"  s     r   rv  zTestSyncManagerTypes.test_array  s:    LsQF++(!,,,,,r   c                 :    |j         dk    sJ |j        dk    sJ d S r  r  r   s     r   _test_namespacez$TestSyncManagerTypes._test_namespace  s$    uzzzzuzzzzzzr   c                     | j                                         }d|_        d|_        |                     | j        |           d S r  )r   r  rC  rD  r  rU  r"  s     r   r  z#TestSyncManagerTypes.test_namespace  s@    L""$$,a00000r   Nrh  )rq  )r   )+rs   rt   ru   rv   r   r  r  r  r  r  r  r  r  r  r  r  r  r%  rc  r,  rf  ro  rr  rv  r4  r6  r8  r
  r;  r=  r@  rC  rE  rH  r  rL  r  rO  rV  rR  rv  rU  r  rX   r   r   r  r    s        * $,8M  
       [  M  $0 0 0   [     [3 3 3 3   [- - - -   [   
6 6 6   [1 1 1   [/ / /   [
, , ,   [   ) ) ) 	 	 [	$ $ $ + + [+$ $ $   [
% % % # # [#- - -   [1 1 1 1 1r   r  c                   6    e Zd Z ed          d             ZdS )TestNamedResourcezspawn specific test.c                    t           j        }|                     t           j        |           t	          |dd          5 }|                    t          j        d                     d d d            n# 1 swxY w Y   t          j	        |          \  }}}| 
                    ||                    d                     d S )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  r^  r  r  r/  textwrapdedentr   r  r   r`  )rn   r  r  rc  r  ro   s         r    test_global_named_resource_spawnz2TestNamedResource.test_global_named_resource_spawn  s     !	(&111&#000 
	AGGHO 	% 	 	 	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 %5f==C 	#**W"5"566666s   (A33A7:A7N)rs   rt   ru   rY   r]  rX   r   r   rX  rX    s:          !7887 7 987 7 7r   rX  c                   <    e Zd Zd Z ed          d             ZdS )MiscTestCasec                 X    t          j        | t          t          j        ddg           d S )NSUBDEBUGr  )extranot_exported)r   check__all__r   r  r   s    r   test__all__zMiscTestCase.test__all__  s=    T?/:Q+5|*D	F 	F 	F 	F 	F 	Fr   r  c                     t          j        dd          \  }}}|                     |d           |                     ||                    d                     d S )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  rZ  )r   r  ri   r   r`  )rn   rc  r  ro   s       r   ,test_spawn_sys_executable_none_allows_importz9MiscTestCase.test_spawn_sys_executable_none_allows_import  sh     %5F
 
C 	Q#**W"5"566666r   N)rs   rt   ru   re  rY   rg  rX   r   r   r_  r_     sN        F F F
 ! !<==7 7 >=7 7 7r   r_  c                   :    e Zd Zed             Zed             ZdS )	BaseMixinc                     t           j        j                                        t          j                                        f| _        d S r   )r   r#   	_danglingr   r  danglingr'  s    r   r  zBaseMixin.setUpClass  s6    '/9>>@@!+00224r   c                    t           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 }d S )Nr   TDangling processes: r   Dangling threads: )r@  r   r_  r_  r   r#   rk  rl  r  r  r  )r   r   r   s      r   r  zBaseMixin.tearDownClass#  s     	!!!/9::Sa=Q=QQ	 	F/3DL,!"D"D"DEEE	i)**Sa-A-AA 	B/3DL,!"@w"@"@AAAr   N)rs   rt   ru   r  r  r  rX   r   r   ri  ri    sH        4 4 [4   [  r   ri  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j                  Z eej                  Z eej                  ZdS )r  r   N)rs   rt   ru   r   r   r   rB  rP  r   r   r  r   r  r   r   r)  r]  re  rq  ru  r  r  r  r   rs  rQ  rr  rX   r   r   r  r  6  sz       D%G +J"l?#BCCO!\/"@AAN"l?#BCCO!\/"@AAN<,--D<,--DL.//E L!>??M<,--DL.//E_677I#|O$DEE_677IL.//El?233GL.//EL.//E|O455H|O455HHHr   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   rO   r   s      r   r  zManagerMixin.Poola  s    s{....r   c                 x    t                                                       t          j                    | _        d S r   )r  r  r   r  r   r  s    r   r  zManagerMixin.setUpClasse  s-    %-//r   c                 Z   t          j                    }d}t          t          j                              dk    rt          j        |           |dz  }t          j                    |z
  }|dk    r>dt          j        _        t          j	        dt          j                     d| d           n$t          t          j                              dk    t          j                     | j                                        d	k    rPdt          j        _        t          j	        d
           t          j	        | j                                                   | j                                         | j                                         d | _        t#                                                       d S )Nro  r   r  r  Tr  r  r  r   z5Shared objects which still exist at manager shutdown:)r   r   r   r   r  r
  r@  r   r  r  rh  ri  r   _number_of_objects_debug_infor  r   r  r  )r   r  r   r  r  s       r   r  zManagerMixin.tearDownClassj  s   
 ^%%
/13344q88JqMMMFA!!J.BSyy370% 'L)8)H)J)J'L 'L?A'L 'L 'L M M M  /13344q88 	
;))++q00 04DL,! #9 : : :!#+"9"9";";<<<r   )rs   rt   ru   r   r   r   r  operator
attrgetterr   r)  r]  re  rq  ru  r  r  r  r   rs  r   r  r  r  r  r  r  ra  rb  s   @r   rr  rr  O  s,       D%GH(X(99::EH0X01HIIJJM8'H'7788DH(X(99::E,,-@AABBIx 3 34N O OPP,,-@AABBIH(X(99::Eh*x*+<==>>GH(X(99::EH(X(99::E8'H'7788D8'H'7788D,,-@AABBI/ / [/ 0 0 0 0 [0         [         r   rr  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dS )ThreadsMixinr   N)rs   rt   ru   r   r   dummyr   rB  rP  r   r  r  r   r   r)  r]  re  rq  ru  r  r  r  r   rs  rX   r   r   r{  r{    se       D#+G &1J"l?#8#HIIO"l?#8#HIIO<-233D<-233DL.455E L!6!DEEM<-233DL.455E_2<==I#|O$9$JKK_2<==IL.455El?0899GL.455EL.455EEEr   r{  c           	      @   | d         }t                      }h d}|                                D ]L\  }}t          |t                    st	          |t
                    r|t
          u r;t          |j                  |k    sJ |j                    |j        D ]}d|                                z   |dd          z   }||                                dz            }	 G d d||	t          j
                  }
|dk    r t          j        d	          |
          }
|x|
_        |
_        ||
_        |
| |<   t	          |t          j
                  r. G d
 d|t                     }
|x|
_        |
_        ||
_        |
| |<   Nd d gd gfd}fd}|| d<   || d<   d S )Nrs   >   r   r   r   Withr   Mixinc                       e Zd ZdS *install_tests_in_module_dict.<locals>.TempNr  rX   r   r   Tempr    s        Dr   r  r   r  c                       e Zd ZdS r  r  rX   r   r   r  z*install_tests_in_module_dict.<locals>.Temp  s        r   c                     t          j        t                     t           j                                         t           j        j                                        d<   t          j                                        d<   t          j        d          d<   	 t          j	        d           n%# t          $ r t          j        dz             w xY wt          j                            d          r7	 t          j                    } n"# t"          $ r t          j        d          w xY wt%                       t'          j                     t          j                                        t.                     d S )	Nr   r   Tra   rc   z start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)r   r  r  r#   _cleanuprk  r   r  rN   rh   rC   rD   rE   rx   ry   r  re  r  rH   r   get_temp_dirr  r  r  )rb  rl  old_start_methodrQ   s    r   setUpModulez1install_tests_in_module_dict.<locals>.setUpModule  sz   .w777((***%-7<<>>)..00->$OOO	C,\FFFFF 	C 	C 	C#L$A%B C C C	C <""7++ 	;;&,.. ; ; ;' ): ; ; ;; 	 !!!"$$--i88888s   B0 0"C5D	 	D(c                  f   d} t           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                                         d S )	NFr   Trc   rn  r   ro  r  )r@  r   r_  r   rh   r_  r#   rk  r  r  r  r   r
  r   _cleanup_tests)
need_sleepr   r   rl  r  s      r   tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModule  s   
 	!!!()9!)<DIIII/9::S!=M=MM	 	FJ/3DL,!"D"D"DEEE	i)**S!-=-== 	BJ/3DL,!"@w"@"@AAA  	JsOOO++-----r   r  r  )globalsr  r   r  r  r   r_  r   
capitalizerD   TestCaser   requires_hashdigestrs   ru   rt   r?  )remote_globsrQ   rt   local_globs	ALL_TYPESr)   basetype_newnamer  r  r  r  rl  r  s    `           @@r   install_tests_in_module_dictr    s?   j)J))K333I!'')) & &
d$%% 	dL)) 	&|##t)**i7779K777+ 	- 	- 5#3#3#5#55QRR@#E$4$4$6$6$@A    4(9   I%%D>=eDDTJJD4;; 1",(,W%%	- h/00 	&    tV   044DMD-(DO!%Ld|Hv9 9 9 9 9 9 9,. . . . . .: #.L%3L!"""r   SemLockzSemLock not availabler  z
Linux onlyc                       e Zd Zd ZdS )SemLockTestsc                      G d dt           j                  }dt          j                     } |ddd|d          }t                               |           d S )Nc                       e Zd ZdS )3SemLockTests.test_semlock_subclass.<locals>.SemLockNr  rX   r   r   r  r     ro  r   r  ztest_semlock_subclass-r   r   r2  F)r   r  r@   r   
sem_unlink)rn   r  r)   r   s       r   test_semlock_subclassz"SemLockTests.test_semlock_subclass  st    	 	 	 	 	&. 	 	 	5	55GAq"dE**##D)))))r   N)rs   rt   ru   r  rX   r   r   r  r    s#        * * * * *r   r  r  )rD   unittest.mockr    r  r[  r   r  r   rx   r@   rh  r  rU   r4  rt  rt  r  r  r[  r  rx  r   r  rf  rD  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.managersrw  multiprocessing.queuesr   r   HAVE_SEND_HANDLEr<  ImportErrormultiprocessing.sharedctypesr   r   r  r   	HAS_SHMEMr  check_sanitizerrE   r   r!   r$   r)   r&   r+   r  r  rJ  r   r  r  r  r  r  r  HAVE_GETVALUEry   r  r0   r5   rA   r.  r  ctypesr9   r:   r;   r<   r?  rH   rY   r  r[   r{   r   r   r   r   r   r  r  r  r  r  rZ  rk  ry  r  r  r  r  r  r  r=  rl  r  r  r  r  r  r  rC   r  r  r  rf  rj  rl  r}  r  r  r+  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r>  rO  rZ  r  rp  r  r  r  r  rf  r  r  r  r  r  r  r  r  r  r	  r  r  r  r&  rJ  rR  rb  rm  rr  r{  r  r  rw   r  r  r  r  rX  r_  ri  r  rr  r{  r  r3  r  rX   r   r   <module>r     s
  
            				     



 				 				                         ! ! ! !       ' ' ' ' ' ' & & & & & & " " " " " " & & & & & & & & & & & & ) ) ) ) ) ) ( ( ( ( ( ( /=./ABB  2 2 4 4 4     ! ! ! !                                )))))).MM   MMM88888888   ------II   IIIMMMM   FFF 74((( H (
F
G
GG    * * * 7g0000005 5 5 O	 	  1#2 Hh#0 Hh ( G,6? ? ? 
	  + + + + + +# # #
BJ}%%EEEEE =
>)============= ) ) )I$((E(Hzzz)
K K K  2L L L L LX. L L L@0 0 0 0 0F 0 0 0"    6   6
* 
* 
*        I	8 I	8 I	8 I	8 I	8< I	8 I	8 I	8`         /)      ,Q7 Q7 Q7 Q7 Q7l Q7 Q7 Q7n  $ $ $@ @ @ @ @ @ @ @J
       03@ 3@ 3@ 3@ 3@\ 3@ 3@ 3@le e e e e\ e e eP	5W 5W 5W 5W 5W 5W 5W 5W@& & & & & & & &.  
6 6 6 6 6F 6 6 6r       x1 x1 x1 x1 x1< x1 x1 x1|C3 C3 C3 C3 C3 C3 C3 C3LM3 M3 M3 M3 M3 M3 M3 M3fY/ Y/ Y/ Y/ Y/l Y/ Y/ Y/~     $ $ $  $ $ $ $ $F $ $ $ % $ $ $ $: $ $ $  f! f! f! f! f! f! f! f!P    & & & & &L & & &PB  B  B  B  B l B  B  B P I H H H H H H H H H    V     , , , , ,I , , ,	 	 	 	 	 	 	 	 
  56  * * * 	  56;  ? ? ? 	  53-  @ @ @4> 4> 4> 4> 4>\ 4> 4> 4>v 
  / / / / /; / / /   kI  6 6 6K K K K KK K K K   { # # # 
. . . . . . . .b $#E**22 22 22 22 22, 22 22 +*22p 599G/ G/ G/ G/ G/l G/ G/ G/R8 8 8 8 8L 8 8 8D. . . . ., . . .`L L L L L L L Ld ]$JKK##E**@ @ @ @ @| @ @ +* LK@Lb b b b b b b bP
 
 
 
 
9 
 
 
5) 5) 5) 5) 5) 5) 5) 5)p Y HII##E**@J @J @J @J @J @J @J +* JI@JLt t t t tL t t tv% % % % %h' % % %V+) +) +) +) +)< +) +) +)J6 6 6 6 6\ 6 6 6DE E E E E) E E E& $#E**5 5 5 5 5! 5 5 +*5B   $#E*** * * * *x( * * +**<               *' ' ' ' '!2 ' ' '*k k k k kx  k k kb
B 
B 
B 
B 
B) 
B 
B 
B 8 8 8 8 8! 8 8 8@2 2 2 2 28$ 2 2 2D' ' ' ' 'X& ' ' '"1 1 1 1 1h/ 1 1 1><: <: <: <: <:8$ <: <: <:DA A A A Ah' A A AFc c c c ch' c c cL (=? ?_E _E _E _E _E(+ _E _E? ?_ED0. 0. 0. 0. 0.h' 0. 0. 0.f&E &E &E &E &Ex0 &E &E &ER $#E**g1 g1 g1 g1 g18, g1 g1 +*g1T7 7 7 7 7) 7 7 747 7 7 7 78$ 7 7 7:       26 6 6 6 6Y 6 6 62:  :  :  :  : 9 :  :  : z6 6 6 6 69 6 6 60T4 T4 T4n WW-y999;RSS(,77* * * * *8$ * * 87 TS* * *sf   C) )C32C37
D DDD D#"D#'D, ,D65D6;G GG' 'G76G7