Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/_test_multiprocessing.cpython-39.pyc

a

��g���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZej�d�Ze��ddlZddl Z!ddl"Z!ddl#Z!ddl$Z!ddl%Z!ddl&Z!ddl!m'Z'zddl!m(Z(e(j)Z*Wne+�ybdZ*Yn0zdd	l,m-Z-m.Z.d
Z/Wne+�y�dZ/Yn0zddl!m0Z0d
Z1Wne+�y�dZ1Yn0zddl2Z2Wne+�y�dZ2Yn0ej3d
d��re�4d
��dd�Z5dd�Z6dd�Z7ej8dk�r:ddl!m9Z9dd�Z:e'j;Z<dZ=dZ>e>�rZd\Z?Z@ZAn
d\Z?Z@ZAeBedd�ZCejDdkZEddl mFZFdd�ZGze�Hd �ZIWnd!ZIYn0d"d#gZJzdd$lKmLZLmMZMmNZNmOZOWn$e+�y�ePZLdZMZNZOYn0d%d&�ZQGd'd(�d(eP�ZRGd)d*�d*eP�ZSd+d,�ZTGd-d.�d.�ZUGd/d0�d0eS�ZVGd1d2�d2e!jW�ZXGd3d4�d4eS�ZYd5d6�ZZd7d8�Z[Gd9d:�d:eS�Z\Gd;d<�d<eS�Z]Gd=d>�d>eS�Z^Gd?d@�d@eS�Z_GdAdB�dBeS�Z`GdCdD�dDeP�ZadEdF�ZbGdGdH�dHeP�ZcGdIdJ�dJeP�ZdGdKdL�dLeS�ZeGdMdN�dNeS�ZfGdOdP�dPeS�ZgGdQdR�dReS�Zhd�dTdU�ZidVdW�ZjdXdY�ZkdZd[�ZlGd\d]�d]eP�ZmGd^d_�d_en�Zod`da�ZpGdbdc�dceS�Zqddde�Zrdfdg�ZsGdhdi�dieS�ZtGdjdk�dkeS�Zuddll$mvZvmwZwmxZxGdmdn�dneP�Zydodp�ZzGdqdr�drew�Z{Gdsdt�dtev�Z|e|j}dueydv�e|j}dweydxdy�e|j}dpeze{dz�Gd{d|�d|eS�Z~e��Z�d}d~�Z�Gdd��d�ev�Z�e�j}d~e�dv�Gd�d��d�ev�Z�e��}d~�d�Z�Gd�d��d�eS�Z�e��d��Gd�d��d�eS��Z�e5d��Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�e��e*d��e��d��Gd�d��d�eS���Z�Gd�d��d�eS�Z�Gd�d��d�eL�Z�Gd�d��d�eS�Z�e��e1d��e��d��Gd�d��d�eS���Z�Gd�d��d�eS�Z�Gd�d��d�ej��Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�ej��Z�e��d��Gd�d��d�ej���Z�d�d��Z�e��d��Gd�d��d�ej���Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�Gd�d��d�eP�Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�dÄd�ej��Z�Gd�dńd�ej��Z�Gd�dDŽd�ej��Z�Gd�dɄd�ej��Z�Gd�d˄d�ej��Z�e��ejDdkd̡Gd�d΄d�ej���Z�Gd�dЄd�ej��Z�Gd�d҄d�ej��Z�e��d��Gd�dԄd�ej���Z�Gd�dքd�ej��Z�Gd�d؄d�eP�Z�Gd�dڄd�e��Z�Gd�d܄d�e��Z�Gd�dބd�e��Z�d�d�Z�dS)��N)�support)�hashlib_helper)�
socket_helper�_multiprocessing)�util)�	reductionF)�Value�copyT)�
shared_memory)�addressz(libasan has a pthread_create() dead lockcCs
|�d�S)N�latin)�encode)�s�r�6/usr/local/lib/python3.9/test/_test_multiprocessing.pyrNsrcCs"t|tjj�r|��|��dS�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread��queuerrr�close_queueRsrcCst�|�dSr)rr)�processrrr�join_processXsr�posix)�resource_trackercCstj||�dSr)r�_CLEANUP_FUNCS)�name�rtyperrr�_resource_unlinkasr"皙�����?)g=
ףp=�?gffffff�?gffffff�?)r#r#r#ZHAVE_BROKEN_SEM_GETVALUE�win32��waitcCs |dur|dkrd}t|g|�S)N�r%)�handle�timeoutrrr�wait_for_handle}sr*�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc	CsRd}zt�d�}Wnttfy*YdS0|dks<||kr@dSt�d|��dS)zACheck that the system supports enough semaphores to run the test.r,�SC_SEM_NSEMS_MAXN���zHThe OS doesn't support enough semaphores to run the test (required: %d).)�os�sysconf�AttributeError�
ValueError�unittest�SkipTest)Z	nsems_minZnsemsrrr�check_enough_semaphores�s�r:c@seZdZdd�Zdd�ZdS)�
TimingWrappercCs||_d|_dSr)�func�elapsed)�selfr<rrr�__init__�szTimingWrapper.__init__cOs>t��}z |j|i|��Wt��||_St��||_0dSr)�time�	monotonicr<r=)r>�args�kwds�trrr�__call__�s�zTimingWrapper.__call__N��__name__�
__module__�__qualname__r?rErrrrr;�sr;c@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dS�N�)�
CHECK_TIMINGS�assertAlmostEqual�r>�a�brrr�assertTimingAlmostEqual�sz$BaseTestCase.assertTimingAlmostEqualcGs0z||�}WntyYn0|�||�SdSr)�NotImplementedError�assertEqual)r>�valuer<rB�resrrr�assertReturnsIfImplemented�s
z'BaseTestCase.assertReturnsIfImplementedcGstd��dS)Nz#shouldn't try to pickle a test case)rV)r>rBrrr�
__reduce__�szBaseTestCase.__reduce__N)rGrHrI�
ALLOWED_TYPESrUrZr[�
__reduce_ex__rrrrrJ�s

rJcCsjz
|��WStydz|jWYSty^z|jWYYStyXt�Yn0Yn0Yn0dSr)�	get_valuer6Z_Semaphore__value�_valuerV�r>rrrr^�s
r^c@seZdZdd�ZdS)�
DummyCallablecCst|t�sJ�|�d�dS�N�)rra�put)r>�q�crrrrE�szDummyCallable.__call__N)rGrHrIrErrrrra�srac@s�eZdZdZdd�Zdd�Zedd��Zdd	�Zed
d��Z	dd
�Z
edd��Zedd��Zdd�Z
e�ejd�dd��Zedd��Zedd��Zedd��Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zed'd(��Zd)d*�Zed+d,��Zd-d.�ZedPd1d2��Zd3d4�Z d5d6�Z!d7d8�Z"ed9d:��Z#d;d<�Z$ed=d>��Z%d?d@�Z&eifdAdB��Z'dCdD�Z(dEdF�Z)edQdHdI��Z*dJdK�Z+dLdM�Z,dNdO�Z-d0S)R�_TestProcess�rKrMcCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)NrM�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrW�identr4�getpid�exitcode)r>�currentrnrrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)NrMri��targetT�r{rqF)
rjrkrl�Process�_testrWrqrmro�assertFalse)r>Zproc0Zproc1�proc2rrr�test_daemon_argument�s
z!_TestProcess.test_daemon_argumentcOsR|��}|�|�|�|�|�|j�|jdkrN|�t|j��|�|j�dS)NrM)rmrdr rjrsrn�pid)�clsrerBrCrxrrrr~s


z_TestProcess._testcCs�|jdkr|�d�|j��|�|���|jdd�\}}|j|j|fd�}|��|�	�|�
�\}}|�||��j
�|�|t���|�||��j�dS)NrMriF��duplex�r{rB)rjrkrl�assertIsNone�parent_process�Piper}�_test_send_parent_process�start�join�recvrWrmr�r4rvr )r>�rconn�wconn�pZ
parent_pid�parent_namerrr�test_parent_process_attributess
z+_TestProcess.test_parent_process_attributescCs&ddlm}|�|�j|�jg�dS)Nr�r�)�multiprocessing.processr��sendr�r �r�r�r�rrrr�!sz&_TestProcess._test_send_parent_processcCs�|jdkr|�d�|j��|jdd�\}}|j|j|fd�}|��|jtj	d�s\t
d��|��}|�|d�|�
�|��|jtj	d�s�t
d��|��}|�|d	�dS)
NrMriFr�r��r)z(Could not communicate with child process�alive�	not alive)rjrkrlr�r}�_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�rW�	terminater�)r>r�r�r�Zparent_process_statusrrr�test_parent_process&s"
�z _TestProcess.test_parent_processcCs(|j|j|fd�}|��t�d�dS)Nr�i,)r}�_test_report_parent_statusr�r@�sleep)r�r�r�rrrr�?sz,_TestProcess._test_create_grandchild_processcCsPddlm}|�|���rdnd�|�jtjd�|�|���rFdnd�dS)Nrr�r�r�r�)r�r�r�rpr�r�
SHORT_TIMEOUTr�rrrr�Esz'_TestProcess._test_report_parent_statuscCs�|�d�}|��}|ddf}ddd�}d}|j|j|||d�}d|_|��}|jd	krf|�|j|j�|�|�	�d
�|�|jd�|�
||���|�t
|���tu�|�|jd�|��|�|jd�|�|�	�d�|�||���|�|��|dd��|�|��|�|�|��|j�|jd	k�rX|�|��|j�|�|��|j�|��|�|jd�|�|�	�d
�|�
||���t|�dS)NrO��gR���Q@)�helloZbyeZSomeProcess)r{rB�kwargsr TrMFr)r�Eventr}r~rqrmrjrWrnrp�assertNotIn�active_childrenro�type�listrwr��assertIn�getr r�r�r)r>re�erBr�r r�rxrrr�test_processLs@



�
z_TestProcess.test_processzneeds native_idcCsr|jdkr|�d�|j��t��j}|�d�}|j|j|fd�}|�	�|�
�}|��t|�|�
||�dS)NrMrirOr�)rjrkrl�	threading�main_thread�	native_idrr}�"_test_process_mainthread_native_idr�r�r�r�assertNotEqual)r>Zcurrent_mainthread_native_idrer�Zchild_mainthread_native_idrrr�!test_process_mainthread_native_idts


z._TestProcess.test_process_mainthread_native_idcCst��j}|�|�dSr)r�r�r�rd)r�reZmainthread_native_idrrrr��s
z/_TestProcess._test_process_mainthread_native_idcCst�d�dS)N�d�r@r��r�rrr�_sleep_some�sz_TestProcess._sleep_somecCst�|�dSrr�)r��delayrrr�_test_sleep�sz_TestProcess._test_sleepc
s�|jdkr|�d�|j��|j|jd��d�_���|����d�|�	�|�
��|��jd�t�j
�}|�|d�d�|�|jd�|����d�|�|d�d�|�|jd�|����d�t�d�|��ttd	��rV�fd
d�}t�tj|�}z4t�d�|�|�d�Wt�d�t�tj|�nt�d�t�tj|�0n|�|�d�|�|jd�|����d
�|��|�
����
��jS)NrMrirzTrr'r3rO�alarmcstd���dS)Nzjoin took too long: %s��RuntimeError�rB�r�rr�handler�sz+_TestProcess._kill_process.<locals>.handler�
F)rjrkrlr}r�rqr�rWrpr�r�rwr;r�rUr=r@r��hasattr�signal�SIGALRMr�r�)r>�methr�r�Zold_handlerrr�r�
_kill_process�sB




�
z_TestProcess._kill_processcCs,|�tjj�}tjdkr(|�|tj�dS�N�nt)	r�rr}r�r4r rWr��SIGTERM�r>rwrrr�test_terminate�s
z_TestProcess.test_terminatecCs,|�tjj�}tjdkr(|�|tj�dSr�)	r�rr}�killr4r rWr��SIGKILLr�rrr�	test_kill�s
z_TestProcess.test_killcCsHzt��}Wnty"d}Yn0|�t|�tu�|�|dk�dSrN)r�	cpu_countrVror��int)r>Zcpusrrr�test_cpu_count�s
z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS�Nr�T)
rWr�r�r�r}r@r��DELTAr�rqr�r�r��r>r�rrr�test_active_children�sz!_TestProcess.test_active_childrencCsR|�|�t|�dkrNtd�D].}|j|j|||gfd�}|��|��qdS)Nr�r�)r�rt�ranger}�_test_recursionr�r�)r�r��id�ir�rrrr��s
�z_TestProcess._test_recursioncCsx|jdd�\}}|�|g�t�t�g}|��rB|�|���q*gdgddgddgdgddgddgg}|�||�dS)NFr�rrO)	r�r�r@r�r�r��appendr�rW)r>r�r��result�expectedrrr�test_recursion�s
�	z_TestProcess.test_recursioncCs|�d�dS)N�$@r%�r��eventrrr�_test_sentinelsz_TestProcess._test_sentinelcCs�|jdkr|�d�|j��|��}|j|j|fd�}|�t��|jWd�n1s\0Y|�	�|�
|j�|j}|�|t
�|�t|dd��|��|��|�t|dd��dS)NrMrir�r'r�rO)rjrkrlr�r}r��assertRaisesr7�sentinelr��
addCleanupr�rrr�rr*�setro)r>r�r�r�rrr�
test_sentinels
$z_TestProcess.test_sentinelrNcCs|dur|��t�|�dSr)r��sys�exit)r��rcrerrr�_test_closesz_TestProcess._test_closecCs�|jdkr|�d�|j��|��}|j|jd|id�}d|_|��|�|�	�d�|�
t��|��Wd�n1s~0Y|�
d�|��|�|�	�d�|�|jd�|��|�
t��|�	�Wd�n1s�0Y|�
t��|��Wd�n1�s0Y|�
t��|��Wd�n1�sP0Y|��t�|�}~t��|�|�d�t|�dS)NrMrire)r{r�TFr)rjrkrlrr}r�rqr�rWrpr�r7rrdr�rwr��weakref�ref�gc�collect�assertIsr)r>rer��wrrrr�
test_closes4
&
&((
z_TestProcess.test_closecs*�jdkr��d��j��t��}|dkr0dnd}�fdd�t|�D�}|D]}|��qN|D]}t|�q`|D]}��|j	d�qr�fd	d�t|�D�}|D]}|��q�t
�d
�|D]}|��q�|D]}t|�q�t
jdk�r&tjg}tjdk�r|�tj�|D]}��|j	|��qdS)
NrMri�spawnrcr�csg|]}�j�jdd��qS))�{�G�z�?r�)r}r���.0r�r`rr�
<listcomp>Es�z4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]}�j�jd��qS)rz)r}r�r�r`rrr�Ns����MbP?r��darwin)rjrkrlr�get_start_methodr�r�rrWrwr@r�r�r4r r�r�r��platformr�r�r�)r>�sm�N�procsr�Z	exitcodesrr`r�test_many_processes=s:

�


�




z _TestProcess.test_many_processescCsnt�}t�|�}|��}|j|||fd�}~|��|��t��|�	|�d�|�
|��d�t|�dS)Nr�rc)
rar�r�rr}r�r�r�r�r�rWr�r)r>rfr�rer�rrr�test_lose_target_ref`s
z!_TestProcess.test_lose_target_refcCs|�tj���|��dSr)rd�testrZfd_countr&)r>�evtrerrr�_test_child_fd_inflationmsz%_TestProcess._test_child_fd_inflationc	s��jdkr��d��j��t��}|dkr<��d�|��d}�����������fdd�t|�D�}|D]}|��qnzR�fdd�t|�D�}��	t
t|��d|�W���|D]}|��q�t
��n$���|D]}|��q�t
��0dS)	NrMri�forkrccs g|]}�j�j��fd��qS�r�)r}rr��rrer>rrr��s�z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>csg|]}����qSr�r�r��rerrr���rO)rjrkrlrr�r�rr�r�rWrtr�r�r)r>r�r�r�r�Z	fd_countsrrr�test_child_fd_inflationrs0
�


�
z$_TestProcess.test_child_fd_inflationcs>�fdd�}�fdd�}tj|d���tj|dd���dS)Ncst�d����dS)N��?�r@r�r�r�rrr�func1�s
z2_TestProcess._test_wait_for_threads.<locals>.func1cst�d����dS)N�)r@r��clearrr
rr�func2�s
z2_TestProcess._test_wait_for_threads.<locals>.func2rzTr|)r��Threadr�)r>rrrrr
r�_test_wait_for_threads�sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)NrMrir�)
rjrkrlr�r}rr�r�ro�is_set)r>r�procrrr�test_wait_for_threads�s
z"_TestProcess.test_wait_for_threadscCsT|��D]>\}}|dkr*t��}|��n|dks6J�d}tt|d�q|��dS)Nr�remove)�items�io�StringIOr�setattrr�r�)r>rZbreak_std_streams�stream_name�action�streamrrr�_test_error_on_stdio_flush�s
z'_TestProcess._test_error_on_stdio_flushcCs�t��dg}|d��dD]�}|D]�}tt|�}tt||�zV|��}|j|j|fd�}|�	�|�
�|�|���|�
|jd�Wtt||�q$tt||�0q$qdS)Nr��stdout�stderrr�)rrr�getattrr�rr�r}rr�r�rorrWrw)r>Zstreamsrr�
old_streamrrrrr�test_error_on_stdio_flush_1�s 
�z(_TestProcess.test_error_on_stdio_flush_1cCs�dD]�}dD]z}tt|�}z\|��}|j|j|||ifd�}|��|��|�|���|�	|j
d�Wtt||�qtt||�0qqdS)Nr )rrr�r)r#r�r�r}rr�r�rorrWrwr)r>rrr$rrrrr�test_error_on_stdio_flush_2�s

�z(_TestProcess.test_error_on_stdio_flush_2r'cCst�|�|��dSrr)r>rr�rrr�_sleep_and_set_event�s
z!_TestProcess._sleep_and_set_eventc
Cs|jdkr|�d�|j��t��}|dkr<|�d�|��ddlm}|��d}|��}|j	|j
||fd�}|��|j}t
�||�t�|d�|��}|j	|j
|fd�}	|	��|	��|�|���|�|	jd�|��|�|���|�|jd	�dS)
NrMri�
forkserverr)�_forkserverrr��@)r�)rjrkrlrr�Zmultiprocessing.forkserverr)�ensure_runningr�r}r'r�Z_forkserver_pidr4r�r@r�r�rorrWrwr�)
r>�signumr�r)r�rrr�Zevt2r�rrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|�tj�dSr)r.r��SIGINTr`rrr�test_forkserver_sigintsz#_TestProcess.test_forkserver_sigintcCstjdkr|�tj�dSr�)r4r r.r�r�r`rrr�test_forkserver_sigkill	s
z$_TestProcess.test_forkserver_sigkill)rN)r').rGrHrIr\ryr��classmethodr~r�r�r�r�r�r�r8�
skipUnlessr��_HAVE_THREAD_NATIVE_IDr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrrr%r&r'r.r0r1rrrrrg�sj
	


(



3



 #


&rgc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dSr)rr}r?r��
child_conn�parent_connr`rrrr?sz_UpperCaser.__init__cCs<|j��t|jjd�D]}|j�|���q|j��dSr)r7r�iterr6r�r��upper�r>rrrr�runs
z_UpperCaser.runcCs&t|�tusJ�|j�|�|j��Sr)r��strr7r�r�r:rrr�submitsz_UpperCaser.submitcCs$|j�d�|j��|j��dSr)r7r�rr6r`rrr�stop$s
z_UpperCaser.stopN)rGrHrIr?r;r=r>rrrrr5sr5c@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess�rKcCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTr�ZHELLOZworldZWORLD)r5rqr�rWr=r>r�)r>Z
uppercaserrrr�test_subclassing-sz(_TestSubclassingProcess.test_subclassingcCs�|jdkr|�d�|j��tjj}|�tjj|�|j|j	|fd�}|�
�|��t|d��<}|�
�}|�d|�|�d|�|�d|�Wd�n1s�0YdS)NrMrir��r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rjrkrlrr�TESTFNr��unlinkr}�_test_stderr_flushr�r��open�readr�)r>�testfnr�f�errrrr�test_stderr_flush6s
z)_TestSubclassingProcess.test_stderr_flushcCs6t�|tjtjBtjB�}t|ddd�t_dddS)N�wF��closefdrOr)r4rG�O_WRONLY�O_CREAT�O_EXCLr�r")r�rI�fdrrrrFGsz*_TestSubclassingProcess._test_stderr_flushcCs8t�|tjtjBtjB�}t|ddd�t_t�|�dS)NrMFrN)r4rGrPrQrRr�r"r�)r��reasonrIrSrrr�_test_sys_exitNsz&_TestSubclassingProcess._test_sys_exitc		CsJ|jdkr|�d�|j��tjj}|�tjj|�gd�dfD]�}|j|j	||fd�}d|_
|��t|�|�
|jd�t|d��}|��}Wd�n1s�0Y|�
|��t|��t�|�q@gd	�}|D]j\}}|j|d
��D|jtj|d�}d|_
|��t|�|�
|j|�Wd�q�1�s:0Yq�dS)NrMri)rOr��zignore thisr�TrOrB)))TrO))Fr))�rW)rr)rrr�)rjrkrlrrrDr�rEr}rUrqr�rrWrwrGrH�rstripr<r4�subTestr�r�)	r>rIrTr�rJZcontentZcasesrBr�rrr�
test_sys_exitTs0
�&z%_TestSubclassingProcess.test_sys_exitN)
rGrHrIr\rArLr2rFrUrZrrrrr?)s	

r?cCs"t|d�r|��S|��dkSdS)N�emptyr)r�r[�qsizerrrr�queue_empty�s
r]cCs"t|d�r|��S|��|kSdS)N�full)r�r^r\)re�maxsizerrr�
queue_full�s
r`c@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�
_TestQueuecCs*|��td�D]}|��q|��dS)N�)r&r�r�r�)r�r�child_can_start�parent_can_continuer�rrr�	_test_put�s
z_TestQueue._test_putcCs�d}|j|d�}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|�t||�d�|�	d�|�	dd�|�	ddd�|�	d	d�|�	d
dd�|�
d�t�t
�|�t|�d�|�t||�d�t|j	�}t|j
�}|�tj|dd�|�|jd�|�tj|ddd�|�|jd�|�tj|d�|�|jd�|�tj|ddt�|�|jt�|�tj|ddt�|�|jd�|jtj|ddtd
�|�|jt�|��|��|�t|�d�|�t||�d�|��t|�dS)Nrb�r_r�TFrOr�rV�rc�rr�)rr�r}rerqr�rWr]r`rd�
put_nowaitr@r�r�r;r��pyqueue�FullrUr=�TIMEOUT1�TIMEOUT2�TIMEOUT3r�r&r�r)r>ZMAXSIZErrcrdrrdrirrr�test_put�sR�




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nr�rVrgrc)r&rdr��r�rrcrdrrr�	_test_get�s



z_TestQueue._test_getcCs�|��}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|��|�	�t
�t�|�t|�d�|�|�
dd�d�|�|�
d�d�|�|j
dd�d�|�|��d	�|�t|�d�t|j
�}t|j�}|�tj|d�|�|jd
�|�tj|dd�|�|jd
�|�tj|�|�|jd
�|�tj|dt�|�|jt�|�tj|dt�|�|jd
�|jtj|td�|�|jt�|��t|�dS)Nr�TFr�rVrOr�rgrcr)rr�r}rqrqr�rWr]r�r&r@r�r�r��
get_nowaitr;r�rj�EmptyrUr=rlrmrnr�r)r>rrcrdrr�rrrrr�test_get�sF�


z_TestQueue.test_getcCstdd�D]}|�|�q
dS)Nr�r)r�rd)r�rr�rrr�
_test_forksz_TestQueue._test_forkcCs�|��}td�D]}|�|�qt�t�|j|j|fd�}d|_|�	�td�D]}|�
|��|�qR|�t
j|jd�|��t|�dS)Nr�r�TrF)rr�rdr@r�r�r}rurqr�rWr�r�rjrsr�r)r>rr�r�rrr�	test_forks
z_TestQueue.test_forkcCs�|��}z|�|��d�Wnty8|�d�Yn0|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedrOrcr�)rrWr\rVrkrdr�r�r>rerrr�
test_qsize5s

z_TestQueue.test_qsizecCs(t|jd�D]}t�t�|��qdSr)r8r�r@r�r��	task_done)r�re�objrrr�_test_task_doneEs
z_TestQueue._test_task_donecs�������fdd�td�D�}|D]}d|_|��q$td�D]}��|�q@���|D]}��d�q\|D]}|��qpt��dS)Ncsg|]}�j�j�fd��qSr)r}r{r��rr>rrr�Ns�z-_TestQueue.test_task_done.<locals>.<listcomp>rgTr�)�
JoinableQueuer�rqr�rdr�r)r>�workersr�r�rr|r�test_task_doneKs�

z_TestQueue.test_task_donec
Cs�tj����d}t|dd��}|�d�Wd�n1s>0Ytj�t����<zt|�Wnt	j
y�|�d�Yn0Wd�n1s�0YWd�n1s�0YdS)NZimported_by_an_imported_modulez.pyrMz�if 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)rrZtemp_cwdrG�writeZ
DirsOnSysPathr4�getcwd�
__import__rjrs�fail)r>�module_namerJrrr�test_no_import_lock_contentionas(
z)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?r#)
rrr@rAr�rjrsr��assertGreaterEqualr)r>rer��deltarrr�test_timeoutvsz_TestQueue.test_timeoutc	Cs4|jdkr|�d�|j��Gdd�dt�}tj���J|��}|�|��|�d�|�	|j
tjd��t|�Wd�n1s�0Ytj����|jdd�}|�|��|�d�z|�
|��d�Wnty�Yn0|�	|j
tjd��|�	|���t|�Wd�n1�s&0YdS)	NrKric@seZdZdd�ZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecSst�dSr)r6r`rrrr[�szQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N�rGrHrIr[rrrr�NotSerializable�sr�Tr�rOrf)rjrkrl�objectrr�captured_stderrrrdror�r�rrWr\rVr[)r>r�rerrr�"test_queue_feeder_donot_stop_onexc�s(

&
z-_TestQueue.test_queue_feeder_donot_stop_onexccs�|jdkr|�d�|j��Gdd�dt��G�fdd�dtjj�}��}tj�	��F|t�
�d�}|�|�|�d�|�|j
tjd	��Wd�n1s�0Y|�|j�|�|j�dS)
NrKric@s eZdZdZdd�Zdd�ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectcSsd|_d|_dS�NF)�reduce_was_called� on_queue_feeder_error_was_calledr`rrrr?�szT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSsd|_t�dS�NT)r�r6r`rrrr[�szV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rGrHrI�__doc__r?r[rrrrr��sr�cs eZdZdZe�fdd��ZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcst|t�rt|��rd|_dSr�)rr6r�)r�rz�r�rr�_on_queue_feeder_error�s
�z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rGrHrIr��staticmethodr�rr�rr�	SafeQueue�sr�)�ctxTr�)rjrkrlr�rrrrrr��get_contextrdror�r�r�r�)r>r�Znot_serializable_objrerr�r�'test_queue_feeder_on_queue_feeder_error�s



2z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc	Cs�t��t��fD]v}|��|�td��|�d�Wd�n1sH0Y|�td��|��Wd�q1s|0YqdS)Nz	is closed�foo)rrr}r�assertRaisesRegexr7rdr�rwrrr�$test_closed_queue_put_get_exceptions�s(z/_TestQueue.test_closed_queue_put_get_exceptionsN)rGrHrIr2rerorqrtrurvrxr{rr�r�r�r�r�rrrrra�s$
;
	5

 &rac@s$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|��}|�|��d�|�|�d�d�|�|��d�|�ttjf|j�dS)NTF)�LockrW�acquire�releaser�r7r��ThreadError�r>�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dSr�)�RLockrWr�r�r�r�r�r�rrr�
test_rlock�sz_TestLock.test_rlockcCs,|���Wd�n1s0YdSr)r�r`rrr�test_lock_context�s
z_TestLock.test_lock_contextN)rGrHrIr�r�r�rrrrr��s
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�TrOrF)rZr^rWr�r��r>�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�rVrg)�	Semaphorer�rWr�rZr^r�rrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS�Nr�)�BoundedSemaphorer�r�rrr�test_bounded_semaphores
z%_TestSemaphore.test_bounded_semaphorecCs�|jdkr|�d�|j��|�d�}t|j�}|�|d�d�|�|jd�|�|dd�d�|�|jd�|�|dt	�d�|�|jd�|�|dt
�d�|�|jt
�|�|td�d�|�|jt�dS)NrKrirFr'Tr�)rjrkrlr�r;r�rWrUr=rlrmrn)r>r�r�rrrr�	s


z_TestSemaphore.test_timeoutN)rGrHrIr�r�r�r�rrrrr��s
r�c@s�eZdZeddd��Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
edd��Ze�
ed�dd��Zedd��Ze�
ed�dd��Zedd��Zdd�ZdS)�_TestConditionNcCs.|��|��|�|�|��|��dSr)r�r�r&)r��cond�sleeping�wokenr)rrrrJ"s

z_TestCondition.fc	Cs`td�D]<}z|�|krWqFWnty8YqFYn0t�t�qt�t�|�||�dS�Nr�)r�rVr@r�r�rZ)r>r<rXr�rrr�assertReachesEventually*s


z&_TestCondition.assertReachesEventuallycCsX|jdkrTz6|j��|j��}|�|d�|�|j��d�WntyRYn0dS)NrKr)rj�_sleeping_countr^�_woken_countrW�_wait_semaphorerV)r>r��sleepersrrr�check_invariant5s
�z_TestCondition.check_invariantcCs|��}|�d�}|�d�}|j|j|||fd�}d|_|��|�|j�tj	|j|||fd�}d|_|��|�|j�|�
�|�
�t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�|�|��dS)Nrr�TrOr�)�	Conditionr�r}rJrqr�r�r�r�rr�r@r�r�rZr^�notifyr�r�)r>r�r�r�r�rrr�test_notify@s6





z_TestCondition.test_notifycs�|��}|�d�}|�d��td�D]h}|j|j||�tfd�}d|_|��|�|j	�t
j|j||�tfd�}d|_|��|�|j	�q$td�D]}|��q�td�D]}���q�|�
dt��|�|�td�D]d}|j|j||�fd�}d|_|��|�|j	�t
j|j||�fd�}d|_|��|�|j	�q�td�D]}|���qHt�t�|�
dt��|��|��|��|��fdd�d�|�|�dS)NrrVr�Trbcst��Sr�r^r�r�rr�<lambda>�r	z0_TestCondition.test_notify_all.<locals>.<lambda>)r�r�r�r}rJrlrqr�r�r�r�rr�rZr^r�r@r�r��
notify_allr�r��r>r�r�r�r�rDrr�r�test_notify_allmsP


�
�



z_TestCondition.test_notify_allcsP|��}|�d�}|�d��td�D]d}|j|j||�fd�}d|_|��|�|j�t	j
|j||�fd�}d|_|��|�|j�q$td�D]}|��q�t�
t�|�dt��|��|jdd�|��|��fdd	�d�|��|jd
d�|��|��fdd	�d�|��|jdd�|��|�dt��|�|�dS)NrrVr�Trbr�)�ncst��Srr�rr�rrr��r	z._TestCondition.test_notify_n.<locals>.<lambda>rgcst��Srr�rr�rrr��r	)r�r�r�r}rJrqr�r�r�r�rr�r@r�r�rZr^r�r�r�r�r�rr�r�
test_notify_n�s:



z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dSr�)	r�r;r&r�rlr�rWrUr=)r>r�r&rYrrrr��s
z_TestCondition.test_timeoutcs`|�Hd�_|��|��fdd��}|r4�jdkr>t�d�Wd�n1sR0YdS)Nrcs
�jdkS�Nrg�rXr��staterrr��r	z0_TestCondition._test_waitfor_f.<locals>.<lambda>rgrO)rXr��wait_forr�r�)r�r�r�r�rr�r�_test_waitfor_f�sz_TestCondition._test_waitfor_fzneeds sharedctypesc	s�|��}|�dd��|j|j|�fd�}d|_|��|�:|��fdd��}|�|�|��j	d�Wd�n1sz0Yt
d�D]H}t�d	�|�&�j	d
7_	|�
�Wd�q�1s�0Yq�t|�|�|jd�dS)Nr�r3r�Tcs
�jdkS�Nrr�rr�rrr��r	z-_TestCondition.test_waitfor.<locals>.<lambda>rrgr�rO)r�rr}r�rqr�r�rorWrXr�r@r�r�rrw)r>r�r�r�r�rr�r�test_waitfor�s 
,
(z_TestCondition.test_waitforcs�|��|�hd}t��}|j�fdd�|d�}t��|}|sf|d|kr\|dkrfnnd|_Wd�n1sz0YdS)Nr#cs
�jdkSr�r�rr�rrr�
r	z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r�g333333�?r�T)r�r@rAr�rX)r�r�r��successr�r��dtr�rr�r�_test_waitfor_timeout_fs$z&_TestCondition._test_waitfor_timeout_fc	Cs�|��}|�dd�}|�dd�}|�d�}|j|j||||fd�}d|_|��|�|jt	j
d��td�D]H}t�
d�|�&|jd	7_|��Wd�ql1s�0Yqlt|�|�|j�dS)
Nr�rFr�Tr�rVr�rO)r�rr�r}r�rqr�ror�rr�r�r@r�rXr�r)r>r�r�r�r�r�r�rrr�test_waitfor_timeouts"

�
(z#_TestCondition.test_waitfor_timeoutcCsP|�|��Wd�n1s"0Yt�d�|durLt�|tj�dSrN)r�r@r�r4r�r�r/)r�rfr�rrr�_test_wait_result+s
&
z _TestCondition._test_wait_resultcCs�t|t�rtjdkrt��}nd}|��}|�||�|�d��|�|�d��|j	|j
||fd�}|��|�|�d��|dur�|�
t|jd�|��Wd�n1s�0YdS)Nr$rr#r��<)r�ProcessesMixinr�r�r4rvr�rr&r}r�r�ror��KeyboardInterruptr�)r>r�rfr�rrr�test_wait_result3s
z_TestCondition.test_wait_result)N)rGrHrIr2rJr�r�r�r�r�r�r�r8r3�HAS_SHAREDCTYPESr�r�r�r�r�rrrrr� s&->2	






r�c@s eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dSr)r@r�rmr�r�rrr�_test_eventJs
z_TestEvent._test_eventcCs�|��}t|j�}|�|��d�|�|d�d�|�|jd�|�|t�d�|�|jt�|��|�|��d�|�|�d�|�|jd�|�|t�d�|�|jd�|�	�|j
|j|fd�}d|_|�
�|�|�d�|��dS)NFr'Tr�)r�r;r&rWrrUr=rlr�rr}r�rqr�r�)r>r�r&r�rrr�
test_eventOs&
z_TestEvent.test_eventN)rGrHrIr2r�r�rrrrr�Hs
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�struct�calcsizer��__setstate__�
_lengthbuf)r>�wrapperr�rrrr?}sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lock�create_memoryview�castr�)r>r�rrrr��sz_DummyList.__setstate__cCs|j|jfSr)r�r�r`rrr�__getstate__�sz_DummyList.__getstate__cCs<|j�"|jdd7<Wd�n1s.0YdS�NrrO�r�r�)r>�_rrrr��sz_DummyList.appendcCs4|j�|jdWd�S1s&0YdSr�r�r`rrr�__len__�sz_DummyList.__len__N)rGrHrIr?r�r�r�r�rrrrr�{s
r�cCst�d�dS)Nr�r�rrrr�_wait�sr�c@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|��|_|��|_|��|_|s>|j��g}t	|�D]*}|j
|jd�}d|_|�
�|�|�qJdd�}	t�||	|�|_dS)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.
        rzTcSs|D]}|��qdSr)r�)rMr�rrr�finalize�sz Bunch.__init__.<locals>.finalizeN)rJrBr��	DummyList�started�finishedr��	_can_exitr�r�r}�taskrqr�r�r�r��
_finalizer)
r>�	namespacerJrBr�Zwait_before_exitrMr�r�r�rrrr?�s 



zBunch.__init__c	Csxt��}|j�|�z6|j|j�W|j�|�|j�d�|j�	�stJ�n(|j�|�|j�d�|j�	�srJ�0dS)N�)
r4rvr�r�rJrBr�r�r&r�r>r�rrrr��s�z
Bunch.taskcCst|j�|jkrt�qdSr)rtr�r�r�r`rrr�wait_for_started�szBunch.wait_for_startedcCst|j�|jkrt�qdSr)rtr�r�r�r`rrr�wait_for_finished�szBunch.wait_for_finishedcCs|j��dSr)r�r�r`rrr�	do_finish�szBunch.do_finishcCs|��dSr)r�r`rrrr�szBunch.closeN)F)
rGrHrIr�r?r�r�r�r�rrrrrr��s

r�c@seZdZdd�Zdd�ZdS)�
AppendTruecCs
||_dSr)rz)r>rzrrrr?�szAppendTrue.__init__cCs|j�d�dSr�)rzr�r`rrrrE�szAppendTrue.__call__NrFrrrrr��sr�c@s�eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	e
dd
��Zd6dd�Zdd�Z
e
dd��Zdd�Ze
dd��Zdd�Ze
dd��Zdd�Ze
dd ��Zd!d"�Ze
d#d$��Zd%d&�Ze
d'd(��Zd)d*�Ze
d+d,��Zd-d.�Zd/d0�Ze
d1d2��Zd3d4�Zd5S)7�_TestBarrierz$
    Tests for Barrier objects.
    rcg>@cCs|j|j|jd�|_dS)Nr�)�Barrierr��defaultTimeout�barrierr`rrr�setUp�sz_TestBarrier.setUpcCs|j��d|_dSr)r�abortr`rrr�tearDown�s
z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|j��St�SdS)NrMrL)rjrLr�r�r`rrrr��s



z_TestBarrier.DummyListcCs@t||||jd�}z||�|��W|��n
|��0dSrN)r�r�r�r)r>rJrBrTrrr�run_threads�s

z_TestBarrier.run_threadscCs�|j}||jksJ�t|�D]d}|d�d�t|d�||ksFJ�|��|d�d�t|d�|d|ksxJ�|��qz|jdks�J�Wnty�Yn0|jr�J�dS)NrTrO)	�partiesr�r�r�rtr&�	n_waitingrV�broken)r�r�resultsr��mr�rrr�	multipass�s
z_TestBarrier.multipassrOcCs*|��|��g}|�|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)r�rr
r)r>�passesrrrr�test_barriersz_TestBarrier.test_barriercCs
|�d�S)zC
        Test that a barrier works for 10 consecutive runs
        r�)rr`rrr�test_barrier_10
sz_TestBarrier.test_barrier_10cCs|��}|�|�dSr)r&rd)r�rrrYrrr�_test_wait_return_fsz _TestBarrier._test_wait_return_fcsR|���|�|j|j�f��fdd�t|j�D�}|�|�d�d�t��dS)z9
        test the return value from barrier.wait
        csg|]}����qSrrr�rrrr�r	z1_TestBarrier.test_wait_return.<locals>.<listcomp>rrON)	rrrrr�r�rW�countr�r>rrrr�test_wait_returns
z_TestBarrier.test_wait_returncCs|��t|�dkrt�dSrN)r&rtr�)r�rrrrr�_test_action_f"sz_TestBarrier._test_action_fcCsB|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)z,
        Test the 'action' callback
        )rrON)r�r�r�r�rrrWrt)r>rrrrr�test_action(sz_TestBarrier.test_actioncCslz0|��}||jdkrt�|��|�d�Wn6tjyN|�d�Yntyf|��Yn0dS�Nr�T)r&r�r�r�r��BrokenBarrierErrorr)r�r�results1�results2r�rrr�
_test_abort_f1sz_TestBarrier._test_abort_fcCs^|��}|��}|�|j|j||f�|�t|�d�|�t|�|jd�|�|jj�dS)zK
        Test that an abort will put the barrier in a broken state
        rrON)	r�rrrrWrtr�ror)r>rrrrr�
test_abort>s
�z_TestBarrier.test_abortcCs�|��}||jdkr<|j|jdkr2t�d�q|��n6z|��|�d�Wntjyp|�d�Yn0|��|�d�dS)Nr�rOr�T)	r&r�rr@r��resetr�r�r)r�rrr�results3r�rrr�
_test_reset_fJs
z_TestBarrier._test_reset_fcCsl|��}|��}|��}|�|j|j|||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rrON)r�rrrrWrtr�)r>rrrrrr�
test_reset\s�z_TestBarrier.test_resetcCs�z0|��}||jdkrt�|��|�d�Wn6tjyN|�d�Yntyf|��Yn0|��|jdkr�|��|��|��|�d�dSr)r&r�r�r�r�rrr)r�r�barrier2rrrr�rrr�_test_abort_and_reset_fisz$_TestBarrier._test_abort_and_reset_fcCsz|��}|��}|��}|�|j�}|�|j|j||||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zF
        Test that a barrier can be reset after being broken.
        rrON)r�r�r�rrrrWrt)r>rrrrrrr�test_abort_and_resets�z!_TestBarrier.test_abort_and_resetcCsR|��}||jdkr t�d�z|�d�WntjyL|�d�Yn0dS)Nr���?rT)r&r�r@r�r�rr��r�rrr�rrr�_test_timeout_f�s
z_TestBarrier._test_timeout_fcCs4|��}|�|j|j|f�|�t|�|jj�dS)z$
        Test wait(timeout)
        N)r�rr#rrWrtrrrrrr��sz_TestBarrier.test_timeoutcCsT|�|j�}||jdkr$t�d�z|��WntjyN|�d�Yn0dS)Nr�r!T)r&r�r�r@r�r�rr�r"rrr�_test_default_timeout_f�s
z$_TestBarrier._test_default_timeout_fcCs@|j|jdd�}|��}|�|j||f�|�t|�|j�dS)z4
        Test the barrier's default timeout
        rr�N)r�r�r�rr$rWrtr)r>rrrrr�test_default_timeout�sz!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dSrN)r�r&)r>rTrrr�test_single_thread�s
z_TestBarrier.test_single_threadc	CsHt|�D]:}|��|�|�|�Wd�q1s80YqdSr)r�r&r�)r�rr�connr�r�rrr�_test_thousand_f�sz_TestBarrier._test_thousand_fcCs�|jdkr|�d�|j��d}|��}|�d�\}}t|j�D]2}|j|j|j	|||fd�}|�
�|�|j�q@t|�D]$}t|j�D]}|�
|��|�q�q|dS)NrLri��Fr�)rjrkrlr�r�r�r�r}r(rr�r�r�rWr�)r>rr�r'r6�jr�r�rrr�
test_thousand�s
�z_TestBarrier.test_thousandN)rO)rGrHrIr�r�r�rrr�rr2r
rr
rrrrrrrrrr r#r�r$r%r&r(r+rrrrr��sH




	







	
r�c@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValuer@)r�i�i�^)�dg
@g�)�hi�����)re��rf�x�ycCsts|�d�dS�Nz%requires multiprocessing.sharedctypes�r�rkr`rrrr�sz_TestValue.setUpcCs$t||j�D]\}}|d|_qdSr�)�zip�codes_valuesrX)r��values�sv�cvrrrr~�sz_TestValue._testFcs�|r�fdd��jD�}n�fdd��jD�}t|�j�D]\}}��|j|d�q:�j�j|fd�}d|_|��|��t|�j�D]\}}��|j|d�q�dS)Ncsg|]\}}}��||��qSr)�RawValue�r��coderXr�r`rrr��s�z)_TestValue.test_value.<locals>.<listcomp>csg|]\}}}��||��qSr)rr<r`rrr��s�rOr�Tr�)	r7r6rWrXr}r~rqr�r�)r>�rawr8r9r:rrr`r�
test_value�s
�
�z_TestValue.test_valuecCs|jdd�dS�NT)r>)r?r`rrr�
test_rawvalue�sz_TestValue.test_rawvaluec
Cs�|�dd�}|��}|��}|jdddd�}|��}|��}|��}|jdd|d�}|��}	|��}
|�||	�|jdddd�}|�t|d��|�t|d��|jt|jdddd�|�	dd�}|�t|d��|�t|d��dS)Nr�rc�r�F�get_lock�get_objZnavalue)
rrCrDr�rWrr�r�r6r;)
r>Zval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlocks$z_TestValue.test_getobj_getlockN)F)rGrHrIr\rr7rr2r~r?rArMrrrrr,�s�

r,c@s~eZdZdZedd��Ze�edud�ddd��Z	e�edud�d	d
��Z
e�edud�dd��Ze�edud�d
d��ZdS)�
_TestArrayr@cCs0tdt|��D]}||||d7<qdSrN)r�rt)r��seqr�rrrrJsz_TestArray.fNzrequires _ctypesFcCs�gd�}|r|�d|�}n|�d|�}|�t|�t|��|�|d|d�|�t|dd��t|dd���t�dgd��|dd�<|dd�<|�t|dd��|�|�|�|j|j|fd	�}d
|_|�	�|�
�|�t|dd��|�dS)N)
i�iri�i5���i$i�i�i?r�rVr�rh)rOr�rVrgrgrWr�T)�RawArray�ArrayrWrtr��arrayrJr}rqr�r�)r>r>rO�arrr�rrr�
test_array$s$$
z_TestArray.test_arraycCsrd}td�D]`}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qdS)Nr�rVr�r)r�rSrWrtr�)r>�sizer�rUrrr�test_array_from_size=sz_TestArray.test_array_from_sizecCs|jdd�dSr@)rVr`rrr�
test_rawarrayLsz_TestArray.test_rawarrayc
Cs
|�dttd���}|��}|��}|jdttd��dd�}|��}|��}|��}|jdttd��|d�}|��}	|��}
|�||	�|jdtd�dd�}|�t|d��|�t|d��|j	t
|jdtd�dd�|�dtd��}|�t|d��|�t|d��dS)Nr�r�rBFrCrDZnotalock)rSr�r�rCrDr�rWrr�r�r6rR)
r>Zarr1rErFZarr2rGrHr�Zarr3rIrJrKrLrrr�test_getobj_getlock_objPs(�z"_TestArray.test_getobj_getlock_obj)F)
rGrHrIr\r2rJr8�skipIfr/rVrXrYrZrrrrrNs


rNc@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_TestContainers�rLcCs^|�ttd���}|�|dd�ttd���|��}|�|dd�g�|�ttd���|�|dd�ttd���|�|dd�|�|dd�gd��|d9}|�|dd�gd��|�|ddggd��|�|dd�ttd���||g}|�|�}|�dd	�|D�gd
�gd�g�|�|g�}|�d�|�|ddd�gd
��dS)Nr�rcr�)r�rVrg)
rrOr�rVrgrrOr�rVrgrb)rrOr�rVrgrrOr�rVrgrcrbcSsg|]}|dd��qSrr)r��elementrrrr��r	z-_TestContainers.test_list.<locals>.<listcomp>)
rrOr�rVrgrcrbrhrW�	r�r)rrOr�rVrgrcrbrhrWr_r�)r�r�rW�extendr�)r>rSrTr-r�rJrrr�	test_listrs*
�
z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r�r)r�r�r8rW�next)r>rS�itrrr�test_list_iter�sz_TestContainers.test_list_itercs����fdd�td�D��}��dd�|D�gd�gd�d|dd<��|ddd�gd	��td
d�D] }��||dd�gd��qn��|d
��d���t|d
�d�tddd�D]}��t||�d�q�~���}|�|�~dS)Ncsg|]}��td���qS)rV)r�r�)r�Z_ir`rrr��r	z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rVcSsg|]}|dd��qSrr)r��innerrrrr��r	)rrOr��7rr3)rrOrfrOr�)r�r�rW�poprtr�)r>rSr�rTrr`r�test_list_proxy_in_list�s 
z'_TestContainers.test_list_proxy_in_listcCs�|��}ttdd��}|D]}t|�||<q|�|��tdd�|D���|�t|���|�|�t|���dd�|D��|�t|�	��dd�|D��dS)N�A�Fcss|]}|t|�fVqdSr��chrr�rrr�	<genexpr>�r	z,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSrrkr�rrrr��r	z-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSrrkr�rrrr��r	)
�dictr�r�rlrWr	�sorted�keysr8r)r>r-�indicesr�rrr�	test_dict�sz_TestContainers.test_dictcCsv|��}ttdd��}|D]}t|�||<qt|�}|�t|�|�|�t|�g�t|�}|��|�tt	|�dS)Nrirj)
rnr�r�rlr8rWrr�r�rb)r>r-rqr�rcrrr�test_dict_iter�sz_TestContainers.test_dict_itercCs�|jddd�}|jddd�}|j||d�}|�|dd�|�|d	dd�d
|d	d<|�|dd
�|�|d	dd
�d|d	d<|�|dd�|�|d	dd�~~|�|d
dd�d|d	d<|�|d	dd�|d
}|d	}d|d<|�|dd�|�|d	dd�|��|�t|�d�|�|dd�|�|dd�|�||g�}d|dd<|�|dd�|�|ddd�~~|�|ddd�|�ddg|g�}|�|dt�|�|dddd�dS)Nr�rg)�ferrets�hamstersr�rV)�water�feed)�pets�suppliesrvryrcZblanketsrhrxrt�rrurOZmarmots�X�cr3rw)rnrWrrtr�rr)r>rxryr-�lZouterrrr�test_dict_proxy_nested�sFz&_TestContainers.test_dict_proxy_nestedcCsr|��}|�|���|d�d�|�|d��d�|��}|��|d<|d�d�|�|d��d�dS)Nr�{��)r�r�rrdrWr�rnrRrrr�test_nested_queue�sz!_TestContainers.test_nested_queuecCsh|��}d|_d|_d|_|�|j|jfd�|`|�t|�d�|�t|d��|�t|d��dS)N�Bob�BuilderZhidden)r�r�zNamespace(name='Bob')r �job)�	Namespacer r�Z_hiddenrWr<ror�)r>r�rrr�test_namespace�sz_TestContainers.test_namespaceN)rGrHrIr\rardrhrrrsr~r�r�rrrrr\ns


.
r\r'cCst�|�||Srr�)r2r&rrr�sqr
	s
r�cCs||Srr�r2r3rrr�mul	sr�cCst�|�tdd��dS)Nr2i)r@r�r7r%rrr�raise_large_valuerror	s
r�cCs|Srr�r2rrr�identity	sr�c@s eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_t�|�SrN)�n_instancesr��__new__r�rrrr�	szCountedObject.__new__cCst|�jd8_dSrN)r�r�r`rrr�__del__"	szCountedObject.__del__N)rGrHrIr�r�r�rrrrr�	sr�c@seZdZdS)�SayWhenErrorN�rGrHrIrrrrr�%	r	r�ccs8|dkrtd��t|�D]}||kr,td��|VqdS)Nr3zSomebody said when)r�r�)�totalZwhenr�rrr�exception_throwing_generator'	sr�cseZdZe�fdd��Ze�fdd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zed/d0��Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z �Z!S);�	_TestPoolcst���|�d�|_dSr�)�super�
setUpClass�Pool�poolr���	__class__rrr�2	s
z_TestPool.setUpClasscs(|j��|j��d|_t���dSr)r�r�r�r��
tearDownClassr�r�rrr�7	s

z_TestPool.tearDownClasscCs@|jj}|�|td�td��|�|tdddi�tdd��dS)N)rcrcrr2rVr�)r��applyrWr�)r>Zpapplyrrr�
test_apply>	sz_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r�r��	chunksize)r��maprWr�r�r�)r>Zpmaprrr�test_mapC	s
,�z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�r_r3r�r|rr�)r��starmapr�r6r�rWr��	itertools)r>Zpsmap�tuplesrrr�test_starmapI	s��z_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr�r|r3)
r�r6r�rWr�Z
starmap_asyncr�r�r�r�)r>r�rrr�test_starmap_asyncR	s�z_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dSr�)rWr��	map_asyncr�r�r�r�r�r`rrr�test_map_asyncW	s�z_TestPool.test_map_asynccCs�|jdkr|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)NrL�1)�callback�error_callbackrOrrSr�)rjrLr�r�r�r�r�r&rWrtrrr7)r>Z	call_argsrrr�test_map_async_callbacks[	s�
�
z"_TestPool.test_map_async_callbackscCsp|jdkr|�d�|j��Gdd�dt�}|�t��&|j�t|�gd�Wd�n1sb0YdS)NrMric@seZdZdd�ZdS)z*_TestPool.test_map_unplicklable.<locals>.AcSstd��dS)Nz
cannot pickler�r`rrrr[m	sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr�rrrr�Al	sr�r�)	rjrkrlr�r�r�r�r�r�)r>r�rrr�test_map_unplicklableh	s

z_TestPool.test_map_unplicklablecCsBz|jjtgdd�jtd�Wntjy<|�d�Yn0dS)NrOr�r�z2pool.map_async with chunksize stalled on null list)r�r�r�r�rlr�TimeoutErrorr�r`rrr�test_map_chunksizer	sz_TestPool.test_map_chunksizecCsj|jdkr|�d�|j��|�t��&|j�ttdd�d�Wd�n1sR0Y|�t��&|j�ttdd�d�Wd�n1s�0Y|�t��&|j�ttdd�d�Wd�n1s�0YGdd�d�}|�t��"|j�t|�d�Wd�n1�s0Y|�t��"|j�t|�d�Wd�n1�s\0YdS)	NrLrirOr3r�rVc@s$eZdZdd�Zdd�Zdd�ZdS)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSs|Srrr`rrr�__iter__�	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSst�dSr)r�r`rrr�__next__�	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cSsdSrNrr`rrrr��	szM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rGrHrIr�r�r�rrrr�SpecialIterable�	sr�)	rjrkrlr�r�r�r�r�r�)r>r�rrr�"test_map_handle_iterable_exceptionx	s
4442z,_TestPool.test_map_handle_iterable_exceptioncCs<|j�tdtf�}t|j�}|�|�d�|�|jt�dS)Nrh�1)	r��apply_asyncr�rlr;r�rWrUr=�r>rYr�rrr�
test_async�	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nrbr!r�)r�r�r�rmr;r�r�rr�rUr=r�rrr�test_async_timeout�	s
z_TestPool.test_async_timeoutc	Cs�|j�tttd���}|�t|�tttttd�����|j�tttd���}td�D]}|�t|�||�qV|�t	|j
�|jjtttd��dd�}td�D]}|�t|�||�q�|�t	|j
�dS�Nr�r)r�r�)r��imapr�r�r�rWr�rbr��
StopIterationr��r>rcr�rrr�	test_imap�	s"z_TestPool.test_imapcCs<|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||�q�|�t|j	�|j�ttdd�d	�}t
d
�D]}|�t|�||�q�|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||��q|�t|j	�dS)NrLrirOr3r�rVrrhr�rbrg)
rjrkrlr�r�r�r�r�r�r�r�rWrbr�rrr�#test_imap_handle_iterable_exception�	s$
z-_TestPool.test_imap_handle_iterable_exceptionc	Csx|j�tttd���}|�t|�tttttd�����|jjtttd��dd�}|�t|�tttttd�����dSr�)r��imap_unorderedr�r�r�rWror�)r>rcrrr�test_imap_unordered�	s"z_TestPool.test_imap_unorderedcCsp|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
ttt
td����}|�t��<td�D]"}t
|�}|�||�|�|�q�Wd�n1s�0Y|j�ttdd�d	�}t
ttt
td����}|�t��>td�D]$}t
|�}|�||�|�|��q&Wd�n1�sb0YdS)
NrLrirOr3r�rVrrhr�)rjrkrlr�r�r�r�r�r�r�r�r�r�rbr�r)r>rcZexpected_valuesr�rXrrr�-test_imap_unordered_handle_iterable_exception�	s@
���*�z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs�|jdkrtnt}|�||jd�|�||jd�|jdkr�|�d�}z&|�dt|j��W|��|�	�n|��|�	�0dS)NrLr3rrV)
rj�RemoteErrorr7r�r�rWrt�_poolrr�)r>Zexpected_errorr�rrr�test_make_pool�	s�


�z_TestPool.test_make_poolcCsP|jjtjdd�td�D�dd�}|j��t|jj�}|�|�|j	d�dS)NcSsg|]}d�qS)r#rr�rrrr�
r	z,_TestPool.test_terminate.<locals>.<listcomp>i'rOr�r*)
r�r�r@r�r�r�r;r��
assertLessr=)r>r�r�rrrr�
s�
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dSrN)r�rWr�r�r�r�r�r�r�rr�r�rrr�test_empty_iterable

s
z_TestPool.test_empty_iterablecCs�|jdkr�ttd��}dd�|D�}|�d��,}|�t|�}|�|��|�Wd�n1s`0Y|��|�	t
|jt|�dS)NrKr�cSsg|]}t|��qSr)r�r�rrrr�
r	z*_TestPool.test_context.<locals>.<listcomp>r�)rjr�r�r�r�r�rWr�r�r�r7)r>�Lr�r�rBrrr�test_context
s
.z_TestPool.test_contextcCstd��dS)Nrr�r�rrr�_test_traceback 
sz_TestPool._test_tracebackcCs�|jdk�r�|�d��T}z|�|j�Wn(tyP}z|}WYd}~nd}~00|�d�Wd�n1sp0Y|��|�t|�t	�|�
|jd�|j}|�t|�t
jj�|�d|j�tj���:}z|�Wn t	y�tjt���Yn0Wd�n1�s0Y|�d|���|�d��|}z|�ttdd�d�Wn*t�y|}z|}WYd}~nd}~00|�d�|�t|�t�|�|jd�Wd�n1�s�0Y|��dS)NrKrOzexpected RuntimeError)rz&raise RuntimeError(123) # some commentr3zexpected SayWhenError)rjr�r�r��	Exceptionr�r�r�r�r�rWrB�	__cause__rr�ZRemoteTracebackr��tbrrr�r��
excepthook�exc_info�getvaluer�r�r�r�)r>r�r��exc�cause�f1rrr�test_traceback$
s<(4�
.z_TestPool.test_tracebackcCstd��dS)Nr�r�r�rrr�_test_wrapped_exceptionJ
sz!_TestPool._test_wrapped_exceptionc	Csl|�d��F}|�t��|�|j�Wd�n1s80YWd�n1sV0Y|��dSrN)r�r�r�r�r�r�r�rrr�test_wrapped_exceptionN
sHz _TestPool.test_wrapped_exceptioncCs�t��}|�t���|�d��\}z.|�tddg�Wt�d�|��|�	�nt�d�|��|�	�0Wd�n1s�0YWd�n1s�0Y|�
t��|d�dS)Nr�rrOrg�������?)r@rAr�r7r�r�r�r�rr��
assertGreater)r>Zt_startr�rrr�test_map_no_failfastU
s

�
Fz_TestPool.test_map_no_failfastcCspdd�td�D�}dd�|D�}|j�t|�~t��t�t�|�	t
dd�|D��dh�|�	tjd�dS)NcSsg|]
}t��qSr)r�r�rrrr�l
r	z4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)r�r�)r��orrrr�m
r	css|]}|�VqdSrr)r�r�rrrrms
r	z3_TestPool.test_release_task_refs.<locals>.<genexpr>r)
r�r�r�r�r�r�r@r�r�rWr�r�r�)r>ZobjsZrefsrrr�test_release_task_refsi
s
z _TestPool.test_release_task_refsc	Cs�|jdkr|�d�|�d�}|�Wd�n1s80Y|�t��4|�Wd�n1sh0YWd�n1s�0Y|��dS)NrL�test not applicable to managerrO)rjrkr�r�r7r��r>r�rrr�
test_enterx
s


<z_TestPool.test_entercCsv|jdkr|�d�|�d�}|��|��tjj|_t	�
dtf��d}t	��Wd�n1sh0YdS)NrLr�rOz%unclosed running multiprocessing pool)
rjrkr�r�r�rr�ZRUN�_staterZcheck_warnings�ResourceWarning�
gc_collectr�rrr�test_resource_warning�
s



�z_TestPool.test_resource_warning)"rGrHrIr2r�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��
__classcell__rrr�rr�0	sB	

$


&
r�cCstd��dS)N�key)�KeyErrorrrrr�raising�
sr�cCsdd�S)NcSsdS)N�*rrrrrr��
r	z%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�
sr�c@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrorsr@csjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nr�cs|�d<dSr�r�r��Z
scratchpadrr�errback�
sz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�r�r)rr�r�r�r�r�r�rorrrr�)r>r�r�rYrr�r�test_async_error_callback�
s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}t�d�}td�D]l}dg��fdd�}|jt|d�}|�||j��d}|�	|�|�
�d|�|�|j�|�|j
�q|��|��dS)Nr)�MaybeEncodingErrorr�rcs|�d<dSr�rr�r�rrr��
sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr�)�multiprocessing.poolr�rr�r�r�r�r�r�rorrZassertIsNotNoner�rXrr�)r>r�r�Z	iterationr�rY�wrappedrr�r�test_unpickleable_result�
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)rGrHrIr\r�r�rrrrr��
sr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_TestPoolWorkerLifetimer@c	Cstjddd�}|�dt|j��dd�|jD�}g}td�D]}|�|�t|f��q<t	|�D]\}}|�|�
�t|��q^|��d}|r�tdd	�|jD��s�|d
8}t
�t�q�dd�|jD�}|�d|�|�d|�|�t|�t|��|��|��dS)NrVr���maxtasksperchildcSsg|]
}|j�qSr�r��r�rMrrrr��
r	zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r��2css|]}|��VqdSr�rpr�rrrrm�
r	zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rOcSsg|]
}|j�qSrr�r�rrrr��
r	)rr�rWrtr�r�r�r�r��	enumerater�Z_repopulate_pool�allr@r�r�r�r�rorr�)	r>r�Zorigworkerpidsrr�r*rYZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime�
s&z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd�}g}td�D]}|�|�t|df��q|��|��t|�D]\}}|�	|�
�t|��qNdS)NrVrOr�rbg333333�?)rr�r�r�r�r�rr�r�rWr�)r>r�rr�r*rYrrr�%test_pool_worker_lifetime_early_close�
sz=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closecCs*d}tjj�d|�\}}}|�|d�dS)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)rr�
script_helper�assert_python_okrW�r>�cmdr��outrKrrr�>test_worker_finalization_via_atexit_handler_of_multiprocessing�
s
zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rGrHrIr\r�r�rrrrrr��
s
r�)�BaseManager�	BaseProxyr�c@s$eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)N�f()rr`rrrrJszFooBar.fcCst�dSr)r7r`rrr�gszFooBar.gcCsdS)N�_h()rr`rrr�_hsz	FooBar._hN)rGrHrIrJr	rrrrrrsrccstd�D]}||VqdSr�)r�)r�rrr�bazsrc@s eZdZdZdd�Zdd�ZdS)�
IteratorProxy)r�cCs|Srrr`rrrr�szIteratorProxy.__iter__cCs
|�d�S)Nr�)�_callmethodr`rrrr�szIteratorProxy.__next__N)rGrHrIZ	_exposed_r�r�rrrrr
sr
c@seZdZdS)�	MyManagerNr�rrrrrsr�Foo)�callable�Bar)rJr)rZexposed)rZ	proxytypec@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManagerr]cCs<t�}|��|�|�|��|�|jjdtjf�dSr�)	rr��common�shutdownr��_processrwr�r��r>rLrrr�test_mymanager*s

z_TestMyManager.test_mymanagercCsLt��}|�|�Wd�n1s&0Y|�|jjdtjf�dSr�)rrr�rrwr�r�rrrr�test_mymanager_context5s(z%_TestMyManager.test_mymanager_contextcCsPt�}|��|�|�|�Wd�n1s20Y|�|jjd�dSr�)rr�rrWrrwrrrr�!test_mymanager_context_prestarted=s
(z0_TestMyManager.test_mymanager_context_prestartedcs|���|���|��}�fdd�dD�}�fdd�dD�}|�|ddg�|�|ddg�|����d�|�t�j�|���d�d�|�t	�jd�|����d�|���
�d	�|���d�d�|���d�d	�|�t|�d
d�td�D��dS)Ncsg|]}t�|�r|�qSr�r��r�r )r�rrr�Ir	z)_TestMyManager.common.<locals>.<listcomp>)rJr	rcsg|]}t�|�r|�qSrrr)�barrrr�Jr	rJr	rrr
cSsg|]}||�qSrrr�rrrr�Yr	r�)
rrrrWrJr�r7r	rr�rr�r�)r>rLrZfoo_methodsZbar_methodsr)rr�rrDs z_TestMyManager.commonN)rGrHrIr\rrrrrrrrr&s
rcCstSr)�_queuerrrr�	get_queueasrc@seZdZdZdS)�QueueManagerz$manager class used by server processN�rGrHrIr�rrrrr dsr c@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNr!rrrrr"hsr"�	xmlrpclibc@s8eZdZdZgd�Zedd�Zedd��Zdd�ZdS)�_TestRemoteManagerr])�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNcCs2t||td�}|��|��}|�t|j��dS)N�rrnZ
serializer)r"�
SERIALIZER�connectrrd�tupler8�r�rrnrLrrrr�_putterys�z_TestRemoteManager._puttercCs�t�d�}ttjdf|td�}|��|�|j�|j	|j
|j|fd�}d|_|��t
|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� rr'r�T)r4�urandomr r�HOSTr(r�r�rr}r,rrqr"r)rrWr�r�r�r�rdr@r�)r>rnrLr�Zmanager2rrrr�test_remote�s"
��z_TestRemoteManager.test_remote)	rGrHrIr\r8r�r2r,r0rrrrr$os
	r$�md5c@s eZdZedd��Zdd�ZdS)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)Nr'r%)r r(r)rrdr+rrrr,�s�z_TestManagerRestart._putterc
Cs:t�d�}ttjdf|td�}zv|��}|j}|j�	�|�
�|j|j|j|fd�}|�
�|�
�|��}|�|��d�~Wt|d�r�|��nt|d�r�|��0t||td�}z|�
�|�|j�Wndt�y4}zJ|jtjkr�t�d�t||td�}t|d��r |�|j�WYd}~n
d}~00dS)Nr-rr'r�r%rr!)r4r.r rr/r(Z
get_serverr�listenerrr�r}r,r�rrWr�r�rr��OSError�errnoZ
EADDRINUSEr@r�)r>rnrLZsrvr�addrr�rr�rrr�test_rapid_restart�sD
�


�

�
�z&_TestManagerRestart.test_rapid_restartN)rGrHrIr2r,r7rrrrr2�s
r2�c@s�eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	edd
��Z
ed$dd��Ze�
ed�dd��Ze�
ed�e�ejdkd�e�edkd�e�
eed�d�dd�����Zedd��Ze�
ed�e�ejdkd�dd ���Zd!d"�Zd#S)%�_TestConnectionrhcCs(t|jt�D]}|�|�q|��dSr)r8�
recv_bytes�SENTINEL�
send_bytesr)r�r'�msgrrr�_echo�sz_TestConnection._echoc
CsL|��\}}|j|j|fd�}d|_|��gd�}td�}|d}t�dttd���}|j	dkrv|�
t|���t
�|�
|�|�d�|�
|��|�|�
|�|�d�|�
|��|�|j	dk�r t�dd	gd�}t|�d	gdt|�}	|�
|�|�d�|�
|�|�t|�|j�|�
t|�|	�t�dd	gd�}d	gd
t|�d	gdt|�}	|�
|�|�d�|�
|�|d
|j�t|�|j�|�
t|�|	�ttd��}|�
|�|�d�z|�|�}
Wn8tj�y}z|�
|j|f�WYd}~nd}~00|�d
|
�t|j�}|�
|�d�|�|jd	�|�
|d�d�|�|jd	�|�
|t�d�|�|jt�|�d�t� d�|�
|t�d�|�|jd	�|�
|��d�td�d}
|�|
�|�
|��|
�|�t!�|�"�|j	dk�r@|�
|j#d�|�
|j$d�|�%t&|j�|�%t&|j�|�'�dS)Nr�T)rOr&Nr%r�r�rgrKrrVrhz(                                        zexpected BufferTooShort, got %sFr3r#�Xi)(r�r}r>rqr�rrTr�r�rjrWr��filenor�r�r�r<r:rt�recv_bytes_into�itemsize�	bytearrayr�BufferTooShortrBr�r;r�rUr=rlr@r�r;r�readable�writabler��EOFErrorr�)r>r'r6r�rOr=ZlongmsgrU�bufferr�rYr�r�Zreally_big_msgrrr�test_connection�sv
�$�&




z_TestConnection.test_connectioncCs�|jdd�\}}|�|�d�d�|�|��d�|jdkr�|�|jd�|�|jd�|�|jd�|�|jd�|�t|jd�|�t|j�|�t|j	�dS)NFr�rOrKTr�)
r�rWr�r�rjrErFr�r4r�)r>�reader�writerrrr�test_duplex_false0s
z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)Nr�Tr�)r�r}r>rqr�rrr<rWr:r;r�)r>r'r6r�r=rrr�test_spawn_close=s

z _TestConnection.test_spawn_closecCs:|jdkr|�d�|j��td�}|��\}}|�|�|�|��|�|�|d�|�|��|dd��|�|dd�|�|��|dd��|�|d�|�|��td	��|�|dd
�|�|��td	��|�t	|j|d�|�t	|j|dd�|�t	|j|dd
�|�t	|j|d�|�t	|j|dd�dS)NrKri�abcdefghijklmnopqrstuvwxyzrcrhrW��r8r��rOr3rg)
rjrkrlrr�r<rWr:r�r7)r>r=rSrTrrr�test_sendbytesRs&

z_TestConnection.test_sendbytesc
CsXzt�|�Wn@tyN}z(|jtjkr8WYd}~dS�WYd}~nd}~00dSdS)NFT)r4�fstatr4r5�EBADF)r�rSr�rrr�_is_fd_assignedrsz_TestConnection._is_fd_assignedFcCsd|r.tdd�D]}|�|�st�|��|�qt�|�}trJt�|tj	�}t�
||�t�|�dS)Nrr,)r�rVr4�dup2r@r�recv_handle�msvcrt�open_osfhandlerPr�r)r�r'�dataZcreate_dummy_fdsr�rSrrr�_writefd}s

z_TestConnection._writefd�$test needs multiprocessing.reductioncCs�|jdkr|�d�|jdd�\}}|j|j|dfd�}d|_|��|�tj	j
tj	j�ttj	jd��6}|�
�}tr�t�|�}t�|||j�Wd�n1s�0Y|��ttj	jd�� }|�|��d�Wd�n1s�0YdS)	NrK�only makes sense with processesTr�sfoor��wb�rb)rjrkr�r}r\rqr�r�rrrErDrGr@rYZ
get_osfhandler�send_handler�r�rWrH)r>r'r6r�rJrSrrr�test_fd_transfer�s


.z _TestConnection.test_fd_transferr$�*test semantics don't make sense on Windowsr,z)largest assignable fd number is too smallrWztest needs os.dup2()c
Cs>|jdkr|�d�|jdd�\}}|j|j|ddfd�}d|_|��|�tj	j
tj	j�ttj	jd��x}|�
�}tdt�D]}|�|�s~q�q~|�d	�t�||�zt�|||j�Wt�|�nt�|�0Wd�n1s�0Y|��ttj	jd
�� }|�|��d�Wd�n1�s00YdS)NrKr^Tr�sbarr�r_r,z2could not find an unassigned large file descriptorr`)rjrkr�r}r\rqr�r�rrrErDrGr@r��MAXFDrVr�r4rWrrar�rr�rWrH)r>r'r6r�rJrSZnewfdrrr�test_large_fd_transfer�s(	



6z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r4r�r@�r>r'rrr�_send_data_without_fd�sz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr|�d�|jdd�\}}|j|j|fd�}d|_|��|�tt	j
|�|��dS)NrKr^Tr�r�)rjrkr�r}rhrqr�r�r�rrXr��r>r'r6r�rrr�test_missing_fd_transfer�s

z(_TestConnection.test_missing_fd_transferc	Cs�|��\}}|�p|�L|�d�|�|��d�|jdkrT|�|j�|�|j�Wd�n1sh0YWd�n1s�0Y|jdkr�|�|j�|�|j�|�t	|j�|�t	|j�dS�N�rK)
r�r�rWr�rjr�closedror�r4rRrrrr��s

H
z_TestConnection.test_contextN)F)rGrHrIr\r2r>rIrLrMrSrVr\r8r3�
HAS_REDUCTIONrbr[r�r�rdr�r4rerhrjr�rrrrr9�s<
O
 




�
��


r9c@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListenerr@cCsB|jjD]4}|jj|d�}|�|j�|�t|jj|j|�qdS)N��family)�
connection�families�Listenerr�rr�r4r)r>rqr}rrr�test_multiple_bind�s�z _TestListener.test_multiple_bindc
Cs�|j����}|j�|j��R}|���*}|�d�|�|��d�Wd�n1sT0YWd�n1sr0YWd�n1s�0Y|jdkr�|�	t
|j�dSrk�rrrt�Clientr�acceptr�rWr�rjr�r4)r>r}rfr-rrrr��s

j
z_TestListener.test_contextz"test needs abstract socket supportc
Cs�|j�d���}|j�|j��R}|���*}|�d�|�|��d�Wd�n1sV0YWd�n1st0YWd�n1s�0Y|jdkr�|�	t
|j�dS)Nz
somethingrlrKrv)r>r3�clientr-rrr�test_abstract_socket�s

j
z"_TestListener.test_abstract_socketN)rGrHrIr\rur�r8r3r�abstract_sockets_supportedrzrrrrro�s
�roc@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClientrhcCs"|j�|�}|�d�|��dS)Nr�)rrrwr�r)r�rr'rrrr~
s
z_TestListenerClient._testcCsj|jjD]\}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��qdS)Nrpr�Tr�)
rrrsrtr}r~rrqr�rxrWr�r�r)r>rqr}r�r'rrr�test_listener_client
sz(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)Nr�TrOr�)rrrtr}r~rrqr�r@r�rxrWr�rr�)r>r}r�r'rrr�test_issue14725
s

z#_TestListenerClient.test_issue14725cCsh|jjD]Z}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�qdS)Nrp�hellorO)
rrrsrtrwrrxr<ror�r)r>�famr}rfrSrrr�test_issue16955'
s
z#_TestListenerClient.test_issue16955N)	rGrHrIr\r2r~r}r~r�rrrrr|
s
r|c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPollrhcCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NFr	T)r�rWr�r<rRrrr�test_empty_string6
s

z_TestPoll.test_empty_stringcCs*|D]}t�d�|�|�q|��dS�Nr#)r@r�r<r)r�r'�stringsrrrr�_child_strings=
s
z_TestPoll._child_stringscCsrd}|��\}}|j|j||fd�}|��|D]4}td�D]}|�d�r<qPq<|��}|�||�q0|��dS)N)rr	�a�br	sbyer	slopr���r�)	r�r}r�r�r�r�r:rWr�)r>r�rSrTr�rr�r2rrr�test_stringsD
s
z_TestPoll.test_stringscCs|�d�dSrb)r�)r�rBrrr�_child_boundariesS
sz_TestPoll._child_boundariescCsr|�d�\}}|j|j|fd�}|��t�d�ddg}|D]}|�|�q>|��|��|�	|�
�|�dS)NFr�r�sfirstssecond)r�r}r�r�r@r�r<rr�r�r:)r>rBrMr�r�rzrrr�test_boundaries[
s
z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r��cd)r<)r�rTrrr�_child_dont_mergeg
s

z_TestPoll._child_dont_mergecCs�|��\}}|�|�d�d�|�|�d�d�|j|j|fd�}|��|�|��d�|�|�d�d�|�|�d�d�|�|��d�|�|�d�d�|�|�d�d�|�|�d�d�|�|��d	�|��dS)
Nr'Fr#r�r�r!Tr�r�)r�rWr�r}r�r�r:r�)r>rSrTr�rrr�test_dont_mergem
sz_TestPoll.test_dont_mergeN)rGrHrIr\r�r2r�r�r�r�r�r�rrrrr�2
s


r�r]c@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr@cCsddlm}|jtjd�dS)Nr)�resource_sharerr�)rr�r>rr�)r�r�rrrr��
sz&_TestPicklingConnections.tearDownClasscCs�|D]@}|jj|d�}|�|j�|��}|�|�|��|��qt�tj	df�}|�|�
��|��\}}|�|�|��|��|��dS)Nrpr)rrrtr�rrxr�socket�
create_serverrr/�getsocknamer�)r�r'rsr�r}�new_connr6rrr�	_listener�
s


z"_TestPicklingConnections._listenercCsxt|jd�D]*\}}|j�|�}|�|���|��q|��\}}t��}|�|�|�	|���|��|��dSr)
r8r�rrrwr�r9rr�r)�sendall)r�r'rr=ryrrr�_remote�
s

z _TestPicklingConnections._remotecCs`|jj}|��\}}|j|j||fd�}d|_|��|��|��\}}|j|j|fd�}d|_|��|��|D]D}d|�	d�}	|�
�}
|�|
|	f�|�
�}|�|�
�|	�
��qv|�d�td�}	|�
�}
|�|
|	f�|�
�}g}|�
d�}
|
�s�q|�|
�q�d�|�}|�||	�
��|��|�d�|��|��|��|��dS)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr�r	)rrrsr�r}r�rqr�rr�r
r�r�rWr9rr�r�)r>rsZlconnZlconn0Zlpr�Zrconn0Zrpr�r=rr��bufrrrr�
test_pickling�
sF



z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)N�all is wellr�)r�r�r)r�r'rMrBr=rrr�child_access�
s
z%_TestPicklingConnections.child_accesscCs�|��\}}|j|j|fd�}d|_|��|��|jdd�\}}|�|�|��|�|��d�|��|jdd�\}}|�|�|��|�d�|��|�|��d�|�	�dS)Nr�TFr�r�ZfoobarZfoobarfoobar)
r�r}r�rqr�rr�rWr�r�)r>r'r6r�rBrMrrr�test_access�
s"


z$_TestPicklingConnections.test_accessN)rGrHrIr\r2r�r�r�r�r�r�rrrrr��
s


.
r�cs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeapr@cs*t���tjjj|_tj��tjj_dSr)r�rrr�r��_heap�old_heapZHeapr`r�rrrs
z_TestHeap.setUpcs|jtjj_t���dSr)r�rr�r�r�r�rr`r�rrrsz_TestHeap.tearDownc
Csjd}d}g}tjjj}d|_t|�D]L}tt�dd�d�}tj�|�}|�	|�t
|�|krnt�|�}||=~q$|j��bg}d}	d}
t
|j���D]@}|D]6\}}
}|�	|j�|�|
|||
df�|	||
7}	q�q�|j��D]B\}}|D]4\}
}|�	|j�|�|
|||
df�|
||
7}
q�q�|�|	|
tdd	�|jD���|��tt
|�d�D]n}||dd
�\}}
}||ddd
�\}}}||k�r�|�||j|j�|�|d�n|�||��q^Wd�n1�s�0Yt�|�|�r
|���q�|�|j|j�|�t
|j�d�|�t
|j�d�|�t
|j�d|j�|�t
|j�d�dS)N�r�rrOr)�free�occupiedcss|]}|jVqdSr�rW)r��arenarrrrm@r	z&_TestHeap.test_heap.<locals>.<genexpr>rV)rr�r�r�Z_DISCARD_FREE_SPACE_LARGER_THANr�r��random�lognormvariater�rt�	randranger�r�Z_len_to_seqr8Z_arenas�indexZ_allocated_blocksrrW�sum�sortrW�shufflergZ_n_freesZ
_n_mallocsZ_pending_free_blocks)r>Z
iterationsZ	maxblocksZblocksr�r�rWrTr�r�r�r�r�r�r>Zarena_blocksZnarenaZnstartZnstoprrr�	test_heaps`



��
�
0
z_TestHeap.test_heapcCsxt��st��|�tj�t��}|jtjg|�R�t�d�td�D](}tj	�
d�}tj	�
d�}||_||_qJdS)Nr�r�rO)r��	isenabled�enabler��disable�
get_threshold�
set_thresholdr�rr�r�Zbuddy)r>Z
thresholdsr�rSrTrrr�test_free_from_gcZs
z_TestHeap.test_free_from_gc)	rGrHrIr\rrr�r�r�rrr�rr�s
@r�c@s"eZdZdefdefdefgZdS)�_Foor2r3�zN)rGrHrIr/r0r1Z_fields_rrrrr�ts�r�c@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesr@cCsts|�d�dSr4r5r`rrrrsz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|��D]}||d9<q`dSr�)rXr2r3r�rt)r�r2r3r�r�rU�stringr�rrr�_double�sz_TestSharedCTypes._doubleFc
Cstdd|d�}ttd|d�}ttd|d�}ttdd|d�}|jdttd	��|d�}|jd
d|d�}td�|_|j	|j
||||||fd
�}d|_|��|�
�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�td	�D]}	|�||	|	d�q�|�|jtd��dS)Nr�rhrBgUUUUUU�?r0rVr�r-r�rfrr�r�T�gUUUUUU�?r1rb�@Z
hellohello)rr0r1r�rSr�r�rrXr}r�rqr�r�rWrQr2r3)
r>r�r2r3r�r�rUr�r�r�rrr�test_sharedctypes�s&
z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)NTrB)r�r`rrr�test_synchronize�sz"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nr��@r0r)r�r	r2r3r�rWrQ)r>r�rrrr�	test_copy�sz_TestSharedCTypes.test_copyN)F)
rGrHrIr\rr2r�r�r�r�rrrrr�{s


r�z&requires multiprocessing.shared_memoryc@s�eZdZdZedd��Zdd�Ze�e	j
dkd�dd	��Zd
d�Ze�e
jdkd
�dd��Ze�e
jdkd�dd��Zdd�Zdd�Zdd�Zdd�ZdS)�_TestSharedMemoryr@cCs8t|t�rt�|�}n|}||jdt|��<|��dSr)rr<r
�SharedMemoryr�rtr)Zshmem_name_or_objZbinary_dataZ	local_smsrrr�!_attach_existing_shmem_then_write�s

z3_TestSharedMemory._attach_existing_shmem_then_writecCs|tt���Sr)r<r4rv)r>�prefixrrr�
_new_shm_name�sz_TestSharedMemory._new_shm_namer$ztest is broken on Windowsc	s�|�d�}tj|ddd�}|�|j�|�|j|�|�|jd�|�t	|j
�|j�d|j
d<|�|j
dd�t�|�}|�|j
dd�|��tj|d|jd�}|�|jd|j�|��|�
t��tjdd	d�Wd�n1s�0Y|�
t��tjd
d�Wd�n1�s,0Ytj�d���}tj�|�d
�|�d�g}�fdd�|D�}||_tjddd�}|�|j�|�|j|d�||_tjddd�}|�|j�|�|j|d�Wd�n1�s�0Ytj�r�|�d�}	tj|	ddd�}
|�
t��Xz<|�|
jd�t�|	�}|��|��|
��W|
��n
|
��0Wd�n1�s�0Y|�
t�� tj|ddd�}Wd�n1�s�0Ytj�rGdd�dtj�}
|
|�}|�|j|j�|��|�
t��"t�d�}|��Wd�n1�s40Y|��|�
t��tjddd�}Wd�n1�sv0Y|�
t��tjddd�}Wd�n1�s�0Y|�
t��tjdd�}Wd�n1�s�0YdS)NZtest01_tsmbT���createrWr�rrr����F�r�z,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fncsg|]}�|�qSrrr�ZNAME_PREFIXrrr��r	z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rOZtest01_dblunlinkr�c@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rGrHrIr4rQ�O_RDWRZ_flagsrrrr�OptionalAttachSharedMemory'sr�Ztest01_nottherer3)r�r
r�r�rErWr r�rWrtr�rr�r�r7r8�mockZpatchZ_SHM_NAME_PREFIXZside_effect�_nameZ
_USE_POSIX�FileNotFoundError�FileExistsError)r>Z	name_tsmb�smsZalso_smsZsame_smsZmock_make_filename�namesZshm1Zshm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsr�Zok_if_exists_smsZnonexisting_smsZsms_invalidrr�r�test_shared_memory_basics�s�


,,�2
�

4�&
(..z+_TestSharedMemory.test_shared_memory_basicscCs�tjddd�}|�|j�|j|j|jdfd�}d|_|��|�	�|�
t|jdd��d�|j|j|dfd�}d|_|��|�	�|�
t|jdd��d�|�
�dS)NTr�r�showdyr�rcsHELLO)r
r�r�rEr}r�r rqr�r�rWrsr�r)r>r�r�rrr�#test_shared_memory_across_processesAs&��z5_TestSharedMemory.test_shared_memory_across_processesrz#not feasible in non-posix platformscCs�tj��}|��|�td��}t�|jj	t
j�|�td��}|�t
��"t�t��t
j�Wd�n1sr0Y|��dSr�)r�managers�SharedMemoryManagerr��
ShareableListr�r4r�rr�r�r/r�r�rvr)r>�smm�slZsl2rrr�4test_shared_memory_SharedMemoryServer_ignores_sigint]s
0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlycCs(d}tjj�d|�\}}}|�|�dS)Nz�if 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r�)rrr�rrrrrr�>test_shared_memory_SharedMemoryManager_reuses_resource_trackerus	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackercs�tj���|�t���jdd�Wd�n1s60Y����fdd�tdd�D�}�fdd�tdd	d
�D�}tj	|dj
jd�}|�t
|�d�tj|djd�}|�t
|j�d�|dj}���tjd
k�r|�t��tj|d�}Wd�n1�s0Ytj���.}|�	d�}|jd	d�}	|j
j}Wd�n1�sX0Ytjd
k�r�|�t��tj	|d�}
Wd�n1�s�0YdS)Nr_r�csg|]}��t|���qSr)r�r�r��Zsmm1rrr��r	zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rcr�csg|]}�j|d��qS)r�)r�)r�r*r�rrr��r	r-��r�r r$�howdy)rr�r�r�r7r�r�r�r
r��shmr rWrtr�r�rr�r�r�)r>ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2r�r�Z	absent_slrr�r�-test_shared_memory_SharedMemoryManager_basics�s,
*
,
(z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc	Cst�gd��}|�|jj�|�|jd�|�t|�d�t�	��`t�
d�|�t��|�
d�Wd�n1sx0Y|�|�
d�d�Wd�n1s�0Y|�|dd	�|�|d
d�|�t|�d�d|d<|�|dd�d
|d<|�|dd
�|�|jd�|�td��d|d<Wd�n1�sL0Y|�|dd
�d|d<|�|dd�|�|dd�|�td��d|d<Wd�n1�s�0Y|�|dd�|�td��d|d<Wd�n1�s0Y|�|dd�t�	��Pt�
d�|�|�d�d�|�|�d�d�|�|�d�d�Wd�n1�sz0Y|�d�}tj||d�}z�|�|jj|jj�|�||jj�|�t|�t|��|�|j|j�d|d<|�|dd�|�|dd�|j��W|j��n|j��0tj|jjd�}|�|jj|jj�d|d<|�|dd�|j��|j��t��}z~|�t|�d�|�|jd�|�|�d�d�|�t��|�
d�Wd�n1�s�0Y|j��W|j��n|j��0dS) N)r��HoWdYgX9��vq�r�NTr�z8s8sdqxxxxxx?xxxxxxxx?qrh�ignoreZ100r�rVrr�r�Tr�Zsomergz8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrOr�u	encodéess	123456789r�sadiosZtest03_duplicater��Mr3ipr8�any)r
r�r�r�rErWrlrt�warnings�catch_warnings�simplefilterr�r7r�r*r�rr�r�r r�r)r>r�Zname_duplicateZsl_copyZsl_tetheredZempty_slrrr�'test_shared_memory_ShareableList_basics�s��

(0��(�(�(

2


*z9_TestSharedMemory.test_shared_memory_ShareableList_basicscCs�t�td��}|�|jj�t�|�}t�|�}|�	t
|tj��|�	|dd�|�||u�d|d<|�|dd�dt
|jj�}t�td��}|�|jj�t�|�}|�	t
|�t
|�k�|j��|j��|j��dS)Nr�r3r_�changedrgrSi�)r
r�r�r�r�rE�pickle�dumps�loadsrorrrWrtr r)r>r�Z
serialized_slZdeserialized_slr Z	larger_slZserialized_larger_slrrr�)test_shared_memory_ShareableList_picklings&


�


z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc	Csd}tjtjdd|gtjtjd���}|j������}|�	�|�
�t��t
j}d}t��|kr�t�|�t|dd�}ztj|dd	�}WqXty�Yq�YqX0qXtd
��tjdkr�t�d|��d
�|j����}|�d|�Wd�n1s�0YdS)NaXif 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�rcFr�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�Popenr��
executable�PIPEr!�readline�strip�decoder�r&r@rArr�r��minr
r�r�r�r4r r�
unregisterr"rHr�)r>rr�r �deadlinerDr�rKrrr�4test_shared_memory_cleaned_after_process_termination!s4
�

�zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rGrHrIr\r�r�r�r8r[r�r�r�r�r4r r�r�r�r�r�r�rrrrr��s

x

`r�c@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalizer@cCstj��|_tj��dSr)r�_finalizer_registryr	�registry_backuprr`rrrr[sz_TestFinalize.setUpcCs&t��|�tj�tj�|j�dSr)r�r�rrr��updater�r`rrrr_sz_TestFinalize.tearDowncCs&Gdd�dt�}|�}tj||jdd�~t��|�}tj||jdd�}|�|�~t��|�}tj||jdd�|�}tj||jddd	�|�}tj||jd
dd	�|�}	tj|	|jddd	�|�}
tj|
|jd
dd	�tjd|jddd	�tjd|jddd	�t��|��t�	d�dS)Nc@seZdZdS)z)_TestFinalize._test_finalize.<locals>.FooNr�rrrrrfsr)rSr�)rT)rf)�d10rO)rB�exitpriority)�d01r)�d02)�d03�r�i����)�STOPi����)
r�r�Finalizer�r�r��_exit_functionrr4�_exit)r�r'rrSrTZclose_brfrrrrrrr�_test_finalizeds4z_TestFinalize._test_finalizecCs^|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|gd��dS)Nr�TcSsg|]}|�qSrr)r�rzrrrr��r	z/_TestFinalize.test_finalize.<locals>.<listcomp>r)rSrTrrrrr�)	r�r}rrqr�r�r8r�rW)r>r'r6r�r�rrr�
test_finalize�sz_TestFinalize.test_finalizec	sdd��G�fdd�dt��d�d���fdd�}���fdd	�}t��}t��}z�t�d
�t�ddd�tj|d�tj|d�g}t	j
�|��t�
d
�d�Wd�n1s�0Y�durʈ�Wt�|�tj|�t��nt�|�tj|�t��0dS)NcSsdSrrrrrr�cb�sz,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�t�dd�d�dS)NrOr�)r)r�rrr��randintr`�r
rrr?�sz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rGrHrIr?rrrrr�srFc
sR�sNt�t��d�zt��WqtyJ}z|�WYd}~qd}~00qdSr�)r@r�r�r�_run_finalizersr�r)r��finishrr�run_finalizers�sz8_TestFinalize.test_thread_safety.<locals>.run_finalizersc
sdi}�s`z$�fdd�td�D�|t�d�<Wqty\}z|�|��WYd}~qd}~00qdS)Ncsh|]
}���qSrrr�)rrr�	<setcomp>�r	zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rc)r�r��getrandbitsr�r)r-r�)rr�rrr�make_finalizers�s$z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rcrzr�T)r�r��getswitchintervalr�r��setswitchintervalr�r�rrrZ
start_threadsr@r�r�)r>rrZold_intervalZ
old_thresholdrMr)rr
r�rr�test_thread_safety�s2


�
"


�

z _TestFinalize.test_thread_safetyN)
rGrHrIr\rrr2rrrrrrrr�Ws
'r�c@seZdZdd�Zdd�ZdS)�_TestImportStarcCshddl}tj�tj�}tj�|�|�d�}|�|�}dd�|D�}dd�|D�}|�d�|�	d�|S)Nrz*.pycSs(g|] }tj�tj�|�d�d�qS)rOr)r4�path�splitext�split)r�rJrrrr��r	z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)r�r	rrrr��r	zmultiprocessing.__init__r)
�globr4r�dirnamer�__file__r��escaperr�)r>rZfolder�pattern�files�modulesrrr�get_module_names�s


z _TestImportStar.get_module_namescCs�|��}tjdkr2|�d�|�d�|�d�n|�d�tsJ|�d�tdur\|�d�|D]N}t|�tj|}|�t	|d�|�|j
D]}|�t	||�d||f�q�q`dS)	Nr$zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z%r does not have attribute %r)r$r�r�rrnr/r�r#ror�r%)r>r#r �mod�attrrrr�test_import�s&








�z_TestImportStar.test_importN)rGrHrIr$r(rrrrr�src@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLoggingr@cCsDt��}|�tj�|�|du�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGro�debug�info�	LOG_LEVEL)r>�loggerrrr�test_enable_loggings

z _TestLogging.test_enable_loggingcCst��}|�|���dSr)rr*r��getEffectiveLevel)r�r'r0rrr�_test_level	sz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nr-�%Fr�r�)�level)rr*�logging�	getLoggerr5r�r+r}r3r�rWr�r�r�NOTSETr/)	r>ZLEVEL1ZLEVEL2r0Zroot_loggerZ
root_levelrJrKr�rrr�
test_levels*


z_TestLogging.test_levelN)rGrHrIr\r1r2r3r9rrrrr)�s

r)c@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintrr@cCst�d�t�|tj�dSr�)r@r�r4r�r��SIGUSR1)r�r�rrr�_killerFs
z_TestPollEintr._killerr;�requires SIGUSR1c
s�dg��fdd�}t��}t�tj|�}z�|j|j|fd�}|��z,|jtjdd�}|��|�	�W|�	�n
|�	�0|�
�d�|�|jd�Wt�tj|�nt�tj|�0dS)NFcsd�d<dS)NTrrr��Z
got_signalrr�recordNsz._TestPollEintr.test_poll_eintr.<locals>.recordr�)r�r)
r4rvr�r;r}r<r�r@r�r�rorWrw)r>r?r�Z
oldhandlerZkillerr�rr>r�test_poll_eintrKs
z_TestPollEintr.test_poll_eintrN)rGrHrIr\r2r<r8r3r�r�r@rrrrr:Bs

r:c@s eZdZe�ed�dd��ZdS)�TestInvalidHandle�skipped on Windowsc	Cs^tj�d�}z.z|��Wnttfy0Yn0Wd|_nd|_0|�ttftjjd�dS)Ni�M�r3)rrr�
Connectionr�r7r4�_handler�rgrrr�test_invalid_handlesfs
�z&TestInvalidHandle.test_invalid_handlesN)rGrHrIr8r[�WIN32rErrrrrAds
rAc@seZdZdd�Zdd�ZdS)�	OtherTestcCs,Gdd�dt�}|�tjtjj|�d�dS)Nc@seZdZdd�Zdd�ZdS)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSsdS)N�something bogusr�r>rWrrrr:|szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdSrr�r>r[rrrr<~szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rGrHrIr:r<rrrr�_FakeConnection{srK�abc)r�r�r�AuthenticationErrorrr�deliver_challenge�r>rKrrr�#test_deliver_challenge_auth_failurezs
�z-OtherTest.test_deliver_challenge_auth_failurecCs,Gdd�dt�}|�tjtjj|�d�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncSs
d|_dSr�)rr`rrrr?�szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)NrOr�rHr	)rrrr�	CHALLENGErIrrrr:�s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdSrrrJrrrr<�szPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rGrHrIr?r:r<rrrrrK�srKrL)r�r�rrMrr�answer_challengerOrrr�"test_answer_challenge_auth_failure�s
�z,OtherTest.test_answer_challenge_auth_failureN)rGrHrIrPrSrrrrrGws
rGcCs|jd7_dSrN)r)�nsrrr�initializer�srUc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs"t��|_|j��|_d|j_dSr�)r�Manager�mgrr�rTrr`rrrr�s
zTestInitializers.setUpcCs|j��|j��dSr)rXrr�r`rrrr�s
zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dSrN)rr��SyncManagerr��	TypeErrorr�rUrTrWrrr�)r>r	rrr�test_manager_initializer�s
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)NrO)rU)
r�rZrr�rUrTrr�rWrr�rrr�test_pool_initializer�s
z&TestInitializers.test_pool_initializerN)rGrHrIrrr[r\rrrrrV�srVcCs*z|jdd�}Wntjy$Yn0dS)NF)�block)r�rjrs)re�itemrrr�_this_sub_process�sr_cCs2t��}tjt|fd�}d|_|��|��dSr�)rrr}r_rqr�r�)rZsubProcrrr�
_test_process�s
r`cCs||Srrr�rrr�_afunc�sracCs0tjdd�}|�tgd��}|��|��dS)Nrgr@)rOr�rVrgrcrbrh)rr�r�rarr�)r�r2rrr�pool_in_process�srbc@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dSr)�	_delegate�_pid)r>Zdelegaterrrr?�sz_file_like.__init__cCs$t��}||jkr||_g|_|jSr)r4rvre�_cacher�rrr�cache�s

z_file_like.cachecCs|j�|�dSr)rgr�rJrrrr��sz_file_like.writecCs|j�d�|j��g|_dS)Nr8)rdr�r�rgrfr`rrr�flush�sz_file_like.flushN)rGrHrIr?�propertyrgr�rhrrrrrc�s

rcc@s$eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs tjtd�}|��|��dS�Nrz)rr}r`r�r�)r>rrrr�test_queue_in_process�sz0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd�}|��|��dSrk)rr}rbr�r�r�rrr�test_pool_in_process�sz/TestStdinBadfiledescriptor.test_pool_in_processcsJt��}t|����d�tj�fdd�d�}���|��dksFJ�dS)Nr�cs���Sr)rhr�Zflikerrr��r	z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>rz)rrrcr�rr}rhr�)r>�siorrrnr�
test_flushing�s
z(TestStdinBadfiledescriptor.test_flushingN)rGrHrIrlrmrprrrrrj�srjc@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsBtd�D],}|r"t�t��d�|�|t��f�q|��dS)Nr�r#)r�r@r�r�r�r4rvr)r�rM�slowr�rrr�_child_test_wait�s
zTestWait._child_test_waitFc	sddlm}g}g�g}td�D]^}tjdd�\}}tj|j||fd�}d|_|��|�	�|�
|���
|�|�|j�q |r�||�D]@}z|�
�}	Wn$ty�|�|�|�	�Yq�0|�
|	�q�q�|��t�fdd	�td
�D��}
|�||
�dS)Nrr%rgFr�r�Tc3s"|]}�D]}||jfVq
qdSrr�)r�r�r��r�rrrm r	z%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionr&r�rr�r}rsrqr�rr�r�r�r�rGrr�rorW)r>rrr&�readers�messagesr�rBrMr�r=r�rrtr�	test_waits0


zTestWait.test_waitcCsVt��}|�|�td�D].}|r4t�t��d�|�d|�d��q|��dS)Nr�r#�%s
r�)	r�r)r�r@r�r�r�r
r)r�rrrrr�rrr�_child_test_wait_socket#s
z TestWait._child_test_wait_socketcCs2ddlm}t�tjdf�}|��}g}g}i}td�D]<}tj	|j
||fd�}	d|	_|	��|�
|	�|�|	j�q8td�D]"}|��\}
}|�
|
�g||
<q~|��|r�||�D]4}
|
�d�}|s�|�|
�|
��q�||
�
|�q�q�d�dd	�td
�D���d�}
|��D]}|�d�|�|
��qdS)
Nrr%rgr�Tr-r8css|]}d|VqdS)ryNrr�rrrrmLr	z,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r	)rur&r�r�rr/r�r�rr}rzrqr�r�r�r�rxrr�rr
r8rW)r>rrr&r}r6rvr�Zdicr�r�rBr�r=r��vrrr�test_wait_socket-s:�





zTestWait.test_wait_socketcCs|�d�dSr�)rxr`rrr�test_wait_slowPszTestWait.test_wait_slowcCs|�d�dSr�)r|r`rrr�test_wait_socket_slowSszTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nrr%rcr�rr皙�����?)
rur&rr�r@rArWr�r�r�)r>r&r�rSrTr�rYr�rrr�test_wait_timeoutVs
zTestWait.test_wait_timeoutcCs|��t�|�dSr)r�r@r�)r�r�Zperiodrrr�signal_and_sleepmszTestWait.signal_and_sleepcCs�ddlm}d}dd�}t�d�}t��\}}tj|j||fd�}|��|�|j	t
�|�|jdd��t
��}|||j	|g|d�}	t
��|}
|�|	|j	g�|�|
|d	�|�|
|d	�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�||j	|g��|�|
d
�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�|||j	|g��|�|
d
�|��|��dS)Nrr%rVcSst|dd�d�S)NcSst|�Sr)r�r�rrrr�vr	z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r�)ro)r}rrrr�vr	z,TestWait.test_wait_integer.<locals>.<lambda>r�rr�r�r)rur&rr�r�r}r�r�rrr�r�ror�r@rArWr�r�r�r�r�)r>r&r�Zsorted_r�rSrTr�r�rYr�rrr�test_wait_integerrs>
�

zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nrr%r3r�rO)	rur&rr�r@rArWr�r)r>r&rSrTrDrYrrr�test_neg_timeout�szTestWait.test_neg_timeoutN)F)F)rGrHrIr2rsrxrzr|r}r~r�r�r�r�rrrrrq�s


	
#
+rqc@s4eZdZe�ed�dd��Ze�ed�dd��ZdS)�TestInvalidFamilyrBcCs:|�t��tj�d�Wd�n1s,0YdS)Nz\\.\test�r�r7rrrrtr`rrr�test_invalid_family�sz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCs:|�t��tj�d�Wd�n1s,0YdS)Nz/var/test.piper�r`rrr�test_invalid_family_win32�sz+TestInvalidFamily.test_invalid_family_win32N)	rGrHrIr8r[rFr�r3r�rrrrr��s


r�c@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dSr)r�r*r��flags�r�r'rrr�run_in_grandchild�szTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrFr�r�)�jsonrr�r}r�r�r�r�rr*r�r��printr�)r�r�rBrMr��grandchild_flagsr�rrr�run_in_child�szTestFlags.run_in_childcCsHddl}d}t�tjdddd|g�}|�|�d��\}}|�||�dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()r�z-Sz-Or�r�)r�r��check_outputr�r�r�r�rW)r>r��progr[Zchild_flagsr�rrr�
test_flags�s�zTestFlags.test_flagsN)rGrHrIr2r�r�r�rrrrr��s


r�c@s eZdZedd��Zdd�ZdS)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)NrOrr�)r@r�r�rrrrrw)r��childrr'rrr�
_test_timeout�s


zTestTimeouts._test_timeoutc	Cs�t��}z�t�d�tjdd�\}}tjjdd�}tj|j||j	fd�}|�
�|��|�|�
�d�|��|��}|�|�
�d�|��|��t|�Wt�|�nt�|�0dS)	Nr#Tr��AF_INETrpr�rr�)r��getdefaulttimeout�setdefaulttimeoutrr�rrrtr}r�rr�rrWr�rxr)r>Zold_timeout�parentr�r}r�r'rrrr��s$
�
zTestTimeouts.test_timeoutN)rGrHrIr2r�r�rrrrr��s
r�c@seZdZdd�ZdS)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkrVtjj	�
||�\}}}|�|d�|�d|�n2tjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyrr	sRuntimeErrors123)rr�r4rr�rrrrr�Zassert_python_failurerWr�rrX)r>r�r r�rrKrrr�test_noforkbomb�szTestNoForkBomb.test_noforkbombN)rGrHrIr�rrrrr��sr�c@s eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCsV|dkr:tj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)NrOr�)
rr}r�r�rrr�rtr�_afterfork_registry)r�r�r'r�rrrr�s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrcr�)
rr�r�ForkAwareThreadLockrtr�r}r�r�rr�rZassertLessEqual)r>rBrMr}Zold_sizer�Znew_sizerrrr�s
z!TestForkAwareThreadLock.test_lockN)rGrHrIr2r�r�rrrrr�s

r�c@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCsZtrt����St����}g}|dkr>|�|�t�|�}q |D]}t�|�qB|SdS)Nr�)rFr��detachr�r4�dupr)r>rS�to_closer2rrr�get_high_socket_fd0s
zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|d���n
t�|�dS)N)r@)rFr�r��SOCK_STREAMrr4)r>rSrrrrBszTestCloseFds.closec
Cs\zt�|tjtj�}Wn.tyD}z|�|�WYd}~nd}~00|��|�d�dSr)r��fromfdr�r�r�r�r)r�r'rSrr�rrr�_test_closefdsHs zTestCloseFds._test_closefdsc	Cs�tst�d��t��\}}|��}zRtj|j||fd�}|��|�	�|�
�}t|�W|�	|�|�	�|�	�n|�	|�|�	�|�	�0t��dkr�|�
|d�n.d}|�|t�|�|jtjkp�|j|k|�dS)Nzrequires fd picklingr�ri6')rnr8r9rr�r�r}r�r�rr�rr�r�rrr4ror5rU�winerror)r>rJrKrSr�r�ZWSAENOTSOCKrrr�test_closefdRs2
�


�


�zTestCloseFds.test_closefdN)rGrHrIr�rr2r�r�rrrrr�.s

	r�c@sfeZdZeejej�Zedd��Z	e
�ee
d�d�dd��Zedd��Ze
�ee
d�d�d	d
��ZdS)�TestIgnoreEINTRcCsFdd�}t�tj|�|�d�|��}|�|�|�d|j�dS)NcSsdSrr�r-�framerrrr�wsz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�r;r�r�r<�
CONN_MAX_SIZE)r�r'r�r2rrr�_test_ignoreus

zTestIgnoreEINTR._test_ignorer;r=cCs�t��\}}z�tj|j|fd�}d|_|��|��|�|��d�t	�
d�t�|j
tj�t	�
d�|�d�|�|��d�t	�
d�t�|j
tj�|�|��d|j�t	�
d�|��W|��n
|��0dS)Nr�Tr�r#i�r�)rr�r}r�rqr�rrWr�r@r�r4r�r�r�r;r�r:r�r�rirrr�test_ignores(�





zTestIgnoreEINTR.test_ignorecCsbdd�}t�tj|�tj���.}|�|j�|��}|�d�Wd�n1sT0YdS)NcSsdSrrr�rrrr��sz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�r;rrrrtr�rrx)r�r'r�r}rSrrr�_test_ignore_listener�sz%TestIgnoreEINTR._test_ignore_listenercCs�t��\}}z�tj|j|fd�}d|_|��|��|��}t�	d�t
�|jt
j�t�	d�tj�|�}|�|��d�|��W|��n
|��0dS)Nr�Tr#r�)rr�r}r�rqr�rr�r@r�r4r�r�r�r;rrrwrWr�)r>r'r6r�rryrrr�test_ignore_listener�s �


z$TestIgnoreEINTR.test_ignore_listenerN)rGrHrI�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZEr�r2r�r8r3r�r�r�r�r�rrrrr�ps
	

	r�c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dSr)r�rr�r�rrr�_check_context�szTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NFr�r�)	r�r}r�r�rr�r�rWr�)r>r�rBrMr�Zchild_methodrrr�
check_context�szTestStartMethod.check_contextc	Cs~dD]t}zt�|�}Wnty,YqYn0|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qdS)N�rr�r(r�)	rr�r7rWr�r�r��set_start_methodr�)r>�methodr�rrrr��s
zTestStartMethod.test_contextc
Cs�t�t�d}t��}z�dD]�}ztj|dd�WntyHYqYn0|�t��|�t��}|�|��|�|�t	|�j
���|��|�|j
j
���|��|�t�|d7}qWtj|dd�ntj|dd�0|�|d�dS)Nrr�T��forcerO)r�set_forkserver_preload�PRELOADr�r�r7rWr�ror�rG�lower�
startswithr}r�r�)r>rZ
old_methodr�r�rrr�test_set_get�s(

�
 zTestStartMethod.test_set_getcCs\t��}tjdkr"|�|dg�n6|�|ddgkpT|ddgkpT|gd�kpT|gd�k�dS)Nr$r�rr�)r�rr()r�get_all_start_methodsr�r�rWro)r>�methodsrrr�test_get_all�s

�
�
�zTestStartMethod.test_get_allcCs�t��dkr|�d�tj�tj�t�d�}tj	j
�|�\}}}|��}|��}|�
�dksd|dkr~t|�t|�|�d�dS)Nr(z*test only relevant for 'forkserver' methodz
mp_preload.py�okr8z(failed spawning forkserver or grandchild)rr�rkr4rr�rrrrr�rr�rXr�r�)r>r r�rrKrrr�test_preload_resources�s
z&TestStartMethod.test_preload_resourcesN)
rGrHrIr2r�r�r�r�r�r�rrrrr��s


r�rcc@sHeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zedd��Z	d
d�Z
dS)�TestResourceTrackerc
Cs�d}tjD�]�}|j|d����|dkr6Wd�q
t��\}}tjtjdd|j	||d�g|gtj
d�}t�|�t|dd	d
��4}|�
����d�}|�
����d�}Wd�n1s�0Yt||�|��|��t��tj}	t��|	k�rbt�d�zt||�Wq�t�y^}
z0|�|
jtjtjf�WYd}
~
�qrWYd}
~
q�d}
~
00q�td
|�d���|j���d�}|j��d�	|�}|� ||�|� |d|�Wd�q
1�s�0Yq
dS)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!Znoopr�r�)rMr!)�pass_fdsr"r`TrNr�rzA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!rrrYr4�piper�r�r�r�rlr�rrGr�rXr�r"r�r&r@rArr�r�r4r�r5�ENOENT�EINVALr�r"rHZassertRegex)
r>rr!rBrMr�rJZname1Zname2r�r�rKr�rrr�test_resource_tracker�sJ��
0

&
�
�z)TestResourceTracker.test_resource_trackerc
Csdddlm}|j}|dur:t�|tj�tj|tjd�t	�
��"t	�d�|��Wd�n1sj0Y|j}t�||�t
�d�t�d�}t	j
dd���}t	�d	�|��}|��|��t�|�}~t��|�|��|�r0|�t|�d
�|d}	|�t|	jt��|�dt|	j �v�n|�t|�d�Wd�n1�sV0YdS)Nr��_resource_tracker)rwr�r!r�T)r?�alwaysrOzresource_tracker: process died)!� multiprocessing.resource_trackerr�rer4r�r�r�rZwait_processr�r�r�r,r@r�rr�r�r�r�r�r�r�r�r�rWrtro�
issubclass�category�UserWarningr<�message)
r>r-Z
should_dier�r�r�Zall_warnr�r�Zthe_warnrrr�check_resource_tracker_deathIs:

&



�z0TestResourceTracker.check_resource_tracker_deathcCs|�tjd�dSr�)r�r�r/r`rrr�test_resource_tracker_sigintnsz0TestResourceTracker.test_resource_tracker_sigintcCs|�tjd�dSr�)r�r�r�r`rrr�test_resource_tracker_sigtermrsz1TestResourceTracker.test_resource_tracker_sigtermcCs|�tjd�dSr�)r�r�r�r`rrr�test_resource_tracker_sigkillvsz1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}|��|jd|fv}||��M}|�|�dS)Nrr�)r�r�r,reZ_check_aliver�)r'r�r�Zreusedrrr�_is_resource_tracker_reusedzs
z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}|��|j}tjdd�\}}tj|j||fd�}|��|�	�}|�
�|��|��|�|�dS)Nrr�Fr�r�)
r�r�r,rerr�r}r�r�r�r�rro)r>r�r�rBrMr�Zis_resource_tracker_reusedrrr�test_resource_tracker_reused�s�z0TestResourceTracker.test_resource_tracker_reusedN)rGrHrIr�r�r�r�r�r�r�r�rrrrr��sJ%
	r�c@s8eZdZedd��Zdd�Zdd�Zejj	dd��Z
d	S)
�TestSimpleQueuecCs@|��z(|�|���|�|���W|��n
|��0dSr)r&rdr[r�rprrr�_test_empty�s
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)Nr�TF)r�SimpleQueuer�r}r�rqr�ror[r�r&rrWr�r�)r>rrcrdrrrr�
test_empty�s"�zTestSimpleQueue.test_emptycCst��}|��|��dSr)rr�r�r>rrrrr��szTestSimpleQueue.test_closecCs0t��}|��|�|jj�|�|jj�dSr)rr�rro�_readerrm�_writerr�rrr�test_closed�szTestSimpleQueue.test_closedN)rGrHrIr2r�r�r�rrZcpython_onlyr�rrrrr��s
	r�c@seZdZdd�ZdS)�TestPoolNotLeakOnFailurecs�d�g�G��fdd�d�}|�td��:tjjdtjj|d�d�}|��|�	�Wd�n1sh0Y|�
tdd	��D���dS)
NrVcs<eZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�ZdS)zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcesscs d|_d|_d|_��|�dS)NzFake Process)r rwr�r�)r>r�)�forked_processesrrr?�sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__cs"�dkrtd���d8�d|_dS)Nr�Manually induced OSErrorrOr�)r4r�r`)�will_fail_inrrr��szXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startcSs
d|_dS)N�stoppingr�r`rrrr��sz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatecSs|jdkrd|_dS)Nr��stoppedr�r`rrrr��s
zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joincSs|jdkp|jdkS)Nr�r�r�r`rrrrp�sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rGrHrIr?r�r�r�rpr�r�r�rr�FailingForkProcess�s
r�r�rc)r})�contextcss|]}|��VqdSrr�)r�rrrrrm�r	zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r�r4rr�r�r8r�Z	MagicMockrr�rr�)r>r�r�rr�r�test_release_unused_processes�s�
&�z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rGrHrIr�rrrrr��sr�c@sdeZdZdZejjZdd�Zdd�Z	e
dd��ZeZdd	�Z
d
d�Ze
dd
��Zdd�Ze
dd��ZdHdd�Ze
dd��ZdIdd�Ze
dd��ZdJdd�Zdd�Ze
d d!��Zd"d#�Ze
d$d%��Zd&d'�Ze
d(d)��Zd*d+�Ze
d,d-��ZdKd/d0�Zd1d2�Z e
d3d4��Z!d5d6�Z"e
d7d8��Z#d9d:�Z$e
d;d<��Z%d=d>�Z&e
d?d@��Z'dAdB�Z(e
dCdD��Z)dEdF�Z*dGS)L�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
    cCs|��|_|j��d|_dSr)�
manager_classrLr�rr`rrrrs

zTestSyncManagerTypes.setUpcCsB|jdur(|j��r(|j��|j��|j��d|_d|_dSr)rrpr�r�rLrr`rrrrs


zTestSyncManagerTypes.tearDowncCst��dSr)r�
reap_childrenr�rrrr�szTestSyncManagerTypes.setUpClasscCsxt|j�t��}d}tt���dkrtt�|�|d9}t��|}|dkrdtj	_
t	�dt���d|�d��qtqdS)	Nr�rOr�r�T�"multiprocessing.Manager still has � active children after � seconds)rrr@rArtrr�r�rr�environment_altered�
print_warning)r>�
start_timerDr�rrr�wait_proc_exits

��
z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)Nr�Tr)rr}rrqr�r�rWrw)r>Zworkerrzrrr�
run_worker1s

zTestSyncManagerTypes.run_workercCs*|��sJ�|��|��|�d�dS�Nr�)rr&r�r�rzrrrr�8sz TestSyncManagerTypes._test_eventcCs:|j��}|��|�|j|�|��r,J�|�d�dSr�)rLr�r�r�r�rr&�r>r�rrrr�?s

zTestSyncManagerTypes.test_eventcCs|��dSr�r�r�rrr�
_test_lockFszTestSyncManagerTypes._test_lockr�cCs6t|j|��}|�|j|�|��|�t|j�dSr)r#rLr�r�r�r�r��r>Zlnamer�rrrr�JszTestSyncManagerTypes.test_lockcCs|��|��dSr�r�r�r�rrr�_test_rlockPsz TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dSr)r#rLr�r�r�rrrr�UszTestSyncManagerTypes.test_rlockcCs|��dSrr�r�rrrr�Ysz$TestSyncManagerTypes._test_semaphorer�cCs(t|j|��}|�|j|�|��dSr)r#rLr�r�r�)r>�snamer�rrrr�]sz#TestSyncManagerTypes.test_semaphorecCs|jdd�dS)Nr�)r)r�r`rrrr�bsz+TestSyncManagerTypes.test_bounded_semaphorecCs|��|��dSrr�r�rrr�_test_conditionesz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dSr)rLr�r�rr�rrr�test_conditionjs
z#TestSyncManagerTypes.test_conditioncCs|jdksJ�|��dSrb)rrr�rrr�
_test_barriernsz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dSrb)rLr�r�rr�rrrrssz!TestSyncManagerTypes.test_barriercCs(|�Wd�n1s0YdSrrr�rrr�
_test_poolwszTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nrgr@)rLr�r�rr�rrr�	test_pool}szTestSyncManagerTypes.test_poolcCsd|��dksJ�|��sJ�|��r(J�|��dks8J�|��rDJ�|��dksTJ�|��s`J�dS�Nr�rcrb)r\r^r[r�r�rrr�_test_queue�sz TestSyncManagerTypes._test_queuercCsNt|j|�d�}|�d�|�d�|�|j|�|��s>J�|��rJJ�dSr)r#rLrdr�rr[r^)r>Zqnamer�rrr�
test_queue�s

zTestSyncManagerTypes.test_queuecCs|�d�dS)Nr})rr`rrr�test_joinable_queue�sz(TestSyncManagerTypes.test_joinable_queuecCst|ddksJ�|�d�dks"J�|�d�dks4J�|��|��|D]}qHt|�dks^J�|�d�dkspJ�dS)NrrcrO)rr�r��reversertrg)r�rzr2rrr�
_test_list�szTestSyncManagerTypes._test_listcCs>|j��}|�d�|�|j|�|r*J�|�t|�d�dS)Nrcr)rLr�r�r�rrWrtr�rrrra�s


zTestSyncManagerTypes.test_listcCs�t|�dksJ�|ddks J�|�d�dks2J�t|���dgksHJ�t|���dgks^J�t|���dgkstJ�|��ddiks�J�|��dks�J�dS)NrOr�rc)r�rc)rtr�r�rrpr8r	�popitemr�rrr�
_test_dict�szTestSyncManagerTypes._test_dictcCs<|j��}d|d<|�|j|�|r(J�|�t|�d�dS)Nrcr�r)rLrnr�r
rWrtr�rrrrr�s

zTestSyncManagerTypes.test_dictcCs,|jdksJ�|��dksJ�|�d�dS)NrOr�)rXr�r�r�rrr�_test_value�sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�rOr�)rLrr�rrWrXr�r�rrrr?�szTestSyncManagerTypes.test_valuecCsH|ddksJ�|ddks J�t|�dks0J�t|�ddgksDJ�dS)NrrOr�)rtr�r�rrr�_test_array�sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rrO)rLrSr�rr�rrrrV�szTestSyncManagerTypes.test_arraycCs |jdksJ�|jdksJ�dSr�r�r�rrr�_test_namespace�sz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dSr�)rLr�r2r3r�rr�rrrr��s
z#TestSyncManagerTypes.test_namespaceN)r�)r�)r�)r)+rGrHrIr�rr�rYr�rrr2r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr	rrar
rrrr?rrVrr�rrrrr��sd











	






r�c@seZdZdd�ZdS)�MiscTestCasecCstj|ttjddgd�dS)N�SUBDEBUGr,)�extraZ	blacklist)rZcheck__all__rr%r`rrr�test__all__�s�zMiscTestCase.test__all__N)rGrHrIrrrrrr�src@s$eZdZedd��Zedd��ZdS)�	BaseMixincCstjj��tj��f|_dSr)rr�	_danglingr	r��danglingr�rrrr��s
�zBaseMixin.setUpClasscCs�tj��ttjj�t|jd�}|r@dtj_t�	d|���d}tt
j�t|jd�}|rxdtj_t�	d|���d}dS)NrT�Dangling processes: rO�Dangling threads: )rrr�r�rrrrr�r�r�)r�rKrMrrrr��s
zBaseMixin.tearDownClassN)rGrHrIr2r�r�rrrrr�s
rc@s�eZdZdZejZejZeej�Zeej	�Z	eej
�Z
eej�Zeej�Zeej
�Z
eej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�ZdS)r�rKN)rGrHrIrjrr}rrr�rmr�r�r�r�rr}r�r�r�r�r�r�r�rrSr;rRrrrrr�s*
















r�cs
eZdZdZejZee�d��Z	ee�d��Z
ee�d��Zee�d��Zee�d��Z
ee�d��Zee�d��Zee�d	��Zee�d
��Zee�d��Zee�d��Zee�d
��Zee�d��Zee�d��Zedd��Ze�fdd��Ze�fdd��Z�ZS)�ManagerMixinrLz
manager.Queuezmanager.JoinableQueuezmanager.Lockz
manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz
manager.Eventzmanager.Barrierz
manager.Valuez
manager.Arrayzmanager.listzmanager.dictzmanager.NamespacecOs|jj|i|��Sr)rLr�)r�rBrCrrrr�*szManagerMixin.Poolcst���t��|_dSr)r�r�rrWrLr�r�rrr�.s
zManagerMixin.setUpClasscs�t��}d}tt���dkrjt�|�|d9}t��|}|dkrdtj_t�	dt���d|�d��qjqt
��|j�
�d	kr�dtj_t�	d
�t�	|j���|j��|j��d|_t���dS)Nr�rOr�r�Tr�r�r�rz5Shared objects which still exist at manager shutdown:)r@rArtrr�r�rrr�r�r�r�rLZ_number_of_objectsZ_debug_inforr�r�r�)r�r�rDr�r�rrr�3s.
��



zManagerMixin.tearDownClass)rGrHrIrjrr}ri�operator�
attrgetterrr}r�r�r�r�r�r�r�rrSr�rnr�r2r�r�r�r�rrr�rrs,
rc@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinrMN)rGrHrIrjr�dummyr}rrr�rmr�r�r�rr}r�r�r�r�r�r�r�rrSrrrrrUs$rc
sT|d}t�}hd�}|��D]�\}}t|t�s2qt|t�r�|turFqt|j�|ks^J|j��|jD]r}d|��|dd�}||��d}	Gdd�d||	t	j
�}
|dkr�t�d	�|
�}
||
_
|
_||
_|
||<qdqt|t	j
�rGd
d�d|t�}
||
_
|
_||
_|
||<qddg�dg����fdd�}��fd
d�}||d<||d<dS)NrG>rMrKrLZWithrO�Mixinc@seZdZdS�z*install_tests_in_module_dict.<locals>.TempNr�rrrr�Temp|sr!rLr1c@seZdZdSr r�rrrrr!�scs�t�t�tj��tjj���d<tj���d<tjdd��d<ztj	�dd�Wn t
ytt��d��Yn0t
j�d�r�zt��}Wnty�t�d��Yn0t�t��t���t�dS)	NrrOT)�
allow_noner�z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r�_cleanuprr	r�r�r�r7r8r9r�r�r�r�r4r:r�get_temp_dirr*r+r/rB�r�old_start_method�start_methodrr�setUpModule�s&

�z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj��tj�ddd�ttjj�t�d�}|rXd}dtj_t�	d|���d}tt
j�t�d�}|r�d}dtj_t�	d|���d}|r�t�d�tj
��dS)	NFrTr�rrOrr)rrr�rr�r�rrr�r�r�r@r�r�_cleanup_tests)Z
need_sleeprKrM)rr'rr�tearDownModule�s$

z4install_tests_in_module_dict.<locals>.tearDownModuler)r+)�globalsrrr�r�rJr�r\�
capitalizer8�TestCaser�requires_hashdigestrGrIrHr�)
Zremote_globsr(rHZlocal_globsZ	ALL_TYPESr �base�type_Znewnamerr!r)r+rr&r�install_tests_in_module_dictms<



r2)r')�r8Z
unittest.mockrrjr@rr�r�r4r�r5r�rTr�r�r6r�r�rr�r�r�Ztest.supportrZtest.support.script_helperrrr�
import_modulerZ*skip_if_broken_multiprocessing_synchronizer�rurZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr��multiprocessing.queuesrr�HAVE_SEND_HANDLErn�ImportErrorZmultiprocessing.sharedctypesrr	r�r
Z	HAS_SHMEMrYZcheck_sanitizerr9rrrr rr"r,r/r�rPrlrmrnr#Z
HAVE_GETVALUEr�rFr&r*r5rdr�Zctypesr.r/r0r1r�r:r;rJr^rargr}r5r?r]r`rar�r�r�r�r�r�r�r�r�r,rNr\r�r�r�r�r�r7r�r�r�r�r�r�r�rrr�rrr
r�registerrrrrr r"r(r$r/r2r;r9ror|r�r3r�r�r�r�r�r�r.rr)r:rArGrUrVr_r`rarbrcrjrqr�r�r�r�r�r�r�r�r[r�r�r�r�rrr�rrr2rrrr�<module>s�






�

-WG6*39FS 

	j(C:
14"0R
h8
%{+E"!2 "BCH�3)k	=

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists