HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/_test_multiprocessing.cpython-310.opt-2.pyc
o

�i��@s@	ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z e�!d	�Z"e�#�ddl$Z$ddl%Z&ddl'Z&ddl(Z&ddl)Z&ddl*Z&ddl+Z&dd
l&m,Z,zddl&m-Z-e-j.Z/Wne0y�dZ/Ynwzdd
l1m2Z2m3Z3dZ4Wne0y�dZ4Ynwz
ddl&m5Z5dZ6Wne0y�dZ6Ynwzddl7Z7Wne0�ydZ7Ynwej8dd��re�9d��dd�Z:dd�Z;dd�Z<e	j=dk�r5ddl&m>Z>dd�Z?e,j@ZAdZBdZCeC�rEd\ZDZEZFnd\ZDZEZFeGe"dd�ZHejId kZJdd!l%mKZKd"d#�ZLze	�Md$�ZNWnd%ZNYd&d'gZOzdd(lPmQZQmRZRmSZSmTZTWne0�y�eUZQdZRZSZTYnwd)d*�ZVGd+d,�d,eU�ZWGd-d.�d.eU�ZXd/d0�ZYGd1d2�d2�ZZGd3d4�d4eX�Z[Gd5d6�d6e&j\�Z]Gd7d8�d8eX�Z^d9d:�Z_d;d<�Z`Gd=d>�d>eX�ZaGd?d@�d@eX�ZbGdAdB�dBeX�ZcGdCdD�dDeX�ZdGdEdF�dFeX�ZeGdGdH�dHeU�ZfdIdJ�ZgGdKdL�dLeU�ZhGdMdN�dNeU�ZiGdOdP�dPeX�ZjGdQdR�dReX�ZkGdSdT�dTeX�ZlGdUdV�dVeX�Zmd�dXdY�ZndZd[�Zod\d]�Zpd^d_�ZqGd`da�daeU�ZrGdbdc�dces�Ztddde�ZuGdfdg�dgeX�Zvdhdi�Zwdjdk�ZxGdldm�dmeX�ZyGdndo�doeX�Zzddpl)m{Z{m|Z|m}Z}Gdqdr�dreU�Z~dsdt�ZGdudv�dve|�Z�Gdwdx�dxe{�Z�e�j�dye~dz�e�j�d{e~d|d}�e�j�dtee�d~�Gdd��d�eX�Z�e���Z�d�d��Z�Gd�d��d�e{�Z�e�j�d�e�dz�Gd�d��d�e{�Z�e���d��d�Z�Gd�d��d�eX�Z�e��d��Gd�d��d�eX��Z�e:d��Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�e��e/d��e��d��Gd�d��d�eX���Z�Gd�d��d�eX�Z�Gd�d��d�eQ�Z�Gd�d��d�eX�Z�e��e6d��e��d��Gd�d��d�eX���Z�Gd�d��d�eX�Z�Gd�d��d�ej��Z�Gd�d��d�eX�Z�Gd�d��d�eX�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�eU�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�Gd�d̈́d�ej��Z�Gd�dτd�ej��Z�e��ejId kdС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�ej��Z�Gd�dބd�eU�Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�d�d�Z�e��e�e"d�d�e��ejId�kd�Gd�d�d�ej����Z�dS)��N)�support)�hashlib_helper)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper�_multiprocessing)�util)�	reductionF)�Value�copyT)�
shared_memory)�addressz(libasan has a pthread_create() dead lockcC�
|�d�S)N�latin)�encode)�s�r�7/usr/local/lib/python3.10/test/_test_multiprocessing.pyrS�
rcCs&t|tjj�r|��|��dSdS�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread��queuerrr�close_queueWs�r cCst�|�dSr)rr)�processrrr�join_process]sr"�posix)�resource_trackercCstj||�dSr)r$�_CLEANUP_FUNCS)�name�rtyperrr�_resource_unlinkf�r(皙�����?)g=
ףp=�?gffffff�?gffffff�?)r*r*r*ZHAVE_BROKEN_SEM_GETVALUE�win32��waitcCs |dur
|dkr
d}t|g|�S)N�r,)�handle�timeoutrrr�wait_for_handle�sr1�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc	CsP	d}zt�d�}WnttfyYdSw|dks||kr!dSt�d|��)Nr3�SC_SEM_NSEMS_MAX���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��rAc@�eZdZdd�Zdd�ZdS)�
TimingWrappercC�||_d|_dSr)�func�elapsed)�selfrErrr�__init__��
zTimingWrapper.__init__cOs:t��}z|j|i|��Wt��||_St��||_wr)�time�	monotonicrErF)rG�args�kwds�trrr�__call__�s zTimingWrapper.__call__N��__name__�
__module__�__qualname__rHrOrrrrrC�srCc@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dSdS�N�)�
CHECK_TIMINGS�assertAlmostEqual�rG�a�brrr�assertTimingAlmostEqual�s�z$BaseTestCase.assertTimingAlmostEqualcGs.z||�}Wn
tyYdSw|�||�Sr)�NotImplementedError�assertEqual)rG�valuerErL�resrrr�assertReturnsIfImplemented�s�z'BaseTestCase.assertReturnsIfImplementedcG�td��)Nz#shouldn't try to pickle a test case)r`)rGrLrrr�
__reduce__��zBaseTestCase.__reduce__N)rQrRrS�
ALLOWED_TYPESr_rdrf�
__reduce_ex__rrrrrT�s
rTcCsZz|��WSty,z|jWYSty+z|jWYYSty*t�wwwr)�	get_valuer=Z_Semaphore__value�_valuer`�rGrrrrj�s
���rjc@�eZdZdd�ZdS)�
DummyCallablecC�|�d�dS�N�)�put)rG�q�crrrrO��zDummyCallable.__call__N)rQrRrSrOrrrrrn��rnc@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�rUrWcCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)NrW�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenra�identr;�getpid�exitcode)rG�currentr~rrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)NrWry��targetT�r�r�F)
rzr{r|�Process�_testrar�r}r�assertFalse)rGZproc0Zproc1�proc2rrr�test_daemon_arguments
z!_TestProcess.test_daemon_argumentcOsV|��}|�|�|�|�|�|j�|jdkr)|�t|j��|�|j�dSdS)NrW)r}rrr&rzr�r~�pid)�clsrsrLrMr�rrrr�
s


�z_TestProcess._testcCs�|jdkr|�d�|j��|�|���|jdd�\}}|j|j|fd�}|��|�	�|�
�\}}|�||��j
�|�|t���|�||��j�dS)NrWryF��duplex�r�rL)rzr{r|�assertIsNone�parent_process�Piper��_test_send_parent_process�start�join�recvrar}r�r;r�r&)rG�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�sKt
d��|��}|�|d	�dS)
NrWryFr�r��r0z(Could not communicate with child process�alive�	not alive)rzr{r|r�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�ra�	terminater�)rGr�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�rJ�sleep)r�r�r�rrrr�Dsz,_TestProcess._test_create_grandchild_processcCsVddlm}|�|���rdnd�|�jtjd�|�|���r&d�dSd�dS)Nrr�r�r�r�)r�r�r�r�r�r�
SHORT_TIMEOUTr�rrrr�Js"z'_TestProcess._test_report_parent_statuscCs�|�d�}|��}|ddf}ddd�}d}|j|j|||d�}d|_|��}|jd	kr3|�|j|j�|�|�	�d
�|�|jd�|�
||���|�t
|���tu�|�|jd�|��|�|jd�|�|�	�d�|�||���|�|��|dd��|�|��|�|�|��|j�|jd	kr�|�|��|j�|�|��|j�|��|�|jd�|�|�	�d
�|�
||���t|�dS)NrY��gR���Q@)�helloZbyeZSomeProcess)r�rL�kwargsr&TrWFr)r�Eventr�r�r�r}rzrar~r��assertNotIn�active_childrenr�type�listr�r��assertIn�getr&r�r�r )rGrs�erLr�r&r�r�rrr�test_processQs@



�

z_TestProcess.test_processzneeds native_idcCsr|jdkr|�d�|j��t��j}|�d�}|j|j|fd�}|�	�|�
�}|��t|�|�
||�dS)NrWryrYr�)rzr{r|�	threading�main_thread�	native_idrr��"_test_process_mainthread_native_idr�r�r�r �assertNotEqual)rGZcurrent_mainthread_native_idrsr�Zchild_mainthread_native_idrrr�!test_process_mainthread_native_idys


z._TestProcess.test_process_mainthread_native_idcCst��j}|�|�dSr)r�r�r�rr)r�rsZmainthread_native_idrrrr���
z/_TestProcess._test_process_mainthread_native_idcC�t�d�dS)N�d�rJr��r�rrr�_sleep_some�ruz_TestProcess._sleep_somecCst�|�dSrr�)r��delayrrr�_test_sleep�ruz_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	�r��fd
d�}t�tj|�}zt�d�|�|�d�Wt�d�t�tj|�nt�d�t�tj|�w|�|�d�|�|jd�|����d
�|��|�
����
��jS)NrWryr�Trr.r:rY�alarmcstd���)Nzjoin took too long: %s��RuntimeError�rL�r�rr�handler��z+_TestProcess._kill_process.<locals>.handler�
F)rzr{r|r�r�r�r�rar�r�r�r�rCr�r_rFrJr��hasattr�signal�SIGALRMr�r�)rG�methr�r�Zold_handlerrr�r�
_kill_process�sB






�z_TestProcess._kill_processcC�0|�tjj�}tjdkr|�|tj�dSdS�N�nt)	r�rr�r�r;r&rar��SIGTERM�rGr�rrr�test_terminate��
�z_TestProcess.test_terminatecCr�r�)	r�rr��killr;r&rar��SIGKILLr�rrr�	test_kill�r�z_TestProcess.test_killcCsHzt��}Wntyd}Ynw|�t|�tu�|�|dk�dSrX)r�	cpu_countr`rr��int)rGZcpusrrr�test_cpu_count�s�z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS�Nr�T)
rar�r�r�r�rJr��DELTAr�r�r�r�r��rGr�rrr�test_active_children�sz!_TestProcess.test_active_childrencCsV|�|�t|�dkr'td�D]}|j|j|||gfd�}|��|��qdSdS)Nr�r�)r�r��ranger��_test_recursionr�r�)r�r��id�ir�rrrr��s
�
�z_TestProcess._test_recursioncCs~|jdd�\}}|�|g�t�t�g}|��r$|�|���|��sgdgddgddgdgddgddgg}|�||�dS)NFr�rrY)	r�r�rJr�r�r��appendr�ra)rGr�r��result�expectedrrr�test_recursion�s 
��	z_TestProcess.test_recursioncCro)N�$@r,�r��eventrrr�_test_sentinelruz_TestProcess._test_sentinelcCs�|jdkr|�d�|j��|��}|j|j|fd�}|�t��|jWd�n1s.wY|�	�|�
|j�|j}|�|t
�|�t|dd��|��|��|�t|dd��dS)NrWryr�r.r�rY)rzr{r|r�r�r��assertRaisesr>�sentinelr��
addCleanupr�r�r�r�r1�setr)rGr�r�r�rrr�
test_sentinels
�z_TestProcess.test_sentinelrNcCs|dur|��t�|�dSr)r��sys�exit)r��rcrsrrr�_test_closesz_TestProcess._test_closecCs�|jdkr|�d�|j��|��}|j|jd|id�}d|_|��|�|�	�d�|�
t��|��Wd�n1s?wY|�
d�|��|�|�	�d�|�|jd�|��|�
t��|�	�Wd�n1stwY|�
t��|��Wd�n1s�wY|�
t��|��Wd�n1s�wY|��t�|�}~t��|�|�d�t|�dS)NrWryrs)r�r�TFr)rzr{r|rr�rr�r�rar�r�r>rrrr�r�r��weakref�ref�gc�collect�assertIsr )rGrsr��wrrrr�
test_close"s<

�

�
�
�
z_TestProcess.test_closecs(�jdkr��d��j��t��}|dkrdnd}�fdd�t|�D�}|D]}|��q'|D]}t|�q0|D]	}��|j	d�q9�fd	d�t|�D�}|D]}|��qPt
�d
�|D]}|��q^|D]}t|�qgt
jdkr�tjg}tjdkr�|�tj�|D]}��|j	|�q�dSdS)
NrWry�spawnrqr�csg|]
}�j�jdd��qS))�{�G�z�?r�)r�r���.0r�rlrr�
<listcomp>Js�z4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]	}�j�jd��qS)r�)r�r�r
rlrrrSs����MbP?r��darwin)rzr{r|r�get_start_methodr�r�r"rar�rJr�r�r;r&r�r�r��platformr�r�r�)rG�sm�N�procsr�Z	exitcodesrrlr�test_many_processesBs>

�


�






�z _TestProcess.test_many_processescCsnt�}t�|�}|��}|j|||fd�}~|��|��t��|�	|�d�|�
|��d�t|�dS)Nr�rq)
rnrrrr�r�r�rrrrar�r )rGrtrrsr�rrr�test_lose_target_refes
z!_TestProcess.test_lose_target_refcCs|�t���|��dSr)rrrZfd_countr-)rG�evtrsrrr�_test_child_fd_inflationrsz%_TestProcess._test_child_fd_inflationc	s��jdkr��d��j��t��}|dkr��d�|��d}�����������fdd�t|�D�}|D]}|��q7z*�fdd�t|�D�}��	t
t|��d|�W���|D]}|��q\t
��dS���|D]}|��qot
��w)	NrWry�forkrqcs g|]}�j�j��fd��qS�r�)r�rr
�rrsrGrrr�s�z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c�g|]}����qSr�r�r
�rsrrr��rY)rzr{r|rrr�rr�r�rar�r�r�r )rGrrrr�Z	fd_countsrrr�test_child_fd_inflationws0
�

�

z$_TestProcess.test_child_fd_inflationcs>�fdd�}�fdd�}tj|d���tj|dd���dS)Nc�t�d����dS)N��?�rJr�r�r�rrr�func1��
z2_TestProcess._test_wait_for_threads.<locals>.func1cr )N�)rJr��clearrr#rr�func2�r%z2_TestProcess._test_wait_for_threads.<locals>.func2r�Tr�)r��Threadr�)rGrr$r(rr#r�_test_wait_for_threads�sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)NrWryr�)
rzr{r|r�r�r*r�r�r�is_set)rGr�procrrr�test_wait_for_threads�s
z"_TestProcess.test_wait_for_threadscCsH|��D]\}}|dkrt��}|��nd}tt|d�q|��dS)Nr)�items�io�StringIOr�setattrr�r�)rGrZbreak_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}|D]?}tt|�}tt||�z+|��}|j|j|fd�}|�	�|�
�|�|���|�
|jd�Wtt||�qtt||�wqdS)Nr��stdout�stderrr�)r/r0r�getattrr�r1r�r�r5r�r�rr+rar�)rGZstreamsr2r4�
old_streamrr,rrr�test_error_on_stdio_flush_1�s$
���z(_TestProcess.test_error_on_stdio_flush_1cCs�dD]A}dD]<}tt|�}z.|��}|j|j|||ifd�}|��|��|�|���|�	|j
d�Wtt||�qtt||�wqdS)Nr6)r�remover�r)r9r�r�r�r5r�r�rr+rar�r1)rGr2r3r:rr,rrr�test_error_on_stdio_flush_2�s

���z(_TestProcess.test_error_on_stdio_flush_2r.cCst�|�|��dSrr")rGrr�rrr�_sleep_and_set_event��
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)
NrWry�
forkserverr)�_forkserverr!r��@)r�)rzr{r|rrZmultiprocessing.forkserverrA�ensure_runningr�r�r>r�Z_forkserver_pidr;r�rJr�r�rr+rar�r�)
rG�signumrrAr�rr,r�Zevt2r�rrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|�tj�dSr)rFr��SIGINTrlrrr�test_forkserver_sigint
�z#_TestProcess.test_forkserver_sigintcCstjdkr
|�tj�dSdSr�)r;r&rFr�r�rlrrr�test_forkserver_sigkills
�z$_TestProcess.test_forkserver_sigkill)rN�r.).rQrRrSrhr�r��classmethodr�r�r�r�r�r�r�r?�
skipUnlessr��_HAVE_THREAD_NATIVE_IDr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr*r-r5r;r=r>rFrHrJrrrrrw�sl
	


(



3


 #

&rwc@�,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dSr)rr�rHr��
child_conn�parent_connrlrrrrHsz_UpperCaser.__init__cCs<|j��t|jjd�D]
}|j�|���q|j��dSr)rRr�iterrQr�r��upper�rGrrrr�runs
z_UpperCaser.runcCs|j�|�|j��Sr)rRr�r�rUrrr�submit$s
z_UpperCaser.submitcCs$|j�d�|j��|j��dSr)rRr�rrQrlrrr�stop)s
z_UpperCaser.stopN)rQrRrSrHrVrWrXrrrrrPs
rPc@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess�rUcCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTr�ZHELLOZworldZWORLD)rPr�r�rarWrXr�)rGZ
uppercaserrrr�test_subclassing2sz(_TestSubclassingProcess.test_subclassingcCs�|jdkr|�d�|j��tj}|�tj|�|j|j|fd�}|�	�|�
�t|dd��}|��}|�
d|�|�
d|�|�
d|�Wd�dS1sQwYdS)	NrWryr��utf-8��encoding�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rzr{r|r�TESTFNr��unlinkr��_test_stderr_flushr�r��open�readr�)rG�testfnr,�f�errrrr�test_stderr_flush;s
"�z)_TestSubclassingProcess.test_stderr_flushcCs8t�|tjtjBtjB�}t|dddd�t_dddS)N�wr\F�r^�closefdrYr)r;rc�O_WRONLY�O_CREAT�O_EXCLr�r8)r�re�fdrrrrbLsz*_TestSubclassingProcess._test_stderr_flushcCs:t�|tjtjBtjB�}t|dddd�t_t�|�dS)Nrir\Frj)r;rcrlrmrnr�r8r�)r��reasonrerorrr�_test_sys_exitSsz&_TestSubclassingProcess._test_sys_exitc		CsF|jdkr|�d�|j��tj}|�tj|�gd�dfD]G}|j|j||fd�}d|_	|�
�t|�|�|j
d�t|dd	��}|��}Wd�n1sQwY|�|��t|��t�|�qgd
�}|D]4\}}|j|d��"|jtj|d�}d|_	|�
�t|�|�|j
|�Wd�n1s�wYqldS)NrWry)rYr��zignore thisr�TrYr\r])))TrY)�Fr))�rt)rr)rrr�)rzr{r|rr`r�rar�rqr�r�r"rar�rcrd�rstrip�strr;�subTestr�r�)	rGrerpr�rfZcontent�casesrLr�rrr�
test_sys_exitYs8
�
����z%_TestSubclassingProcess.test_sys_exitN)
rQrRrSrhr[rhrLrbrqryrrrrrY.s	

rYcCst|d�r	|��S|��dkS)N�emptyr)r�rz�qsizerrrr�queue_empty��
r|cCst|d�r	|��S|��|kS)N�full)r�r~r{)rs�maxsizerrr�
queue_full�r}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)Nr��rr�TFrYr�rr�rq�rr�)rr�r�r�r�r�rar|r�rr�
put_nowaitrJr�r�rCr��pyqueue�Fullr_rF�TIMEOUT1�TIMEOUT2�TIMEOUT3r�r-r�r )rGZMAXSIZErr�r�r,rrr�rrr�test_put�sR�




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nr�rrr�rq)r-rrr��r�rr�r�rrr�	_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�rrrYr�r�rqr)rr�r�r�r�r�rar|r�r-rJr�r�r��
get_nowaitrCr�r��Emptyr_rFr�r�r�r�r )rGrr�r�r,r�r�rrr�test_get�sF�


z_TestQueue.test_getcCstdd�D]}|�|�qdS)Nr�r&)r�rr)r�rr�rrr�
_test_forks�z_TestQueue._test_forkcCs�|��}td�D]}|�|�qt�t�|j|j|fd�}d|_|�	�td�D]
}|�
|��|�q)|�t
j|jd�|��t|�dS)Nr�r�Tr&F)rr�rrrJr�r�r�r�r�r�rar�r�r�r�r�r )rGrr�r�rrr�	test_forks
z_TestQueue.test_forkcCs�|��}z
|�|��d�Wnty|�d�Ynw|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedrYrqr�)rrar{r`r{rrr�r �rGrsrrr�
test_qsize:s�

z_TestQueue.test_qsizecCs(t|jd�D]}t�t�|��qdSr)rSr�rJr�r��	task_done)r�rs�objrrr�_test_task_doneJs

�z_TestQueue._test_task_donecs�������fdd�td�D�}|D]	}d|_|��qtd�D]}��|�q ���|D]}��d�q.|D]}|��q8t��dS)Ncsg|]}�j�j�fd��qSr)r�r�r
�rrGrrrSs�z-_TestQueue.test_task_done.<locals>.<listcomp>r�Tr�)�
JoinableQueuer�r�r�rrr�r )rG�workersr�r�rr�r�test_task_donePs�

z_TestQueue.test_task_donec
Cs�t���^d}t|dddd��
}|�d�Wd�n1s wYt�t����zt|�Wnt	j
yB|�d�YnwWd�n1sMwYWd�dSWd�dS1sewYdS)NZimported_by_an_imported_modulez.pyrir\r]z�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)rZtemp_cwdrc�writerZ
DirsOnSysPathr;�getcwd�
__import__r�r��fail)rG�module_namerfrrr�test_no_import_lock_contentionfs 
�����
"�z)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?r*)
rrrJrKr�r�r�r��assertGreaterEqualr )rGrsr��deltarrr�test_timeout{sz_TestQueue.test_timeoutc	Cs4|jdkr|�d�|j��Gdd�dt�}tj���%|��}|�|��|�d�|�	|j
tjd��t|�Wd�n1sCwYtj���C|jdd�}|�|��|�d�z
|�
|��d�Wn	tyrYnw|�	|j
tjd��|�	|���t|�Wd�dS1s�wYdS)	NrUryc@rm)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecS�t�r)r=rlrrrrf��zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N�rQrRrSrfrrrr�NotSerializable�rvr�Tr�rYr�)rzr{r|�object�testr�captured_stderrrrrrr�r�r rar{r`rz)rGr�rsrrr�"test_queue_feeder_donot_stop_onexc�s.


�
�
"�z-_TestQueue.test_queue_feeder_donot_stop_onexccs�|jdkr|�d�|j��Gdd�dt��G�fdd�dtjj�}��}tj�	��#|t�
�d�}|�|�|�d�|�|j
tjd	��Wd�n1sPwY|�|j�|�|j�dS)
NrUryc@seZdZ	dd�Zdd�ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablecSsd|_d|_dS�NF)�reduce_was_called� on_queue_feeder_error_was_calledrlrrrrH�rIzT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSs
d|_t��NT)r�r=rlrrrrf�szV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rQrRrSrHrfrrrrr��sr�cseZdZ	e�fdd��ZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuecs&t|t�rt|��rd|_dSdSdSr�)rr=r�)r�r��r�rr�_on_queue_feeder_error�s

�
�z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rQrRrS�staticmethodr�rr�rr�	SafeQueue�sr�)�ctxTr�)rzr{r|r�rrrr�rr��get_contextrrrr�r�r�r�)rGr�Znot_serializable_objrsrr�r�'test_queue_feeder_on_queue_feeder_error�s



�	z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc	Cs�t��t��fD];}|��|�td��
|�d�Wd�n1s$wY|�td��|��Wd�n1s>wYqdS)Nz	is closed�foo)rrr�r�assertRaisesRegexr>rrr�r�rrr�$test_closed_queue_put_get_exceptions�s�
���z/_TestQueue.test_closed_queue_put_get_exceptionsN)rQrRrSrLr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s&
;
	5

 &r�c@�$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|��}|�|��d�|�|�d�d�|�|��d�|�ttjf|j�dS)NTF)�Lockra�acquire�releaser�r>r��ThreadError�rG�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dSr�)�RLockrar�r�r�r�r�r�rrr�
test_rlock�sz_TestLock.test_rlockcCs.|���	Wd�dS1swYdSr�r�rlrrr�test_lock_context�s
"�z_TestLock.test_lock_contextN)rQrRrSr�r�r�rrrrr��s
r�c@rO)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�TrYrF)rdrjrar�r��rG�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�rrr�)�	Semaphorer�rar�rdrjr�rrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS�Nr�)�BoundedSemaphorer�r�rrr�test_bounded_semaphore�
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)NrUryrFr.Tr�)rzr{r|r�rCr�rar_rFr�r�r�)rGr�r�rrrr�s


z_TestSemaphore.test_timeoutN)rQrRrSr�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�wokenr0rrrrf's

z_TestCondition.fc	Cs\td�D]}z
|�|krWnWn
tyYnwt�t�qt�t�|�||�dS�Nr�)r�r`rJr�r�rd)rGrErbr�rrr�assertReachesEventually/s
��
z&_TestCondition.assertReachesEventuallycCs\|jdkr,z|j��|j��}|�|d�|�|j��d�WdSty+YdSwdS)NrUr)rz�_sleeping_countrj�_woken_countra�_wait_semaphorer`)rGr��sleepersrrr�check_invariant:s
���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�TrYr�)�	Conditionr�r�rfr�r�r�r�r�r)r�rJr�r�rdrj�notifyr�r�)rGr�r�r�r�rrr�test_notifyEs6





z_TestCondition.test_notifycs�|��}|�d�}|�d��td�D]4}|j|j||�tfd�}d|_|��|�|j	�t
j|j||�tfd�}d|_|��|�|j	�qtd�D]}|��qKtd�D]}���qV|�
dt��|�|�td�D]2}|j|j||�fd�}d|_|��|�|j	�t
j|j||�fd�}d|_|��|�|j	�qmtd�D]}|��q�t�t�|�
dt��|��|��|��|��fdd�d�|�|�dS)Nrrrr�Tr�c�t��Sr�rjr�r�rr�<lambda>��z0_TestCondition.test_notify_all.<locals>.<lambda>)r�r�r�r�rfr�r�r�r�r�r�r)r�rdrjr�rJr�r��
notify_allr�r��rGr�r�r�r�rNrr�r�test_notify_allrsP


�
�




z_TestCondition.test_notify_allcsP|��}|�d�}|�d��td�D]2}|j|j||�fd�}d|_|��|�|j�t	j
|j||�fd�}d|_|��|�|j�qtd�D]}|��qIt�
t�|�dt��|��|jdd�|��|��fdd	�d�|��|jd
d�|��|��fdd	�d�|��|jdd�|��|�dt��|�|�dS)Nrrrr�Tr�r�)�ncr�rr�rr�rrr��r�z._TestCondition.test_notify_n.<locals>.<lambda>r�cr�rr�rr�rrr��r�)r�r�r�r�rfr�r�r�r�r�r)r�rJr�r�rdrjr�r�r�r�r�rr�r�
test_notify_n�s:



z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dSr�)	r�rCr-r�r�r�rar_rF)rGr�r-rcrrrr��s
z_TestCondition.test_timeoutcsr|�-d�_|��|��fdd��}|r�jdkr't�d�Wd�dSWd�dS1s2wYdS)Nrc�
�jdkS�Nr��rbr��staterrr���
z0_TestCondition._test_waitfor_f.<locals>.<lambda>r�rY)rbr��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�n1s=wYt
d�D]$}t�d	�|��j	d
7_	|�
�Wd�n1sewYqFt|�|�|jd�dS)Nr�r:r�Tcr��Nrr�rr�rrr��r�z-_TestCondition.test_waitfor.<locals>.<lambda>rr�r	rY)r�rr�r�r�r�r�rrarbr�rJr�r�r"r�)rGr�r�r�r�rr�r�test_waitfor�s&
�

��z_TestCondition.test_waitforcs�|��|�Md}t��}|j�fdd�|d�}t��|}|s;|d|kr.|dkrKnnd|_Wd�dSWd�dSWd�dSWd�dS1sVwYdS)Nr*cr�r�r�rr�rrr�r�z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r�g333333�?r�T)r�rJrKr�rb)r�r�r��successr�r��dtr�rr�r�_test_waitfor_timeout_fs$���"�z&_TestCondition._test_waitfor_timeout_fc	Cs�|��}|�dd�}|�dd�}|�d�}|j|j||||fd�}d|_|��|�|jt	j
d��td�D]$}t�
d�|�|jd	7_|��Wd�n1sUwYq6t|�|�|j�dS)
Nr�rFr�Tr�rrr	rY)r�rr�r�r�r�r�rr�rr�r�rJr�rbr�r")rGr�r�r�r�r�r�rrr�test_waitfor_timeouts&

�

��z#_TestCondition.test_waitfor_timeoutcCsT|�|��Wd�n1swYt�d�|dur(t�|tj�dSdSrX)r�rJr�r;r�r�rG)r�rtr�rrr�_test_wait_result0s
�
�z _TestCondition._test_wait_resultcCs�t|t�rtjdkrt��}nd}|��}|�?|�|�d��|�|�d��|j	|j
||fd�}|��|�|�d��|durJ|�
t|jd�|��Wd�dS1sYwYdS)Nr+rr*r��<)r�ProcessesMixinr�rr;r�r�r�r-r�r�r�rr��KeyboardInterruptr�)rGr�rtr�rrr�test_wait_result8s

"�z_TestCondition.test_wait_resultr)rQrRrSrLrfr�r�r�r�r�r�r�r?rM�HAS_SHAREDCTYPESr�r�r�r�rrrrrr�%s(->2	






r�c@� eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dSr)rJr�r�r�r�rrr�_test_eventOr?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�rCr-rar+r_rFr�r�r'r�rr�r�r�)rGr�r-r�rrr�
test_eventTs&
z_TestEvent.test_eventN)rQrRrSrLrrrrrrrMs
rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�struct�calcsizer��__setstate__�
_lengthbuf)rG�wrapperr�rrrrH�sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lock�create_memoryview�castr)rGr�rrrr�sz_DummyList.__setstate__cCs|j|jfSr)rrrlrrr�__getstate__�r�z_DummyList.__getstate__cCs>|j�|jdd7<Wd�dS1swYdS�NrrY�rr)rG�_rrrr��s"�z_DummyList.appendcCs4|j�
|jdWd�S1swYdSr�rrlrrr�__len__�s$�z_DummyList.__len__N)rQrRrSrHrrr�rrrrrr�srcCr�)Nr	r�rrrr�_wait�rurc@s@eZdZ	ddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�BunchFc
Cs�	||_||_||_|��|_|��|_|��|_|s |j��g}t	|�D]}|j
|jd�}d|_|�
�|�|�q&dd�}	t�||	|�|_dS)Nr�TcSs|D]}|��qdSr)r�)rWr�rrr�finalize�s
�z Bunch.__init__.<locals>.finalize)rfrLr��	DummyList�started�finishedr��	_can_exitr�r�r��taskr�r�r�rr�
_finalizer)
rG�	namespacerfrLr�Zwait_before_exitrWr�r�rrrrrH�s"



zBunch.__init__c	CsZt��}|j�|�z|j|j�W|j�|�|j�d�dS|j�|�|j�d�w)N�)	r;r�rr�rfrLrrr-�rGr�rrrr�s�z
Bunch.taskcC�.t|j�|jkrt�t|j�|jksdSdSr)r�rr�rrlrrr�wait_for_started���zBunch.wait_for_startedcCr#r)r�rr�rrlrrr�wait_for_finished�r%zBunch.wait_for_finishedcCs|j��dSr)rr�rlrrr�	do_finish��zBunch.do_finishcCs|��dSr)rrlrrrr�r�zBunch.closeNrs)	rQrRrSrHrr$r&r'rrrrrr�s

rc@rB)�
AppendTruecCs
||_dSr)r�)rGr�rrrrH�rzAppendTrue.__init__cCs|j�d�dSr�)r�r�rlrrrrO��zAppendTrue.__call__NrPrrrrr)��r)c@s�eZdZ	dZdZdd�Zdd�Zdd�Zd	d
�Ze	dd��Z
d5dd�Zdd�Ze	dd��Z
dd�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.d/�Ze	d0d1��Zd2d3�Zd4S)6�_TestBarrierrqg>@cCs|j|j|jd�|_dS)Nr�)�Barrierr�defaultTimeout�barrierrlrrr�setUp�sz_TestBarrier.setUpcCs|j��d|_dSr)r/�abortrlrrr�tearDown�s

z_TestBarrier.tearDowncCs(|jdkrgS|jdkr|j��St�S)NrWrV)rzrVr�rrlrrrr�s



z_TestBarrier.DummyListcCs>t||||jd�}z||�|��W|��dS|��wrX)rrr&r)rGrfrLr^rrr�run_threads�s

z_TestBarrier.run_threadscCs\|j}t|�D]}|d�d�|��|d�d�|��qzWdSty-YdSw)NrTrY)�partiesr�r�r-r`)r�r/�resultsr��mr�rrr�	multipass�s
�z_TestBarrier.multipassrYcCs,	|��|��g}|�|j|j||f�dSr)rr3r7r/)rG�passesr5rrr�test_barriersz_TestBarrier.test_barriercCs	|�d�Sr�)r9rlrrr�test_barrier_10s
z_TestBarrier.test_barrier_10cCs|��}|�|�dSr)r-rr)r�r/rrcrrr�_test_wait_return_f�z _TestBarrier._test_wait_return_fcsT	|���|�|j|j�f��fdd�t|j�D�}|�|�d�d�t��dS)Ncrrrr
rrrr#rz1_TestBarrier.test_wait_return.<locals>.<listcomp>rrY)	rr3r;r/r�rra�countr �rGr5rrr�test_wait_returnsz_TestBarrier.test_wait_returncCs|��t|�dkrt�dSrX)r-r�r�)r�r/r5rrr�_test_action_f's�z_TestBarrier._test_action_fcCsD	|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)N)r3rY)rr-rr)r3r@rar�)rGr5r/rrr�test_action-s
z_TestBarrier.test_actioncCsnz|��}||jdkrt�|��|�d�WdStjy)|�d�YdSty6|��YdSw�Nr�T)r-rr�r�r��BrokenBarrierErrorr1)r�r/�results1�results2r�rrr�
_test_abort_f6s�z_TestBarrier._test_abort_fcCs`	|��}|��}|�|j|j||f�|�t|�d�|�t|�|jd�|�|jj�dSr)	rr3rFr/rar�rr�broken)rGrDrErrr�
test_abortCs
�z_TestBarrier.test_abortcCs�|��}||jdkr%|j|jdkr t�d�|j|jdks|��nz|��|�d�Wntjy?|�d�Ynw|��|�d�dS)Nr�rYr
T)	r-r�	n_waitingrJr��resetr�r�rC)r�r/rDrE�results3r�rrr�
_test_reset_fOs
�
�z_TestBarrier._test_reset_fcCsn	|��}|��}|��}|�|j|j|||f�|�t|�d�|�t|�|jd�|�t|�|j�dSr)rr3rLr/rar�r)rGrDrErKrrr�
test_resetas�z_TestBarrier.test_resetcCs�z|��}||jdkrt�|��|�d�Wntjy'|�d�Yn
ty3|��Ynw|��|jdkrA|��|��|��|�d�dSrB)r-rr�r�r�rCr1rJ)r�r/�barrier2rDrErKr�rrr�_test_abort_and_reset_fns �z$_TestBarrier._test_abort_and_reset_fcCs|	|��}|��}|��}|�|j�}|�|j|j||||f�|�t|�d�|�t|�|jd�|�t|�|j�dSr)rr-rr3rOr/rar�)rGrDrErKrNrrr�test_abort_and_reset�s�z!_TestBarrier.test_abort_and_resetcCsR|��}||jdkrt�d�z|�d�WdStjy(|�d�YdSw)Nr���?r!T)r-rrJr�r�rCr��r�r/r5r�rrr�_test_timeout_f�s
�z_TestBarrier._test_timeout_fcCs6	|��}|�|j|j|f�|�t|�|jj�dSr)rr3rSr/rar�r4r>rrrr��sz_TestBarrier.test_timeoutcCsT|�|j�}||jdkrt�d�z|��WdStjy)|�d�YdSw)Nr�rQT)r-r.rrJr�r�rCr�rRrrr�_test_default_timeout_f�s
�z$_TestBarrier._test_default_timeout_fcCsB	|j|jdd�}|��}|�|j||f�|�t|�|j�dS)Nr!r�)r-rrr3rTrar�r4)rGr/r5rrr�test_default_timeout�s
z!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dSrX)r-r-)rGr^rrr�test_single_thread�s
z_TestBarrier.test_single_threadc	CsHt|�D]}|��|�
|�|�Wd�n1swYqdSr)r�r-r�)r�r/r8�connr�r�rrr�_test_thousand_f�s���z_TestBarrier._test_thousand_fcCs�|jdkr|�d�|j��d}|��}|�d�\}}t|j�D]}|j|j|j	|||fd�}|�
�|�|j�q t|�D]}t|j�D]
}|�
|��|�qEq>dS)NrVry��Fr�)rzr{r|r�r�r�rr�rXr/r�r�r�rar�)rGr8r�rWrQ�jr�r�rrr�
test_thousand�s 
���z_TestBarrier.test_thousandN)rY)rQrRrSrr.r0r2rr3rLr7r9r:r;r?r@rArFrHrLrMrOrPrSr�rTrUrVrXr[rrrrr,�sJ




	






	
r,c@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValuerZ)r�i�i�^)�dg
@g�)�hi�����)rs��rt�x�ycC�ts	|�d�dSdS�Nz%requires multiprocessing.sharedctypes�rr{rlrrrr0���z_TestValue.setUpcCs$t||j�D]	\}}|d|_qdSr�)�zip�codes_valuesrb)r��values�sv�cvrrrr��s�z_TestValue._testFcs�|r
�fdd��jD�}n
�fdd��jD�}t|�j�D]
\}}��|j|d�q�j�j|fd�}d|_|��|��t|�j�D]
\}}��|j|d�qEdS)Nc�g|]\}}}��||��qSr)�RawValue�r�coderbrrlrrr���z)_TestValue.test_value.<locals>.<listcomp>crmr)rrorlrrr�rqrYr�Tr�)	rirhrarbr�r�r�r�r�)rG�rawrjrkrlr,rrlr�
test_value�s 
�
��z_TestValue.test_valuecC�|jdd�dS�NT)rr)rsrlrrr�
test_rawvaluer*z_TestValue.test_rawvaluec
Cs�|�dd�}|��}|��}|jdddd�}|��}|��}|��}|jdd|d�}|��}	|��}
|�||	�|jdddd�}|�t|d��|�t|d��|jt|jdddd�|�	dd�}|�t|d��|�t|d��dS)Nr�rq�r�F�get_lock�get_objZnavalue)
rrxryr�rar�r�r�r=rn)
rGZval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlocks$z_TestValue.test_getobj_getlockNrs)rQrRrSrhrrir0rLr�rsrvr�rrrrr\�s�

r\c@s~eZdZdZedd��Ze�edud�ddd��Z	e�edud�d	d
��Z
e�edud�dd��Ze�edud�d
d��ZdS)�
_TestArrayrZcCs0tdt|��D]}||||d7<qdSrX)r�r�)r��seqr�rrrrf$s�z_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�rrr�r�)rYr�rrr�r�rtr�T)�RawArray�Arrayrar�r��arrayrfr�r�r�r�)rGrrr��arrr�rrr�
test_array)s$$
z_TestArray.test_arraycCsrd}td�D]0}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qdS)Nr�rrr�r)r�r�rar�r�)rG�sizerr�rrr�test_array_from_sizeBs�z_TestArray.test_array_from_sizecCrtru)r�rlrrr�
test_rawarrayQrIz_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�rwFrxryZnotalock)r�r�r�rxryr�rar�r�r�r=r�)
rGZarr1rzr{Zarr2r|r}r�Zarr3r~rr�r�rrr�test_getobj_getlock_objUs(�z"_TestArray.test_getobj_getlock_objrs)
rQrRrSrhrLrfr?�skipIfr6r�r�r�r�rrrrr� s


r�c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_TestContainers�rVcCs^|�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�rqr�)r�rrr�)
rrYr�rrr�rrYr�rrr�r�)rrYr�rrr�rrYr�rrr�rqr�cS�g|]}|dd��qSrr)r�elementrrrr��z-_TestContainers.test_list.<locals>.<listcomp>)
rrYr�rrr�rqr�r�rt�	r�r)rrYr�rrr�rqr�r�rtr�r�)r�r�ra�extendr�)rGr]r^r]r�rfrrr�	test_listws*
�
 z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r�r)r�r�rSra�next)rGr]�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��q7��|d
��d���t|d
�d�tddd�D]}��t||�d�qb~���}|�|�~dS)Ncsg|]	}��td���qS)rr)r�r�)rZ_irlrrr��z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rrcSr�rr)r�innerrrrr�r�)rrYr��7rr:)rrYr�rYr�)r�r�ra�popr�r�)rGr]r�r^rrlr�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>�s�z,_TestContainers.test_dict.<locals>.<genexpr>cS�g|]}t|��qSrr�r
rrrr�rz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSrr�r
rrrr�r�)
�dictr�r�r�rar
�sorted�keysrjr.)rGr]�indicesr�rrr�	test_dict�s"z_TestContainers.test_dictcCsv|��}ttdd��}|D]}t|�||<q
t|�}|�t|�|�|�t|�g�t|�}|��|�tt	|�dS)Nr�r�)
r�r�r�r�rSrar'r�r�r�)rGr]r�r�r�rrr�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�r�)�ferrets�hamstersr�rr)�water�feed)�pets�suppliesr�r�rqZblanketsr�r�r��rr�rYZmarmots�X�cr:r�)r�rar'r�r�r�)rGr�r�r]�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�rrrrar�r�r\rrr�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_hiddenrarvrr�)rGr�rrr�test_namespace	sz_TestContainers.test_namespaceN)rQrRrSrhr�r�r�r�r�r�r�r�rrrrr�ss


.
r�r.cCst�|�||Srr�)rbr-rrr�sqr	s
r�cCs||Srr)rbrcrrr�mul	rgr�cCst�|�tdd��)Nrbi)rJr�r>r,rrr�raise_large_valuerror	r%r�cC�|Srr�rbrrr�identity	r�r�c@� eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_t�|�SrX)�n_instancesr��__new__r�rrrr�#	s
zCountedObject.__new__cCst|�jd8_dSrX)r�r�rlrrr�__del__'	szCountedObject.__del__N)rQrRrSr�r�r�rrrrr� 	sr�c@�eZdZdS)�SayWhenErrorN�rQrRrSrrrrr�*	sr�ccs:�|dkr	td��t|�D]
}||krtd��|Vq
dS)Nr:zSomebody 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�7	s
z_TestPool.setUpClasscs(|j��|j��d|_t���dSr)r�r�r�r��
tearDownClassr�r�rrr�<	s

z_TestPool.tearDownClasscCs@|jj}|�|td�td��|�|tdddi�tdd��dS)N)rqrqrrbrrr�)r��applyrar�)rGZpapplyrrr�
test_applyC	s"z_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r�r&��	chunksize)r��maprar�r�r�)rGZpmaprrr�test_mapH	s
,�z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�r�r:r�r�r&r�)r��starmapr�rhr�rar��	itertools)rGZpsmap�tuplesrrr�test_starmapN	s��z_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr�r�r:)
r�rhr�rar�Z
starmap_asyncr�r�r�r�)rGr�rrr�test_starmap_asyncW	s�z_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dSr�)rar��	map_asyncr�r�r�r�r�rlrrr�test_map_async\	s�z_TestPool.test_map_asynccCs�|jdkr
|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)NrV�1)�callback�error_callbackrYrr]r�)rzrVr�r�r�r�r�r-rar�r�r>)rGZ	call_argsrrr�test_map_async_callbacks`	s��z"_TestPool.test_map_async_callbackscCsr|jdkr|�d�|j��Gdd�dt�}|�t��|j�t|�gd�Wd�dS1s2wYdS)NrWryc@rm)z*_TestPool.test_map_unplicklable.<locals>.AcSre)Nz
cannot pickler�rlrrrrfr	rgz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr�rrrr�Aq	rvr�r�)	rzr{r|r�r�r�r�r�r�)rGr�rrr�test_map_unplicklablem	s
"�z_TestPool.test_map_unplicklablecCsBz|jjtgdd�jtd�WdStjy |�d�YdSw)NrYr�r�z2pool.map_async with chunksize stalled on null list)r�r�r�r�r�r�TimeoutErrorr�rlrrr�test_map_chunksizew	s
 �z_TestPool.test_map_chunksizecCsh|jdkr|�d�|j��|�t��|j�ttdd�d�Wd�n1s)wY|�t��|j�ttdd�d�Wd�n1sIwY|�t��|j�ttdd�d�Wd�n1siwYGdd�d�}|�t��|j�t|�d�Wd�n1s�wY|�t��|j�t|�d�Wd�dS1s�wYdS)	NrVryrYr:r�rrc@r�)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSr�rrrlrrr�__iter__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSr�r)r�rlrrr�__next__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cS�dSrXrrlrrrr�	r�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rQrRrSr�r�rrrrr�SpecialIterable�	�r�)	rzr{r|r�r�r�r�r�r�)rGr�rrr�"test_map_handle_iterable_exception}	s$
����"�z,_TestPool.test_map_handle_iterable_exceptioncCs<|j�tdtf�}t|j�}|�|�d�|�|jt�dS)Nr��1)	r��apply_asyncr�r�rCr�rar_rF�rGrcr�rrr�
test_async�	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nr�rQr�)r�r�r�r�rCr�r�rr�r_rFr�rrr�test_async_timeout�	s
z_TestPool.test_async_timeoutc	Cs�|j�tttd���}|�t|�tttttd�����|j�tttd���}td�D]}|�t|�||�q+|�t	|j
�|jjtttd��dd�}td�D]}|�t|�||�qP|�t	|j
�dS�Nr�rYr�r�)r��imapr�r�r�rar�r�r��
StopIterationr��rGr�r�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|�||�qA|�t|j	�|j�ttdd�d	�}t
d
�D]}|�t|�||�qd|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||�q�|�t|j	�dS)NrVryrYr:r�rrr&r�r�r�r�)
rzr{r|r�r�r�r�r�r�r�r�rar�r�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�rar�r�)rGr�rrr�test_imap_unordered�	s"&z_TestPool.test_imap_unorderedcCsn|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
|�}|�||�|�|�qRWd�n1snwY|j�ttdd�d	�}t
ttt
td����}|�t��td�D]}t
|�}|�||�|�|�q�Wd�dS1s�wYdS)
NrVryrYr:r�rrr&r�r�)rzr{r|r�r�r�r�r�r�r�r�r�r�r�r�r<)rGr�Zexpected_valuesr�rbrrr�-test_imap_unordered_handle_iterable_exception�	sH
�������"�z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs�|jdkrtnt}|�||jd�|�||jd�|jdkrA|�d�}z|�dt|j��W|��|�	�dS|��|�	�wdS)NrVr:rrr)
rz�RemoteErrorr>r�r�rar��_poolrr�)rGZexpected_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
�z,_TestPool.test_terminate.<locals>.<listcomp>i'rYr�rB)
r�r�rJr�r�r�rCr��
assertLessrF)rGr�r�rrrr�
s�
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dSrX)r�rar�r�r�r�r�r�r�rr�r�rrr�test_empty_iterable
s
z_TestPool.test_empty_iterablecCs�|jdkrDttd��}dd�|D�}|�d��}|�t|�}|�|��|�Wd�n1s0wY|��|�	t
|jt|�dSdS)NrUr�cSr�r)r�r
rrrr
rz*_TestPool.test_context.<locals>.<listcomp>r�)rzr�r�r�r�r�rar�r�r�r>)rG�Lr�r��rrrr�test_context
s
��z_TestPool.test_contextcCre)Nr�r�r�rrr�_test_traceback%
�z_TestPool._test_tracebackcCs�|jdkr�|�d��*}z|�|j�Wnty'}z|}WYd}~n
d}~ww|�d�Wd�n1s7wY|��|�t|�t	�|�
|jd�|j}|�t|�t
jj�|�d|j�tj���}z|�t	y{tjt���YnwWd�n1s�wY|�d|���|�d��=}z|�ttdd�d�Wnty�}z|}WYd}~n
d}~ww|�d�|�t|�t�|�|jd�Wd�n1s�wY|��dSdS)NrUrYzexpected RuntimeError)r�z&raise RuntimeError(123) # some commentr:zexpected SayWhenError)rzr�r�r
�	Exceptionr�r�rr�r�rarL�	__cause__rr�ZRemoteTracebackr��tbr�rr�r��
excepthook�exc_info�getvaluer�r�r�r�)rGr�r��exc�cause�f1rrr�test_traceback)
sR
��
�������
�	�z_TestPool.test_tracebackcCre)Nr�r�r�rrr�_test_wrapped_exceptionO
rz!_TestPool._test_wrapped_exceptionc	Csl|�d��#}|�t��|�|j�Wd�n1swYWd�n1s+wY|��dSrX)r�r�r�r�rr�r�rrr�test_wrapped_exceptionS
s���z _TestPool.test_wrapped_exceptioncCs�t��}|�t��C|�d��.}z|�tddg�Wt�d�|��|�	�nt�d�|��|�	�wWd�n1s@wYWd�n1sOwY|�
t��|d�dS)Nr�rrYr!g�������?)rJrKr�r>r�r�r�r�rr��
assertGreater)rGZt_startr�rrr�test_map_no_failfastZ
s


����
z_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q
�z4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)rr)r�orrrrr
scss�|]}|�VqdSrr)rrrrrr�x
��z3_TestPool.test_release_task_refs.<locals>.<genexpr>r)
r�r�r�r�rrrJr�r�rar�r�r�)rGZobjsZrefsrrr�test_release_task_refsn
s
z _TestPool.test_release_task_refsc	Cs�|jdkr
|�d�|�d�}|�Wd�n1swY|�t��|�Wd�n1s4wYWd�n1sCwY|��dS)NrV�test not applicable to managerrY)rzr{r�r�r>r��rGr�rrr�
test_enter}
s


����z_TestPool.test_entercCsx|jdkr
|�d�|�d�}|��|��tjj|_t	�
dtf��d}t�
�Wd�dS1s5wYdS)NrVrrYz%unclosed running multiprocessing pool)rzr{r�r�r�rr�ZRUN�_staterZcheck_warnings�ResourceWarningr�
gc_collectrrrr�test_resource_warning�
s



�
"�z_TestPool.test_resource_warning)"rQrRrSrLr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�rr	r
rrrrrr r$�
__classcell__rrr�rr�5	sD	

$


&
r�cCre)N�key)�KeyErrorrrrr�raising�
rgr(cCsdd�S)NcSr�)N�*rrrrrr��
�z%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�
rgr+c@r�)�_TestPoolWorkerErrorsrZcsjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nr�c�|�d<dSr�r�r�Z
scratchpadrr�errback�
r�z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�r�r)rr�r�r(r�r'r�rr�rr�)rGr�r0rcrr/r�test_async_error_callback�
s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}t�d�}td�D]6}dg��fdd�}|jt|d�}|�||j��d}|�	|�|�
�d|�|�|j�|�|j
�q|��|��dS)Nr)�MaybeEncodingErrorr�r&cr-r�rr.r/rrr0�
r�z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr1)�multiprocessing.poolr3rr�r�r�r+r�r�rr�ZassertIsNotNonerrbrr�)rGr3r�Z	iterationr0rc�wrappedrr/r�test_unpickleable_result�
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)rQrRrSrhr2r6rrrrr,�
sr,c@�0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestPoolWorkerLifetimerZc	Cstjddd�}|�dt|j��dd�|jD�}g}td�D]}|�|�t|f��qt	|�D]\}}|�|�
�t|��q/|��d}|retdd	�|jD��se|d
8}t
�t�|retdd	�|jD��rPdd�|jD�}|�d|�|�d|�|�t|�t|��|��|��dS)Nrrr���maxtasksperchildcS�g|]}|j�qSr�r��rrirrrr�
rzE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r��2cs��|]}|��VqdSr�r�r=rrrr��
��zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rYcSr;rr<r=rrrr�
r)rr�rar�rr�r�r�r��	enumerater�Z_repopulate_pool�allrJr�r�r�r�r�rr�)	rGr�Zorigworkerpidsr5r�rZrcZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime�
s(
�z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd�}g}td�D]
}|�|�t|df��q
|��|��t|�D]\}}|�	|�
�t|��q'dS)NrrrYr9r�g333333�?)rr�r�r�r�r�rr�rBrar�)rGr�r5r�rZrcrrr�%test_pool_worker_lifetime_early_close�
s�z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec	CsFdD]}|�t��tjd|d�Wd�n1swYqdS)N)rr:r!Z12rrr9)r�r>rr�)rGrbrrr�"test_pool_maxtasksperchild_invalid�
s���z:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalidcCs*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)r�r�
script_helper�assert_python_okra�rG�cmdr��outrgrrr�>test_worker_finalization_via_atexit_handler_of_multiprocessing�
s
zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rQrRrSrhrDrErFrMrrrrr8�
s
r8)�BaseManager�	BaseProxyrc@r�)�FooBarcCr�)N�f()rrlrrrrfr�zFooBar.fcCr�r)r>rlrrr�gr�zFooBar.gcCr�)N�_h()rrlrrr�_hr�z	FooBar._hN)rQrRrSrfrRrTrrrrrPr�rPccs�td�D]}||VqdSr�)r�)r�rrr�bazs��rUc@r�)�
IteratorProxy)r�cCr�rrrlrrrr�#r�zIteratorProxy.__iter__cCr)Nr�)�_callmethodrlrrrr�%rzIteratorProxy.__next__N)rQrRrSZ	_exposed_r�r�rrrrrV!srVc@r�)�	MyManagerNr�rrrrrX(�rX�Foo)�callable�Bar)rfrT)r[Zexposed)r[Z	proxytypec@r7)�_TestMyManagerr�cCs<t�}|��|�|�|��|�|jjdtjf�dSr�)	rXr��common�shutdownr��_processr�r�r��rGrVrrr�test_mymanager4s

z_TestMyManager.test_mymanagercCsLt��
}|�|�Wd�n1swY|�|jjdtjf�dSr�)rXr^r�r`r�r�r�rarrr�test_mymanager_context?s�z%_TestMyManager.test_mymanager_contextcCsPt�}|��|�
|�|�Wd�n1swY|�|jjd�dSr�)rXr�r^rar`r�rarrr�!test_mymanager_context_prestartedGs�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)Nc�g|]	}t�|�r|�qSr�r��rr&)r�rrrSr�z)_TestMyManager.common.<locals>.<listcomp>)rfrRrTcrerrfrg)�barrrrTr�rfrRrTrQrScSsg|]}||�qSrrr
rrrrcrr�)
rZr\rUrarfr�r>rRrWrrTr�r�)rGrVrUZfoo_methodsZbar_methodsr)rhr�rr^Ns "z_TestMyManager.commonN)rQrRrSrhrbrcrdr^rrrrr]0sr]cCstSr)�_queuerrrr�	get_queuekr�rjc@r�)�QueueManagerNr�rrrrrknrYrkc@r�)�
QueueManager2Nr�rrrrrlrrYrl�	xmlrpclibc@s8eZdZdZgd�Zedd�Zedd��Zdd�ZdS)�_TestRemoteManagerr�)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNcCs2t||td�}|��|��}|�t|j��dS)N�rr~Z
serializer)rl�
SERIALIZER�connectrjrr�tuplerj�r�rr~rVrrrr�_putter�s�z_TestRemoteManager._puttercCs�t�d�}ttjdf|td�}|��|�|j�|j	|j
|j|fd�}d|_|��t
|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� rrqr�T)r;�urandomrkr�HOSTrrr�r�r_r�rvrr�rlrsrjrar�r�r�rrrrJr�)rGr~rVr�Zmanager2rrrr�test_remote�s"
��z_TestRemoteManager.test_remote)	rQrRrSrhrjr�rLrvrzrrrrrnys
	rn�md5c@r)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)Nrqro)rkrrrsrjrrrurrrrv�s�z_TestManagerRestart._putterc
CsFt�d�}ttjdf|td�}z;|��}|j}|j�	�|�
�|j|j|j|fd�}|�
�|�
�|��}|�|��d�~Wt|d�rJ|��nt|d�rU|��wwt||td�}z
|�
�|�|j�WdSty�}z,|jtjkry�t�d�t||td�}t|d�r�|�|j�WYd}~dSWYd}~dSd}~ww)Nrwrrqr�ror_rQ)r;rxrkrryrrZ
get_serverr�listenerrr�r�rvr�rjrar�r�r_r��OSError�errnoZ
EADDRINUSErJr�)rGr~rVZsrvr�addrr�rr�rrr�test_rapid_restart�sN
�

�
�
��
�
���z&_TestManagerRestart.test_rapid_restartN)rQrRrSrLrvr�rrrrr|�s
r|�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)%�_TestConnectionrxcCs(t|jt�D]}|�|�q|��dSr)rS�
recv_bytes�SENTINEL�
send_bytesr)r�rW�msgrrr�_echo�sz_TestConnection._echoc
CsL|��\}}|j|j|fd�}d|_|��gd�}td�}|d}t�dttd���}|j	dkr;|�
t|���t
�|�
|�|�d�|�
|��|�|�
|�|�d�|�
|��|�|j	dk�rt�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|�|�}
Wntj�y}z|�
|j|f�WYd}~nd}~ww|�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)rYrpNror�r�r�rUrrrr�z(                                        zexpected BufferTooShort, got %sFr:r*�Xi)(r�r�r�r�r�rr�r�r�rzrar��filenor�r�r�r�r�r��recv_bytes_into�itemsize�	bytearrayr�BufferTooShortrLr�rCr�r_rFr�rJr�r�r�readable�writabler��EOFErrorr�)rGrWrQr�r�r�Zlongmsgr��bufferr�rcr�r�Zreally_big_msgrrr�test_connection�sz
�$���




z_TestConnection.test_connectioncCs�|jdd�\}}|�|�d�d�|�|��d�|jdkrR|�|jd�|�|jd�|�|jd�|�|jd�|�t|jd�|�t|j�|�t|j	�dSdS)NFr�rYrUTr�)
r�rar�r�rzr�r�r�r~r�)rG�reader�writerrrr�test_duplex_false:s
�z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)Nr�Tr�)r�r�r�r�r�rrr�rar�r�r�)rGrWrQr�r�rrr�test_spawn_closeG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)NrUry�abcdefghijklmnopqrstuvwxyzrqr�rt��r�r��rYr:r�)
rzr{r|rr�r�rar�r�r>)rGr�r]r^rrr�test_sendbytes\s&

z_TestConnection.test_sendbytesc
CsFzt�|�WdSty"}z|jtjkrWYd}~dS�d}~ww)NFT)r;�fstatr~r�EBADF)r�ror�rrr�_is_fd_assigned|s���z_TestConnection._is_fd_assignedFcCsd|rtdd�D]}|�|�st�|��|�qt�|�}tr%t�|tj	�}t�
||�t�|�dS)Nrr3)r�r�r;�dup2r�r�recv_handle�msvcrt�open_osfhandlerlr�r)r�rW�dataZcreate_dummy_fdsr�rorrr�_writefd�s
�
z_TestConnection._writefd�$test needs multiprocessing.reductioncCs�|jdkr
|�d�|jdd�\}}|j|j|dfd�}d|_|��|�tj	tj
�ttj
d��}|��}t
r=t
�|�}t�|||j�Wd�n1sOwY|��ttj
d��}|�|��d�Wd�dS1srwYdS)	NrU�only makes sense with processesTr�sfoor��wb�rb)rzr{r�r�r�r�r�r�rrar`rcr�r�Z
get_osfhandler�send_handler�r�rard)rGrWrQr�rfrorrr�test_fd_transfer�s"


�"�z _TestConnection.test_fd_transferr+�*test semantics don't make sense on Windowsr3z)largest assignable fd number is too smallr�ztest needs os.dup2()c
Cs6|jdkr
|�d�|jdd�\}}|j|j|ddfd�}d|_|��|�tj	tj
�ttj
d��<}|��}t
dt�D]	}|�|�sEnq<|�d	�t�||�zt�|||j�Wt�|�nt�|�wWd�n1sqwY|��ttj
d
��}|�|��d�Wd�dS1s�wYdS)NrUr�Tr�sbarr�r�r3z2could not find an unassigned large file descriptorr�)rzr{r�r�r�r�r�r�rrar`rcr�r��MAXFDr�r�r;r�rr�r�rr�rard)rGrWrQr�rfroZnewfdrrr�test_large_fd_transfer�s.
	

�
�"�z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r;r�r��rGrWrrr�_send_data_without_fd��z%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr
|�d�|jdd�\}}|j|j|fd�}d|_|��|�tt	j
|�|��dS)NrUr�Tr�r�)rzr{r�r�r�r�r�r�r�rr�r��rGrWrQr�rrr�test_missing_fd_transfer�s

z(_TestConnection.test_missing_fd_transferc	Cs�|��\}}|�8|�&|�d�|�|��d�|jdkr*|�|j�|�|j�Wd�n1s4wYWd�n1sCwY|jdkri|�|j�|�|j�|�t	|j�|�t	|j�dSdS�N�rU)
r�r�rar�rzr��closedrr�r~r\rrrr	�s"

���
�z_TestConnection.test_contextNrs)rQrRrSrhrLr�r�r�r�r�r�r�r?rM�
HAS_REDUCTIONr�r�r�rr�r�r;r�r�r�r	rrrrr��s>
O
 




�
��


r�c@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListenerrZcCsB|jjD]}|jj|d�}|�|j�|�t|jj|j|�qdS)N��family)�
connection�families�Listenerr�rr�r~r)rGr�r�rrr�test_multiple_bind�s��z _TestListener.test_multiple_bindc
Cs�|j���@}|j�|j��)}|���}|�d�|�|��d�Wd�n1s*wYWd�n1s9wYWd�n1sHwY|jdkr[|�	t
|j�dSdSr��r�r��Clientr�acceptr�rar�rzr�r~)rGr�rtr]rrrr	�s

�����
�z_TestListener.test_contextz"test needs abstract socket supportc
Cs�|j�d��@}|j�|j��)}|���}|�d�|�|��d�Wd�n1s+wYWd�n1s:wYWd�n1sIwY|jdkr\|�	t
|j�dSdS)Nz
somethingr�rUr�)rGr}�clientr]rrr�test_abstract_socket�s

�����
�z"_TestListener.test_abstract_socketN)rQrRrSrhr�r	r?rMr
�abstract_sockets_supportedr�rrrrr��s
�r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClientrxcCs"|j�|�}|�d�|��dS)Nr�)r�r�r�r)r�rrWrrrr�
s
z_TestListenerClient._testcCsj|jjD].}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��qdS)Nr�r�Tr�)
r�r�r�r�r�rr�r�r�rar�r�r)rGr�r�r�rWrrr�test_listener_client
s
�z(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)Nr�TrYr�)r�r�r�r�rr�r�rJr�r�rar�rr�)rGr�r�rWrrr�test_issue14725!
s

z#_TestListenerClient.test_issue14725cCsh|jjD]-}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�qdS)Nr��hellorY)
r�r�r�r�rr�r�rr�r)rG�famr�rtr]rrr�test_issue169551
s

�z#_TestListenerClient.test_issue16955N)	rQrRrSrhrLr�r�r�r�rrrrr�
s
r�c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPollrxcCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NF�T)r�rar�r�r\rrr�test_empty_string@
s

z_TestPoll.test_empty_stringcCs*|D]}t�d�|�|�q|��dS�Nr*)rJr�r�r)r�rW�stringsrrrr�_child_stringsG
s
z_TestPoll._child_stringscCsrd}|��\}}|j|j||fd�}|��|D]}td�D]	}|�d�r'nq|��}|�||�q|��dS)N)r�r��a�br�sbyer�slopr���r	)	r�r�r�r�r�r�r�rar�)rGr�r]r^r�rr�rbrrr�test_stringsN
s
�z_TestPoll.test_stringscCrorp)r�)r�rrrr�_child_boundaries]
sz_TestPoll._child_boundariescCsr|�d�\}}|j|j|fd�}|��t�d�ddg}|D]}|�|�q|��|��|�	|�
�|�dS)NFr�r�sfirstssecond)r�r�r�r�rJr�r�rr�r�r�)rGrrir�rr�rrr�test_boundariese
s
z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r��cd)r�)r�r^rrr�_child_dont_mergeq
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�rQTr�r�)r�rar�r�r�r�r�r�)rGr]r^r�rrr�test_dont_mergew
sz_TestPoll.test_dont_mergeN)rQrRrSrhr�rLr�r�r�r�r�r�rrrrr�<
s


r�r�c@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsrZcCsddlm}|jtjd�dS)Nr)�resource_sharerr�)rr�rXrr�)r�r�rrrr��
sz&_TestPicklingConnections.tearDownClasscCs�|D] }|jj|d�}|�|j�|��}|�|�|��|��qt�tj	df�}|�|�
��|��\}}|�|�|��|��|��dS)Nr�r)r�r�r�rr�r�socket�
create_serverrry�getsocknamer�)r�rWr�r�r��new_connr�rrr�	_listener�
s


z"_TestPicklingConnections._listenercCsxt|jd�D]\}}|j�|�}|�|���|��q|��\}}t��}|�|�|�	|���|��|��dSr)
rSr�r�r�r�rTrr�rs�sendall)r�rWrr�r�rrr�_remote�
s

z _TestPicklingConnections._remotecCs^|jj}|��\}}|j|j||fd�}d|_|��|��|��\}}|j|j|fd�}d|_|��|��|D]"}d|�	d�}	|�
�}
|�|
|	f�|�
�}|�|�
�|	�
��q;|�d�td�}	|�
�}
|�|
|	f�|�
�}g}	|�
d�}
|
s�n|�|
�qyd�|�}|�||	�
��|��|�d�|��|��|��|��dS)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr�r�)r�r�r�r�r�r�r�rr�rr�r�rarTrr�r�)rGr�ZlconnZlconn0Zlpr�Zrconn0Zrpr�r�rr��bufrrrr�
test_pickling�
sJ


�

z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)N�all is wellr�)r�r�r)r�rWrirr�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�r�r�rr�rar�r�)rGrWrQr�rrirrr�test_access�
s"


z$_TestPicklingConnections.test_accessN)rQrRrSrhrLr�r�r�r�r�r�rrrrr��
s


.
r�cs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeaprZcs*t���tjjj|_tj��tjj_dSr)r�r0rrr�_heap�old_heapZHeaprlr�rrr0s
z_TestHeap.setUpcs|jtjj_t���dSr)r�rrrr�r�r2rlr�rrr2 �z_TestHeap.tearDownc
Csbd}d}g}tjjj}d|_t|�D]&}tt�dd�d�}tj�|�}|�	|�t
|�|kr7t�|�}||=~q|j��g}d}	d}
t
|j���D] }|D]\}}
}|�	|j�|�|
|||
df�|	||
7}	qNqJ|j��D]!\}}|D]\}
}|�	|j�|�|
|||
df�|
||
7}
qvqp|�|	|
tdd	�|jD���|��tt
|�d�D]5}||dd
�\}}
}||ddd
�\}}}||kr�|�||j|j�|�|d�q�|�||�q�Wd�n1s�wYt�|�|�r|��|s�|�|j|j�|�t
|j�d�|�t
|j�d�|�t
|j�d|j�|�t
|j�d�dS)N�r>rrYrY�free�occupiedcss�|]}|jVqdSr�r�)r�arenarrrr�Jrz&_TestHeap.test_heap.<locals>.<genexpr>rr)rrrr�Z_DISCARD_FREE_SPACE_LARGER_THANr�r��random�lognormvariater�r��	randrangerr�Z_len_to_seqrjZ_arenas�indexZ_allocated_blocksr.ra�sum�sortr��shuffler�Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rGZ
iterationsZ	maxblocksZblocksrr�r�r^rCr�r�rr�r�rXZarena_blocksZnarenaZnstartZnstoprrr�	test_heap$sj


����
���
"�z_TestHeap.test_heapcCsxt��st��|�tj�t��}|jtjg|�R�t�d�td�D]}tj	�
d�}tj	�
d�}||_||_q%dS)Nr�r�rY)r�	isenabled�enabler��disable�
get_threshold�
set_thresholdr�rrrZbuddy)rGZ
thresholdsr�r]r^rrr�test_free_from_gcds
�z_TestHeap.test_free_from_gc)	rQrRrSrhr0r2r�rr%rrr�rr�s@r�c@s"eZdZdefdefdefgZdS)�_Foorbrc�zN)rQrRrSr6r7r8Z_fields_rrrrr~s
�rc@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesrZcCrdrerfrlrrrr0�rgz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|��D]
}||d9<q0dSr�)rbrbrcr�r�)r�rbrcrr�r��stringr�rrr�_double�s�z_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�qv|�|jtd��dS)Nr�r�rwgUUUUUU�?r`rrr�r]r�rtr&r�r�T�gUUUUUU�?rar��@Z
hellohello)rr7r8rr�r�r�rrbr�rr�r�r�rar[rbrc)
rGr�rbrcrr�r�rr�r�rrr�test_sharedctypes�s&
z#_TestSharedCTypes.test_sharedctypescCrt)NTrw)r	rlrrr�test_synchronize�r*z"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nr��@r`r)rr
rbrcrrar[)rGr�rhrrr�	test_copy�sz_TestSharedCTypes.test_copyNrs)
rQrRrSrhr0rLrr	r
rrrrrr�s


rz&requires multiprocessing.shared_memoryc@s�eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Ze
�ejdkd�dd��Ze
�ejdkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�_TestSharedMemoryrZcCs8t|t�rt�|�}n|}||jdt|��<|��dSr)rrvr�SharedMemoryr�r�r)Zshmem_name_or_objZbinary_dataZ	local_smsrrr�!_attach_existing_shmem_then_write�s

z3_TestSharedMemory._attach_existing_shmem_then_writecCs|tt���Sr)rvr;r�)rG�prefixrrr�
_new_shm_name�sz_TestSharedMemory._new_shm_namec	sp|�d�}tj|ddd�}|�|j�|�|j|�|�|jd�|�t	|j
�|j�|�|jt|��|�t|j�t|��d|j
d<|�|j
dd�t�|�}|�|j
dd�|�
�tj|d|jd�}|�|jd|j�|�
�|�t��tjdd	d�Wd�n1s�wY|�t��tjd
d�Wd�n1s�wYtj�d��P}tj�|�d
�|�d�g}�fdd�|D�}||_tjddd�}|�|j�|�|j|d�||_tjddd�}|�|j�|�|j|d�Wd�n	1�swYtj�rX|�d�}	tj|	ddd�}
|�t��,z|�|
jd�t�|	�}|��|�
�|
�
�W|
��n|
��wWd�n	1�sSwY|�t��tj|ddd�}Wd�n	1�sqwYtj�r�Gdd�dtj�}
|
|�}|�|j|j�|�
�|�t��t�d�}|��Wd�n	1�s�wY|�
�dS)NZtest01_tsmbT���creater�r)rr&r����F�r�,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc�g|]}�|�qSrrrg�ZNAME_PREFIXrrr�rz?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rYZtest01_dblunlinkr�c@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rQrRrSr;rm�O_RDWRZ_flagsrrrr�OptionalAttachSharedMemory4�rZtest01_notthere)rrrr�rarar&r�r�r�r�r�rvrrr�r>r?�mock�patch�_SHM_NAME_PREFIX�side_effect�_nameZ
_USE_POSIX�FileNotFoundError�FileExistsError)rGZ	name_tsmb�smsZalso_smsZsame_sms�mock_make_filename�names�shm1�shm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsrZok_if_exists_smsZnonexisting_smsrrr�test_shared_memory_basics�s�


����
�

���	

�z+_TestSharedMemory.test_shared_memory_basicscs�tj�d��Q}tj�|�d�|�d�g}�fdd�|D�}||_tjddd�}|�|j	�|�
|j|d	�||_tjddd�}|�|j	�|�
|j|d�Wd�dS1sZwYdS)
NrZ	test03_fnZ	test04_fncrrrrgrrrrLrzA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>TrYrr)r?rrrrrr rr�rarar!)rGr%r&r'r(rrr�test_shared_memory_recreateBs �"�z-_TestSharedMemory.test_shared_memory_recreatecCs�|�t��tjddd�}Wd�n1swY|�t��tjddd�}Wd�n1s3wY|�t��tjdd�}Wd�dS1sOwYdS)NTr:rrr)r�r>rr)rGZsms_invalidrrr�"test_invalid_shared_memory_crationXs��"�z4_TestSharedMemory.test_invalid_shared_memory_crationc	CsZttjd�D]�}|j|d���tjddd�}|�|j�d|jdd�<tj	||d	�}t�
|�}|�|tj�|�|j
|j
�|�t|jdd��d�|�t|jdd��d�d
|jdd�<|�t|jdd��d
�|�t|jdd��d
�d|jdd�<|�t|jdd��d�|�t|jdd��d�Wd�n1s�wYqdS)NrY��protoTrr�picklerr���protocolsnewvalsoldval)r��pickle�HIGHEST_PROTOCOLrwrrr�rar��dumps�loadsr�rar&r�)rGr-r$�pickled_smsZsms2rrr�"test_shared_memory_pickle_unpicklees(
���z4_TestSharedMemory.test_shared_memory_pickle_unpicklec
Cs�ttjd�D]O}|j|d��?tjddd�}d|jdd�<tj||d	�}|��|�	�|�
t��
t�|�Wd�n1sBwYWd�n1sQwYqdS)
NrYr,Trrr.rr�r/)
r�r1r2rwrrr�r3rrar�r"r4)rGr-r$r5rrr�.test_shared_memory_pickle_unpickle_dead_objects�����z@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_objectcCs�tjddd�}|�|j�|j|j|jdfd�}d|_|��|�	�|�
t|jdd��d�|j|j|dfd�}d|_|��|�	�|�
t|jdd��d�|�
�dS)NTrrshowdyr�rqsHELLO)rrr�rar�rr&r�r�r�rar�r�r)rGr$r�rrr�#test_shared_memory_across_processes�s&��z5_TestSharedMemory.test_shared_memory_across_processesr#z#not feasible in non-posix platformscCs�tj��}|��|�td��}t�|jj	t
j�|�td��}|�t
��t�t��t
j�Wd�n1s9wY|��dSr�)r�managers�SharedMemoryManagerr��
ShareableListr�r;r�r`r�r�rGr�r�r�r_)rG�smm�slZsl2rrr�4test_shared_memory_SharedMemoryServer_ignores_sigint�s
�zF_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()
        rG)r�rrHrIr�rJrrr�>test_shared_memory_SharedMemoryManager_reuses_resource_tracker�s	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackercs�tj���|�t���jdd�Wd�n1swY����fdd�tdd�D�}�fdd�tdd	d
�D�}tj	|dj
jd�}|�t
|�d�tj|djd�}|�t
|j�d�|dj}���tjd
kr�|�t��tj|d�}Wd�n1s�wYtj���}|�	d�}|jd	d�}	|j
j}Wd�n1s�wYtjd
kr�|�t��tj	|d�}
Wd�dS1s�wYdSdS)Nr�r�csg|]	}��t|���qSr)r;r�r
�Zsmm1rrr�r�zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rqr�csg|]}�j|d��qS)r�)r)rrZr@rrr�r�rw��r�r&r+�howdy)rr9r:r�r>rr�r�rr;�shmr&rar�r�r�r_r�rr")rGZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2r=rEZ	absent_slrr@r�-test_shared_memory_SharedMemoryManager_basics�s6
�

�

�
"��z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc	Cs�t�gd��}|�|jj�|�|jjt|��|�tt|��t|��|�	t
��|dWd�n1s8wY|�	t
��d|d<Wd�n1sQwY|�d�}d|d<|�||�d��|�|j
d�|�t|�d�t���0t�d�|�	t��
|�d�Wd�n1s�wY|�|�d	�d
�Wd�n1s�wY|�|dd�|�|dd�|�t|�d�d
|d
<|�|d
d
�d|d<|�|dd�|�|j
d�|�td��d|d<Wd�n1s�wY|�|dd�d|d<|�|dd�|�|dd�|�td��d|d<Wd�n	1�s6wY|�|dd�|�td��d|d<Wd�n	1�sYwY|�|dd�t���(t�d�|�|�d
�d�|�|�d�d�|�|�d�d�Wd�n	1�s�wY|�d�}tj||d�}zD|�|jj|jj�|�||jj�|�t|�t|��|�|j
|j
�d|d<|�|dd�|�|dd�|j��W|j��n|j��wtj|jjd�}|�|jj|jj�d|d<|�|dd�|j��|j��t��}z@|�t|�d�|�|j
d�|�|�d�d�|�	t��
|�d�Wd�n	1�sMwY|j��W|j��dS|j��w) N)rD�HoWdYgX9��vq�r�NTr)r�r�rrDz8s8sdqxxxxxx?xxxxxxxx?q�ignoreZ100r�rrrTr)Zsomer�z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrYrGu	encodéess	123456789sadiosZtest03_duplicaterC�Mr:ipr��any)rr;r�rErar�r&rvr�r��
IndexErrorZ_get_packing_formatrar|r��warnings�catch_warnings�simplefilterr>r�rtr�r=rr�r)rGr=Zcurrent_formatZname_duplicateZsl_copyZsl_tetheredZempty_slrrr�'test_shared_memory_ShareableList_basics�s��
�
�


����
��
��
�

�


�z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc	Cs.ttjd�D]�}|j|d��}t�td��}|�|jj�tj	||d�}t�
|�}|�|tj�|�|dd�|�
||�d|d<|�|dd�d	|d
<|�|d
d	�t�td��}|�|jj�tj	||d�}|�t|�t|��|j��|j��|j��Wd�n1s�wYqdS)NrYr,r�r/r:r��changedr�Znewvaluerri�)r�r1r2rwrr;r�rErar3r4r�raZassertIsNotr�r)rGr-r=�
serialized_slZdeserialized_slZ	larger_slZserialized_larger_slrrr�)test_shared_memory_ShareableList_picklingfs2
�

���z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc
Cs�ttjd�D]J}|j|d��:t�td��}tj||d�}|j��|j�	�|�
t��
t�|�Wd�n1s=wYWd�n1sLwYqdS)NrYr,r�r/)
r�r1r2rwrr;r3rErrar�r"r4)rGr-r=rQrrr�5test_shared_memory_ShareableList_pickling_dead_object�s

�����zG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_objectc	Cs d}tjtjdd|gtjtjd��u}|j������}|�	�|�
�t��t
j}d}t��|krWt�|�t|dd�}z	tj|dd	�}Wn	tyPYnwt��|ks2td
��tjdkr~t�d|��d
�|j����}|�d|�Wd�dSWd�dS1s�wYdS)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)
        �-ErGr6r*r�rqFrzJA SharedMemory segment was leaked after a process was abruptly terminated.r#�/rz[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)�
subprocess�Popenr��
executable�PIPEr7�readline�strip�decoder�r-rJrKrr�r��minrrr"r�r;r&r$�
unregisterr8rdr�)rGrKr�r&�deadlinerNr<rgrrr�4test_shared_memory_cleaned_after_process_termination�s>
�
��
��"�zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rQrRrSrhr�rrr)r*r+r6r7r8r?r�r;r&r>r?rFrOrRrSr`rrrrr
�s(
p


qr
c@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalizerZcCstj��|_tj��dSr)r
�_finalizer_registryr
�registry_backupr'rlrrrr0�r�z_TestFinalize.setUpcCs&t��|�tj�tj�|j�dSr)rrr�r
rb�updatercrlrrrr2�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@r�)z)_TestFinalize._test_finalize.<locals>.FooNr�rrrrrZ�rYrZ)r]r�)r^)rt)�d10rY)rL�exitpriority)�d01r)�d02)�d03�r�i����)�STOPi����)
r�r
�Finalizer�rr�_exit_functionrr;�_exit)r�rWrZr]r^Zclose_brtrergrhrirrr�_test_finalize�s4z_TestFinalize._test_finalizecCs^|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|gd��dS)Nr�TcSsg|]}|�qSrr)rr�rrrrrz/_TestFinalize.test_finalize.<locals>.<listcomp>rk)r]r^rerirhrgr�)	r�r�ror�r�r�rSr�ra)rGrWrQr�r�rrr�
test_finalize�sz_TestFinalize.test_finalizec	sdd��G�fdd�dt��d�d���fdd�}���fdd	�}t��}t��}zKt�d
�t�ddd�tj|d�tj|d�g}t	�
|��t�d
�d�Wd�n1sYwY�durd��Wt�|�tj|�t�
�dSt�|�tj|�t�
�w)NcS�dSrrrrrr�cbr�z,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�t�dd�d�dS)NrYr�)rf)rr
rlr��randintrl�rrrrrHsz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rQrRrSrHrrtrrrZ
rrZFc
sX�s*t�t��d�zt��Wnty%}z|�WYd}~nd}~ww�rdSdSr�)rJr�r�r
�_run_finalizersrrj)r�finishrr�run_finalizerss���z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc
sji}�s3z�fdd�td�D�|t�d�<Wnty.}z|�|��WYd}~nd}~ww�rdSdS)Ncsh|]}���qSrrr
)rZrr�	<setcomp>%rzL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rq)r�r��getrandbitsrr')r]r�)rZrrvrr�make_finalizerss$���z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rqr�rT)r�r��getswitchintervalrr��setswitchintervalrr�r)rZ
start_threadsrJr�r)rGrwrzZold_intervalZ
old_thresholdrWr)rZrrrrvr�test_thread_safetys6


�
��


�

z _TestFinalize.test_thread_safetyN)
rQrRrSrhr0r2rLrorpr}rrrrra�s
'rac@rB)�_TestImportStarcCshddl}tj�tj�}tj�|�|�d�}|�|�}dd�|D�}dd�|D�}|�d�|�	d�|S)Nrz*.pycSs(g|]}tj�tj�|�d�d�qS)rYr)r;�path�splitext�split)rrfrrrrGs(z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)rr6rrrrHrzmultiprocessing.__init__r)
�globr;r�dirnamer�__file__r��escaper<r�)rGr�Zfolder�pattern�files�modulesrrr�get_module_namesBs


z _TestImportStar.get_module_namescCs�|��}tjdkr|�d�|�d�|�d�n|�d�ts%|�d�tdur.|�d�|D]'}t|�tj|}|�t	|d�|�|j
D]}|�t	||�d||f�qGq0dS)	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�rr<r�r6r�r�rr�r�)rGr�r&�mod�attrrrr�test_importMs*








���z_TestImportStar.test_importN)rQrRrSr�r�rrrrr~@sr~c@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLoggingrZcCsDt��}|�tj�|�|du�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr
�
SUBWARNINGr�debug�info�	LOG_LEVEL)rG�loggerrrr�test_enable_loggingos

z _TestLogging.test_enable_loggingcCst��}|�|���dSr)rr�r��getEffectiveLevel)r�rWr�rrr�_test_levelwsz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nrw�%Fr�r�)�level)rr��logging�	getLoggerr�r�r�r�r�r�rar�r�r�NOTSETr�)	rGZLEVEL1ZLEVEL2r�Zroot_loggerZ
root_levelr�r�r�rrr�
test_level|s*


z_TestLogging.test_levelN)rQrRrSrhr�rLr�r�rrrrr�ks
r�c@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintrrZcCst�d�t�|tj�dSr�)rJr�r;r�r��SIGUSR1)r�r�rrr�_killer�s
z_TestPollEintr._killerr��requires SIGUSR1c
s�dg��fdd�}t��}t�tj|�}zA|j|j|fd�}|��z|jtjdd�}|��|�	�W|�	�n|�	�w|�
�d�|�|jd�Wt�tj|�dSt�tj|�w)NFcsd�d<dS)NTrrr��Z
got_signalrr�record�r�z._TestPollEintr.test_poll_eintr.<locals>.recordr�)r�r)
r;r�r�r�r�r�r�rJr�r�rrar�)rGr�r�Z
oldhandlerZkillerr�rr�r�test_poll_eintr�s
"z_TestPollEintr.test_poll_eintrN)rQrRrSrhrLr�r?rMr�r�r�rrrrr��s
r�c@s eZdZe�ed�dd��ZdS)�TestInvalidHandle�skipped on Windowsc	Cs^tj�d�}zz|��WnttfyYnwWd|_nd|_w|�ttftjjd�dS)Ni�M�r:)rr��
Connectionr�r>r~�_handler�r�rrr�test_invalid_handles�s��
�z&TestInvalidHandle.test_invalid_handlesN)rQrRrSr?r��WIN32r�rrrrr��s
r�c@rB)�	OtherTestcC�,Gdd�dt�}|�tjtjj|�d�dS)Nc@rB)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSr�)N�something bogusr�rGr�rrrr��r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrqrr�rGr�rrrr��r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQrRrSr�r�rrrr�_FakeConnection�r+r��abc)r�r�r�AuthenticationErrorr��deliver_challenge�rGr�rrr�#test_deliver_challenge_auth_failure�s
�z-OtherTest.test_deliver_challenge_auth_failurecCr�)Nc@r�)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncS�
d|_dSr�)r=rlrrrrH�rzNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkrtjjS|jdkrdSdS)NrYr�r�r�)r=rr��	CHALLENGEr�rrrr��s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrqrrr�rrrr��r�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQrRrSrHr�r�rrrrr��sr�r�)r�r�rr�r��answer_challenger�rrr�"test_answer_challenge_auth_failure�s
�z,OtherTest.test_answer_challenge_auth_failureN)rQrRrSr�r�rrrrr��s
r�cCs|jd7_dSrX)r�)�nsrrr�initializerr)r�c@rO)
�TestInitializerscCs"t��|_|j��|_d|j_dSr�)r�Manager�mgrr�r�r�rlrrrr0s
zTestInitializers.setUpcCs|j��|j��dSr)r�r_r�rlrrrr2r�zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dSrX)rr9�SyncManagerr��	TypeErrorr�r�r�rar�r_r�)rGr6rrr�test_manager_initializers
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)NrY)r�)
r�r�rr�r�r�rr�rar�r�rrr�test_pool_initializers
z&TestInitializers.test_pool_initializerN)rQrRrSr0r2r�r�rrrrr�
s
r�cCs*z	|jdd�}WdStjyYdSw)NF)�block)r�r�r�)rs�itemrrr�_this_sub_process)s
�r�cCs2t��}tjt|fd�}d|_|��|��dSr�)rrr�r�r�r�r�)rZsubProcrrr�
_test_process/s
r�cCs||Srrr�rrr�_afunc6rgr�cCs0tjdd�}|�tgd��}|��|��dS)Nr�rZ)rYr�rrr�rqr�r�)rr�r�r�rr�)r�rbrrr�pool_in_process9sr�c@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCrDr)�	_delegate�_pid)rGZdelegaterrrrH@rIz_file_like.__init__cCs$t��}||jkr||_g|_|jSr)r;r�r��_cacher"rrr�cacheDs

z_file_like.cachecCs|j�|�dSr)r�r�r�rrrr�Mr*z_file_like.writecCs|j�d�|j��g|_dS)Nr�)r�r�r�r�r�rlrrr�flushPs
z_file_like.flushN)rQrRrSrH�propertyr�r�r�rrrrr�?s
r�c@r�)�TestStdinBadfiledescriptorcC� tjtd�}|��|��dS�Nr�)rr�r�r�r�)rGr,rrr�test_queue_in_processV�z0TestStdinBadfiledescriptor.test_queue_in_processcCr�r�)rr�r�r�r�r�rrr�test_pool_in_process[r�z/TestStdinBadfiledescriptor.test_pool_in_processcs:t��}t|����d�tj�fdd�d�}���dS)Nr�cs���Sr)r�r�Zflikerrr�dr�z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>r�)r/r0r�r�rr�r�)rG�sior,rr�r�
test_flushing`s

z(TestStdinBadfiledescriptor.test_flushingN)rQrRrSr�r�r�rrrrr�Tsr�c@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsBtd�D]}|rt�t��d�|�|t��f�q|��dS)Nr�r*)r�rJr�r�r�r;r�r)r�ri�slowr�rrr�_child_test_waitks
zTestWait._child_test_waitFc	sddlm}g}g�g}td�D]/}tjdd�\}}tj|j||fd�}d|_|��|�	�|�
|���
|�|�|j�q|ri||�D] }z|�
�}	Wnty`|�|�|�	�YqFw|�
|	�qF|sB|��t�fdd	�td
�D��}
|�||
�dS)Nrr,r�Fr�r�Tc3s$�|]
}�D]}||jfVqqdSrr<)rr�r��rrrr��s�"z%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionr-r�rr�r�r�r�r�rr�r�r�r�r�r<r�r�ra)rGr�r-�readers�messagesr�rrir�r�r�rr�r�	test_waitss4


��
zTestWait.test_waitcCsVt��}|�|�td�D]}|rt�t��d�|�d|�d��q
|��dS)Nr�r*�%s
r�)	r�rsr�rJr�r�r�rr)r�rr�rr�rrr�_child_test_wait_socket�s
z TestWait._child_test_wait_socketcCs2ddlm}t�tjdf�}|��}g}g}i}td�D]}tj	|j
||fd�}	d|	_|	��|�
|	�|�|	j�qtd�D]}|��\}
}|�
|
�g||
<q?|��|rx||�D]}
|
�d�}|sn|�|
�|
��q[||
�
|�q[|sWd�dd	�td
�D���d�}
|��D]}|�d�|�|
�q�dS)
Nrr,r�r�Trwr�css�|]}d|VqdS)r�Nrr
rrrr��rAz,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r�)r�r-r�r�rryr�r�rr�r�r�r�r�r�r�r�rr�r<rrjra)rGr�r-r�r�r�rZdicr�r�rrr�r��vrrr�test_wait_socket�s>�





�	�zTestWait.test_wait_socketcC�|�d�dSr�)r�rlrrr�test_wait_slow�r(zTestWait.test_wait_slowcCr�r�)r�rlrrr�test_wait_socket_slow�r(zTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nrr,rqr�r!r&皙�����?)
r�r-rr�rJrKrarrr�)rGr-r�r]r^r�rcr�rrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|��t�|�dSr)r�rJr�)r�r�Zperiodrrr�signal_and_sleep�r<zTestWait.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,rrcSst|dd�d�S)NcSst|�Sr)r�r�rrrr��r�z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r&)r�)r�rrrr��rz,TestWait.test_wait_integer.<locals>.<lambda>r�r&r�r�r�)r�r-rr�r�r�r�r�r�r�r�rr�rJrKrarrr�r�r�)rGr-r�Zsorted_r�r]r^r�r�rcr�rrr�test_wait_integer�s>
�

zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nrr,r:r�rY)	r�r-rr�rJrKrarr)rGr-r]r^rNrcrrr�test_neg_timeoutszTestWait.test_neg_timeoutNrs)rQrRrSrLr�r�r�r�r�r�r�r�r�r�rrrrr�is



	#
+r�c@s4eZdZe�ed�dd��Ze�ed�dd��ZdS)�TestInvalidFamilyr�cC�<|�t��tj�d�Wd�dS1swYdS)Nz\\.\test�r�r>rr�r�rlrrr�test_invalid_family�"�z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCr�)Nz/var/test.piper�rlrrr�test_invalid_family_win32!r�z+TestInvalidFamily.test_invalid_family_win32N)	rQrRrSr?r�r�r�rMr�rrrrr�s



r�c@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dSr)r�rtr��flags�r�rWrrr�run_in_grandchild+r�zTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrFr�r�)�jsonrr�r�r�r�r�r�rrtr�r��printr3)r�r�rrir��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()rTz-Sz-OrGr�)r�rV�check_outputr�rXr4r\ra)rGr��progr�Zchild_flagsr�rrr�
test_flags<s�zTestFlags.test_flagsN)rQrRrSrLr�r�r�rrrrr�*s

r�c@r)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)NrYr�r�)rJr�r�rrr�r�)r��childrrWrrr�
_test_timeoutKs


zTestTimeouts._test_timeoutc	Cs�t��}zSt�d�tjdd�\}}tjjdd�}tj|j||j	fd�}|�
�|��|�|�
�d�|��|��}|�|�
�d�|��|��t|�Wt�|�dSt�|�w)	Nr*Tr��AF_INETr�r�r�r�)r��getdefaulttimeout�setdefaulttimeoutrr�r�r�r�rrr�rrar�r�r")rGZold_timeout�parentrr�r�rWrrrr�Ts$
�
zTestTimeouts.test_timeoutN)rQrRrSrLrr�rrrrr�Js
r�c@rm)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkr,tjj	�
||�\}}}|�|d�|�d|�dStjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyrr�sRuntimeErrors123)rrr;rr�r�r�r�rrHZassert_python_failurerar�rIru)rGrr&r�rLrgrrr�test_noforkbombmszTestNoForkBomb.test_noforkbombN)rQrRrSrrrrrrlrvrc@r)�TestForkAwareThreadLockcCsV|dkrtj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)NrYr�)
rr�rr�rr"r�r�r
�_afterfork_registry)r�r�rWr�rrrr�s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrqr�)
rr�r
�ForkAwareThreadLockr�r	r�rr�rr�r"ZassertLessEqual)rGrrir�Zold_sizer�Znew_sizerrrr��s
z!TestForkAwareThreadLock.test_lockN)rQrRrSrLrr�rrrrr}s

rc@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCs\trt����St����}g}|dkr"|�|�t�|�}|dks|D]}t�|�q$|S)Nr>)r�r��detachr�r;�dupr)rGro�to_closerbrrr�get_high_socket_fd�s

�zTestCloseFds.get_high_socket_fdcCs.trtjtjtj|d���dSt�|�dS)N)r�)r�r�r�SOCK_STREAMrr;)rGrorrrr�szTestCloseFds.closec
Cs^zt�|tjtj�}Wnty#}z|�|�WYd}~dSd}~ww|��|�d�dSr)r��fromfdrrrr�r)r�rWrorr�rrr�_test_closefds�s��zTestCloseFds._test_closefdsc	Cs�tst�d��t��\}}|��}z)tj|j||fd�}|��|�	�|�
�}t|�W|�	|�|�	�|�	�n|�	|�|�	�|�	�wt��dkrW|�
|d�dSd}|�|t�|�|jtjkpk|j|k|�dS)Nzrequires fd picklingr�ri6')r�r?r@rr�rr�rr�rr�r"rrr�r~rrr��winerror)rGr�r�ror�r�ZWSAENOTSOCKrrr�test_closefd�s2
�



�

�zTestCloseFds.test_closefdN)rQrRrSrrrLrrrrrrr�s
	rc@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)NcSrqrr�rE�framerrrr��r�z-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�r�r�r�r��
CONN_MAX_SIZE)r�rWr�rbrrr�_test_ignore�s

zTestIgnoreEINTR._test_ignorer�r�cCs�t��\}}zctj|j|fd�}d|_|��|��|�|��d�t	�
d�t�|j
tj�t	�
d�|�d�|�|��d�t	�
d�t�|j
tj�|�|��d|j�t	�
d�|��W|��dS|��w)Nr�Trr*i�r)rr�r�rr�r�rrar�rJr�r;r�r�r�r�r�r�rr�r�rrr�test_ignore�s(�





zTestIgnoreEINTR.test_ignorecCsddd�}t�tj|�tj���}|�|j�|��}|�d�Wd�dS1s+wYdS)NcSrqrrrrrrr�r�z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�r�rr�r�r�rr�)r�rWr�r�r]rrr�_test_ignore_listeners"�z%TestIgnoreEINTR._test_ignore_listenercCs�t��\}}zCtj|j|fd�}d|_|��|��|��}t�	d�t
�|jt
j�t�	d�tj�|�}|�|��d�|��W|��dS|��w)Nr�Tr*r)rr�r�rr�r�rr�rJr�r;r�r�r�r�r�r�rar�)rGrWrQr�rr�rrr�test_ignore_listeners �


z$TestIgnoreEINTR.test_ignore_listenerN)rQrRrS�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZErrLrr?rMr�r�rrrrrrrr�s
	

	rc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dSr)r�rrr�rrr�_check_context"�zTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NFr�r�)	r�r�r"r�rr�r�rar)rGr�rrir�Zchild_methodrrr�
check_context&szTestStartMethod.check_contextc	CszdD]8}zt�|�}Wn	tyYqw|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qdS)N�rrr@r)	rr�r>rarrr��set_start_methodr$)rG�methodr�rrrr	0s��zTestStartMethod.test_contextc
Cs�t�t�d}t��}zWdD]K}z	tj|dd�Wn	ty"Yqw|�t��|�t��}|�|��|�|�t	|�j
���|��|�|j
j
���|��|�t�|d7}qWtj|dd�ntj|dd�w|�|d�dS)Nrr%T��forcerY)r�set_forkserver_preload�PRELOADrr&r>rar�rr�rQ�lower�
startswithr�r$r�)rGr=Z
old_methodr'r�rrr�test_set_get<s,
��

� zTestStartMethod.test_set_getcCs^t��}tjdkr|�|dg�dS|�|ddgkp+|ddgkp+|gd�kp+|gd�k�dS)Nr+rrr%)rrr@)r�get_all_start_methodsr�rrar)rG�methodsrrr�test_get_allRs

�
�
�zTestStartMethod.test_get_allcCs�t��dkr|�d�tj�tj�t�d�}tj	j
�|�\}}}|��}|��}|�
�dks2|dkrAt|�t|�|�d�dSdS)Nr@z*test only relevant for 'forkserver' methodz
mp_preload.py�okr�z(failed spawning forkserver or grandchild)rrr{r;rr�r�r�r�rrHrIr\rur�r�)rGr&r�rLrgrrr�test_preload_resources\s
�z&TestStartMethod.test_preload_resourcesN)
rQrRrSrLr"r$r	r.r1r3rrrrr!!s


r!r�c@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zedd��Z	d
d�Z
dd�ZdS)�TestResourceTrackerc
Cs�d}tjD]�}|j|d���|dkr	Wd�qt��\}}tjtjdd|j	||d�g|gtj
d�}t�|�t|dd	d
��}|�
����d�}|�
����d�}Wd�n1s]wYt||�|��|��t��tj}	t��|	kr�t�d�zt||�Wnty�}
z|�|
jtjtjf�WYd}
~
nd}
~
wwt��|	ks|td
|�d���|j���d�}|j��d�	|�}|� ||�|� |d|�Wd�n1s�wYqdS)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'ZnooprTrG)rir')�pass_fdsr8r�T)rkr�r!zA z= resource was leaked after a process was abruptly terminated.r\z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r$r%rwr;�piperVrWr�rXr|rYrrcrZrur\r(r�r-rJrKrr�r�r~r�r�ENOENT�EINVALr�r8rdZassertRegex)
rGrKr'rrir�rfZname1Zname2r_r�rgr�rrr�test_resource_trackerms^
���
�

���

�
�����z)TestResourceTracker.test_resource_trackerc
Csrddlm}|j}|durt�|tj�tj|tjd�t	�
��t	�d�|��Wd�n1s5wY|j}t�||�t
�d�t�d�}t	j
dd��\}t	�d	�|��}|��|��t�|�}~t��|�|��|r�|�t|�d
�|d}	|�t|	jt��|�dt|	j �v�n|�t|�d�Wd�dSWd�dS1s�wYdS)Nr��_resource_tracker)r�rHrQrT)r��alwaysrYzresource_tracker: process died)!� multiprocessing.resource_trackerr;r�r;r�r�r�rZwait_processrLrMrNrDrJr�rr�r�r�r�rrrrr�rar�r�
issubclass�category�UserWarningrv�message)
rGrEZ
should_dier;r�r�Zall_warnr�rZthe_warnrrr�check_resource_tracker_death�sB


�



��"�z0TestResourceTracker.check_resource_tracker_deathcC�|�tjd�dSr�)rBr�rGrlrrr�test_resource_tracker_sigint�r#z0TestResourceTracker.test_resource_tracker_sigintcCrCr�)rBr�r�rlrrr�test_resource_tracker_sigterm�r#z1TestResourceTracker.test_resource_tracker_sigtermcCrCr�)rBr�r�rlrrr�test_resource_tracker_sigkill�r#z1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}|��|jd|fv}||��M}|�|�dS)Nrr:)r=r;rDr�Z_check_aliver�)rWr�r;Zreusedrrr�_is_resource_tracker_reused�s
z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}|��|j}tjdd�\}}tj|j||fd�}|��|�	�}|�
�|��|��|�|�dS)Nrr:Fr�r�)
r=r;rDr�rr�r�rGr�r�r�rr)rGr;r�rrir�Zis_resource_tracker_reusedrrr�test_resource_tracker_reused�s�z0TestResourceTracker.test_resource_tracker_reusedcCsPd}ddt|�}|�t��t�||�Wd�dS1s!wYdS)Nrr]r)r�r�r>r$�register)rGr'Ztoo_long_name_resourcerrr�test_too_long_name_resources
"�z/TestResourceTracker.test_too_long_name_resourceN)rQrRrSr9rBrDrErFr�rGrHrJrrrrr4isJ%
	r4c@s8eZdZedd��Zdd�Zdd�Zejj	dd��Z
d	S)
�TestSimpleQueuecCs>|��z|�|���|�|���W|��dS|��wr)r-rrrzr�r�rrr�_test_emptys
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)Nr�TF)r�SimpleQueuer�r�rLr�r�rrzr�r-r�rar�r�)rGrr�r�r,rrr�
test_emptys"�zTestSimpleQueue.test_emptycCst��}|��|��dSr)rrMr�rGrrrrr1szTestSimpleQueue.test_closecCs0t��}|��|�|jj�|�|jj�dSr)rrMrr�_readerr��_writerrOrrr�test_closed8szTestSimpleQueue.test_closedN)rQrRrSrLrLrNrr�rZcpython_onlyrRrrrrrK
s
	rKc@rm)�TestPoolNotLeakOnFailurecs�d�g�G��fdd�d�}|�td��tjjdtjj|d�d�}|��|�	�Wd�n1s4wY|�
tdd	��D���dS)
Nrrcs<eZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�ZdS)zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcesscs d|_d|_d|_��|�dS)NzFake Process)r&r�r�r�)rGr�)�forked_processesrrrHIsz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__cs"�dkrtd���d8�d|_dS)Nr�Manually induced OSErrorrYr)r~r�rl)�will_fail_inrrr�Os
zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startcSr�)N�stoppingr�rlrrrr�Vrz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatecSs|jdkr
d|_dSdS)NrW�stoppedr�rlrrrr�Ys

�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joincSs|jdkp	|jdkS)NrrWr�rlrrrr�]sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rQrRrSrHr�r�r�r�r�rTrVrr�FailingForkProcessHsrZrUrq)r�)�contextcsr?rr@)rr!rrrr�frAzITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r�r~rr�r�r?rZ	MagicMockrr�r�rJ)rGrZr�rrYr�test_release_unused_processesBs
�
��z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rQrRrSr\rrrrrS@srSc@sbeZdZ	ejjZdd�Zdd�Ze	dd��Z
e
Zdd�Zd	d
�Z
e	dd��Zd
d�Ze	dd��ZdGdd�Ze	dd��ZdGdd�Ze	dd��ZdHdd�Zdd�Ze	dd ��Zd!d"�Ze	d#d$��Zd%d&�Ze	d'd(��Zd)d*�Ze	d+d,��ZdId.d/�Zd0d1�Ze	d2d3��Z d4d5�Z!e	d6d7��Z"d8d9�Z#e	d:d;��Z$d<d=�Z%e	d>d?��Z&d@dA�Z'e	dBdC��Z(dDdE�Z)dFS)J�TestSyncManagerTypescCs|��|_|j��d|_dSr)�
manager_classrVr�r,rlrrrr0�s


zTestSyncManagerTypes.setUpcCsB|jdur|j��r|j��|j��|j��d|_d|_dSr)r,r�r�r�rVr_rlrrrr2�s



zTestSyncManagerTypes.tearDowncCst��dSr)r�
reap_childrenr�rrrr���zTestSyncManagerTypes.setUpClasscCs�t|j�t��}d}tt���dkrDt�|�|d9}t��|}|dkr:dtj	_
t	�dt���d|�d��dStt���dksdSdS)	Nr	rYr�rT�"multiprocessing.Manager still has � active children after � seconds)r"r,rJrKr�rr�r�r�r�environment_altered�
print_warning)rG�
start_timerNr�rrr�wait_proc_exit�s 

�
��z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)Nr�Tr)rr�r,r�r�rgrar�)rGZworkerr�rrr�
run_worker�s

zTestSyncManagerTypes.run_workercCs|��|��|�d�dS�Nr
)r-r'�r�r�rrrr�sz TestSyncManagerTypes._test_eventcCs.|j��}|��|�|j|�|�d�dSri)rVr�r�rhrr-�rGrrrrr�s
zTestSyncManagerTypes.test_eventcC�|��dSr�r�rjrrr�
_test_lock�r`zTestSyncManagerTypes._test_lockr�cCs6t|j|��}|�|j|�|��|�t|j�dSr)r9rVrhrnr�r�r��rGZlnamerrrrr��szTestSyncManagerTypes.test_lockcC�|��|��dSr�r�r�rjrrr�_test_rlock��z TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dSr)r9rVrhrrrorrrr���zTestSyncManagerTypes.test_rlockcCrlrrmrjrrrr��r`z$TestSyncManagerTypes._test_semaphorer�cCs(t|j|��}|�|j|�|��dSr)r9rVrhr�r�)rG�snamerrrrr��sz#TestSyncManagerTypes.test_semaphorecCrt)Nr�)ru)r�rlrrrr��r*z+TestSyncManagerTypes.test_bounded_semaphorecCrprrqrjrrr�_test_condition�rsz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dSr)rVr�rhrvrkrrr�test_condition�s
z#TestSyncManagerTypes.test_conditioncCrlr)rJrjrrr�
_test_barrier�sz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dSrp)rVr-rhrxrkrrrr9�sz!TestSyncManagerTypes.test_barriercCs*|�	Wd�dS1swYdSrrrjrrr�
_test_pool�s"�zTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nr�rZ)rVr�rhryrkrrr�	test_pool�rtzTestSyncManagerTypes.test_poolcCrqrrrjrrr�_test_queue�r*z TestSyncManagerTypes._test_queuercCs6t|j|�d�}|�d�|�d�|�|j|�dS)Nr�rqr�)r9rVrrrhr{)rGZqnamerrrr�
test_queues

zTestSyncManagerTypes.test_queuecCr�)Nr�)r|rlrrr�test_joinable_queue	r(z(TestSyncManagerTypes.test_joinable_queuecCs|��|��|D]}q
dSr)r��reverse)r�r�rbrrr�
_test_lists
�zTestSyncManagerTypes._test_listcCs6|j��}|�d�|�|j|�|�t|�d�dS)Nrqr)rVr�r�rhrrar�rkrrrr�s

zTestSyncManagerTypes.test_listcCrqrrrjrrr�
_test_dictr*zTestSyncManagerTypes._test_dictcCs4|j��}d|d<|�|j|�|�t|�d�dS)Nrqr�r)rVr�rhr�rar�rkrrrr�*s
zTestSyncManagerTypes.test_dictcCror�)r�rjrrr�_test_value1sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�rYr�)rVrrhr�rarbr�rkrrrrs7szTestSyncManagerTypes.test_valuecCrqrrrjrrr�_test_array=r*z TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rrY)rVr�rhr�rkrrrr�DszTestSyncManagerTypes.test_arraycCrqrrrjrrr�_test_namespaceHr*z$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dSr)rVr�rbrcrhr�rkrrrr�Ms
z#TestSyncManagerTypes.test_namespaceNr�)r�)r)*rQrRrSrr9r�r^r0r2rLr�r�rgrhrrrnr�rrr�r�r�r�rvrwrxr9ryrzr{r|r}rr�r�r�r�rsr�r�r�r�rrrrr]isf












	





r]c@rm)�TestNamedResourcecCsvtj}|�tj|�t|ddd��}|�t�d��Wd�n1s$wYtj	j
�|�\}}}|�|d�dS)Nrir\r]a[                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�)
rr`r�rarcr��textwrap�dedentr�rrHrIra)rGrerfr�rLrgrrr� test_global_named_resource_spawnUs�z2TestNamedResource.test_global_named_resource_spawnN)rQrRrSr�rrrrr�Trvr�c@rm)�MiscTestCasecCstj|ttjddgd�dS)N�SUBDEBUGr�)�extraZnot_exported)rZcheck__all__rr�rlrrr�test__all__rs
�zMiscTestCase.test__all__N)rQrRrSr�rrrrr�qrvr�c@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�}|r<dtj_t�	d|���d}dS)NrT�Dangling processes: rY�Dangling threads: )r�rr#r�rr!r�r�rdrer�)r�rUrWrrrr��s
zBaseMixin.tearDownClassN)rQrRrSrLr�r�rrrrr�|s

r�c@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�rUN)rQrRrSrzrr�r�r�r}r�r�r�r�rr�r�r�r�r�r�r�r-rr�rnr�rrrrr��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)�ManagerMixinrVz
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)rVr�)r�rLrMrrrr��r#zManagerMixin.Poolcst���t��|_dSr)r�r�rr�rVr�r�rrr��r�zManagerMixin.setUpClasscs�t��}d}tt���dkr<t�|�|d9}t��|}|dkr4dtj_t�	dt���d|�d��ntt���dkst
��|j�
�d	krXdtj_t�	d
�t�	|j���|j��|j��d|_t���dS)Nr	rYr�rTrarbrcrz5Shared objects which still exist at manager shutdown:)rJrKr�rr�r�r�rrdrerrrVZ_number_of_objectsZ_debug_infor_r�r�r�)r�rfrNr�r�rrr��s0
�
��


zManagerMixin.tearDownClass)rQrRrSrzrr�r��operator�
attrgetterrr�r�r�r�r�r�r�r-rr�r�r�r�rLr�r�r�r%rrr�rr��s.
r�c@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinrWN)rQrRrSrzrZdummyr�r�r�r}r�r�r�rr�r�r�r�r�r�r�r-rr�rrrrr��s&r�c
s<|d}t�}hd�}|��D]n\}}t|t�sqt|t�ra|tur#q|jD]9}d|��|dd�}||��d}	Gdd�d||	tj	�}
|dkrRt
�d	�|
�}
||
_|
_
||
_|
||<q&qt|tj	�r}Gd
d�d|t�}
||
_|
_
||
_|
||<qddg�dg����fdd�}��fd
d�}||d<||d<dS)NrQ>rUrWrVZWithrY�Mixinc@r��z*install_tests_in_module_dict.<locals>.TempNr�rrrr�TemprYr�rVr{c@r�r�r�rrrrr�rYcs�t�t�tj��tjj���d<tj���d<tjdd��d<z	tj	�dd�Wnt
y8t��d��wt
j�d�rRzt��}WntyQt�d��wt�t��t���t�dS)	NrrYT)�
allow_noner(z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr*r+r!�_cleanupr�r
r�rr&r>r?r@r�rr-r�r~rAr
�get_temp_dirr�r�r�rw�r��old_start_method�start_methodrr�setUpModule"s*

��
�z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj��tj�ddd�ttjj�t�d�}|r,d}dtj_t�	d|���d}tt
j�t�d�}|rId}dtj_t�	d|���d}|rRt�d�tj
��dS)	NFrTr(r�rYr�r!)r�rr#rr&r�r!r�rdrer�rJr�r
�_cleanup_tests)Z
need_sleeprUrW)r�r�rr�tearDownModule8s$

z4install_tests_in_module_dict.<locals>.tearDownModuler�r�)�globalsr.rr�r>rTrh�
capitalizer?�TestCaser�requires_hashdigestrQrSrRr�)
Zremote_globsr�rRZlocal_globsZ	ALL_TYPESr&�baseZtype_Znewnamer�r�r�r�rr�r�install_tests_in_module_dicts>



�
�r��SemLockzSemLock not availabler�z
Linux onlyc@rm)�SemLockTestscCs>Gdd�dtj�}dt����}|ddd|d�}t�|�dS)Nc@r�)z3SemLockTests.test_semlock_subclass.<locals>.SemLockNr�rrrrr�^rYr�ztest_semlock_subclass-rYrr�F)r	r�r;r��
sem_unlink)rGr�r&rrrr�test_semlock_subclass]sz"SemLockTests.test_semlock_subclassN)rQrRrSr�rrrrr�Ysr�rK)�r?Z
unittest.mockrr�r�rJr/r�r�r;rrr�r�r�r�r�rVr	r�r1rrLZtest.supportr�Ztest.support.script_helperrrrrrrr�
import_moduler	Z*skip_if_broken_multiprocessing_synchronizer�r�rZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr4�multiprocessing.queuesr
r�HAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrr
rrZ	HAS_SHMEMr�Zcheck_sanitizerr@rr r"r&r$r(r�r�r�rZr�r�r�r9Z
HAVE_GETVALUErr�r-r1r<r�r+Zctypesr5r6r7r8r�rArCrTrjrnrwr�rPrYr|r�r�r�r�r�rrrrr)r,r\r�r�r�r�r�r�r�r>r�r�r�r(r+r,r8rNrOrrPrUrVrXrIr]rrirjrkrlrrrnr�r|r�r�r�r�r�rMr�r�rrr
rar�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr!r�r4rKrSr]r�r�r�r�r�r�r�r�r�rrrr�<module>s�

����

�
�-WG6*39FS
 
	j(H:
14"0
Rh
8
{+E"!2 "BCH�#3)k=W