Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/_test_multiprocessing.cpython-311.pyc
�

�Ke5���ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ej"d	��Z#ej$��ddl%Z%ddl&Z'ddl(Z'ddl)Z'ddl*Z'ddl+Z'ddl,Z'dd
l'm-Z-	ddl'm.Z.e.j/Z0n
#e1$rdZ0YnwxYw	dd
l2m3Z3m4Z4dZ5n
#e1$rdZ5YnwxYw	ddl'm6Z6dZ7n
#e1$rdZ7YnwxYw	ddl8Z8n
#e1$rdZ8YnwxYwej9d���rej:d���d�Z;d�Z<d�Z=e	j>dkr	ddl'm?Z?d�Z@e-jAZBdZCdZDeDrd\ZEZFZGnd\ZEZFZGejHZIeJe#dd��ZKejLdkZMddl&mNZNd�ZO	e	jPd��ZQn	#d ZQYnxYwd!d"gZR	dd#lSmTZTmUZUmVZVmWZWn#e1$reXZTdxZUxZVZWYnwxYwd$�ZYGd%�d&eX��ZZGd'�d(eX��Z[d)�Z\Gd*�d+��Z]Gd,�d-e[��Z^Gd.�d/e'j_��Z`Gd0�d1e[��Zad2�Zbd3�ZcGd4�d5e[��ZdGd6�d7e[��ZeGd8�d9e[��ZfGd:�d;e[��ZgGd<�d=e[��ZhGd>�d?eX��Zid@�ZjGdA�dBeX��ZkGdC�dDeX��ZlGdE�dFe[��ZmGdG�dHe[��ZnGdI�dJe[��ZoGdK�dLe[��Zpd�dN�ZqdO�ZrdP�ZsdQ�ZtGdR�dSeX��ZuGdT�dUev��ZwdV�ZxGdW�dXe[��ZydY�ZzdZ�Z{Gd[�d\e[��Z|Gd]�d^e[��Z}dd_l*m~Z~mZm�Z�Gd`�daeX��Z�db�Z�Gdc�dde��Z�Gde�dfe~��Z�e���dge��h��e���die�dj�k��e���dle�e��m��Gdn�doe[��Z�ej���Z�dp�Z�Gdq�dre~��Z�e���dse��h��Gdt�due~��Z�e���ds��dvZ�Gdw�dxe[��Z�ej�dy��Gdz�d{e[����Z�e;d|��Z�Gd}�d~e[��Z�Gd�d�e[��Z�Gd��d�e[��Z�Gd��d�e[��Z�ej�e0d���ej�dy��Gd��d�e[������Z�Gd��d�e[��Z�Gd��d�eT��Z�Gd��d�e[��Z�ej�e7d���ej�dy��Gd��d�e[������Z�Gd��d�e[��Z�Gd��d�ej���Z�Gd��d�e[��Z�Gd��d�e[��Z�Gd��d�ej���Z�ej�dy��Gd��d�ej�����Z�d��Z�ej�dy��Gd��d�ej�����Z�d��Z�d��Z�d��Z�d��Z�Gd��d�eX��Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�Gd��d�ej���Z�ej�ejLdkd���Gd��d�ej�����Z�Gd��d�ej���Z�Gd��d�ej���Z�ej�dy��Gd��d�ej�����Z�GdÄd�ej���Z�Gdńd�ej���Z�GdDŽd�eX��Z�GdɄd�e���Z�Gd˄d�e���Z�Gd̈́d�e���Z�dτZ�ej�e�e#dЦ�dѦ�ej�ejLd�kdӦ�GdԄ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 lockc�,�|�d��S)N�latin)�encode)�ss �D/usr/local/apps/python3/lib/python3.11/test/_test_multiprocessing.pyrrTs���8�8�G����c��t|tjj��r*|���|���dSdS�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread)�queues r�close_queuer XsI���%��/�5�6�6��
���
�
�
�
���������rc�.�tj|��dSr)rr)�processs r�join_processr#^s��� ��)�)�)�)�)r�posix)�resource_trackerc�:�tj||��dSr)r%�_CLEANUP_FUNCS)�name�rtypes  r�_resource_unlinkr*gs���'��.�t�4�4�4�4�4r皙�����?)g=
ףp=�?gffffff�?gffffff�?)r+r+r+�HAVE_BROKEN_SEM_GETVALUE�win32��waitc�8�|�|dkrd}t|g|��S)N�r.)�handle�timeouts  r�wait_for_handler4�s'����w��}�}������'�"�"�"r�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc��d}	tjd��}n#ttf$rYdSwxYw|dks||krdSt	jd|z���)zACheck that the system supports enough semaphores to run the test.r6�SC_SEM_NSEMS_MAXN���zHThe OS doesn't support enough semaphores to run the test (required: %d).)�os�sysconf�AttributeError�
ValueError�unittest�SkipTest)�	nsems_min�nsemss  r�check_enough_semaphoresrG�s����I���
�-�.�.�����J�'�����������
��{�{�e�y�(�(���
�
�>�@I�J�K�K�Ks��.�.c��eZdZd�Zd�ZdS)�
TimingWrapperc�"�||_d|_dSr)�func�elapsed)�selfrKs  r�__init__zTimingWrapper.__init__�s����	�����rc��tj��}	|j|i|��tj��|z
|_S#tj��|z
|_wxYwr)�time�	monotonicrKrL)rM�args�kwds�ts    r�__call__zTimingWrapper.__call__�s^���N����	0��4�9�d�+�d�+�+��>�+�+�a�/�D�L�L��4�>�+�+�a�/�D�L�/�/�/�/s	�=�AN��__name__�
__module__�__qualname__rNrU�rrrIrI�s2���������0�0�0�0�0rrIc�(�eZdZdZd�Zd�Zd�ZeZdS)�BaseTestCase)�	processes�manager�threadsc�F�tr|�||d��dSdS�N�)�
CHECK_TIMINGS�assertAlmostEqual�rM�a�bs   r�assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEqual�s2���	,��"�"�1�a��+�+�+�+�+�	,�	,rc�\�	||�}|�||��S#t$rYdSwxYwr)�assertEqual�NotImplementedError)rM�valuerKrR�ress     r�assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplemented�sN��	0��$��+�C��#�#�E�3�/�/�/��#�	�	�	��D�D�	���s��
+�+c� �td���)Nz#shouldn't try to pickle a test case)rk)rMrRs  r�
__reduce__zBaseTestCase.__reduce__�s��!�"G�H�H�HrN)rWrXrY�
ALLOWED_TYPESrhrnrp�
__reduce_ex__rZrrr\r\�sJ������7�M�,�,�,�0�0�0�I�I�I��M�M�Mrr\c��	|���S#t$r:	|jcYS#t$r"	|jcYcYS#t$rt�wxYwwxYwwxYwr)�	get_valuerA�_Semaphore__value�_valuerk�rMs rrtrt�s���	*��~�~������*�*�*�	*��)�)�)�)���	*�	*�	*�
*��{�"�"�"�"�"��!�
*�
*�
*�)�)�
*����	*����*���s8��
A�*�A�
A�A�A�A�A�A�Ac��eZdZd�ZdS)�
DummyCallablec�^�t|t��sJ�|�d��dS�N�)rry�put)rM�q�cs   rrUzDummyCallable.__call__�s+���!�]�+�+�+�+�+�	���a�����rN)rWrXrYrUrZrrryry�s#����������rryc�2�eZdZdZd�Zd�Zd�Zed���Zd�Z	ed���Z
d�Zed	���Zd
�Z
ed���Zed���Zd
�Zejejd��d���Zed���Zed���Zed���Zd�Zd�Zd�Zd�Zd�Zed���Zd�Zed���Z d�Z!ed.d���Z"d�Z#d �Z$d!�Z%ed"���Z&d#�Z'ed$���Z(d%�Z)eifd&���Z*d'�Z+d(�Z,ed/d*���Z-d+�Z.d,�Z/d-�Z0dS)0�_TestProcess�r]r_c�@�|jdkr-|�d�|j����|���}|j}|�|�����|�|j��|�|t��|�t|��dk��|�|jtj����|�|jd��dS)Nr_�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrj�identr?�getpid�exitcode)rM�currentr�s   r�test_currentz_TestProcess.test_current�s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��&�&�(�(���/������(�(�*�*�+�+�+����G�N�*�+�+�+����g�u�-�-�-�����G���q�(�)�)�)�������	���4�4�4�����)�4�0�0�0�0�0rc���|jdkr|�d|j����tjtj���tjtj��g}|D]n}|�|��|���}|�	��|�
��|�|jd���odS)Nr_ztest not appropriate for r)
r�r��sys�
executabler�pathlib�Path�set_executable�Process�start�joinrjr�)rM�paths�path�ps    r�test_set_executablez _TestProcess.test_set_executables����9�	�!�!��M�M�A�d�i�A�A�B�B�B��N��N�!�!�#�#��L���(�(�
��
�	,�	,�D�����%�%�%������A�
�G�G�I�I�I�
�F�F�H�H�H����Q�Z��+�+�+�+�	,�	,rc	��dddgdf}ttf}tj||��}|D]�\}}|�||���5|�d��}|�|j|||f�����}d|_|�	��|�
��}|�||��|���t|��ddd��n#1swxYwY��dS)Nrb�str�rb)rR�	args_type��targetrRT)�list�tuple�	itertools�product�subTestrr��
_test_argsr�r��getrjr�r )	rM�
args_cases�
args_types�
test_casesrRr�r~r��
child_argss	         r�test_args_argumentz_TestProcess.test_args_arguments;������T�*�
��E�]�
��&�z�:�>�>�
�)�
	�
	�O�D�)����4�9��=�=�	
�	
��J�J�q�M�M���L�L���i�i��D�	�>R�>R�L�S�S��������	�	�	��U�U�W�W�
�� � ��T�2�2�2��������A����	
�	
�	
�	
�	
�	
�	
�	
�	
�	
�	
����	
�	
�	
�	
��
	�
	s�	B%C:�:C>	�C>	c�0�|�|��dSr)r})�clsr~�args   rr�z_TestProcess._test_args(s��	���c�
�
�
�
�
rc���|jdkr-|�d�|j����|�|j���}|�|j|���j��|�|jd���}|�|j��|�|jd���}|�	|j��dS)Nr_r��r�T�r�r�F)
r�r�r�r��_testrjr�r�r��assertFalse)rM�proc0�proc1�proc2s    r�test_daemon_argumentz!_TestProcess.test_daemon_argument,s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J����D�J��/�/�������t�';�';�'=�'=�'D�E�E�E����D�J�t��<�<�������%�%�%����D�J�u��=�=�������&�&�&�&�&rc�R�|���}|�|��|�|��|�|j��|jdkrC|�t	|j����|�|j��dSdS)Nr_)r�r}r(r�r�r��pid)r�r~rRrSr�s     rr�z_TestProcess._test8s����%�%�'�'��	���d����	���d����	���g�l�����8�y� � �
�E�E�%���(�(�)�)�)�
�E�E�'�+������!� rc��|jdkr-|�d�|j����|�|�����|�d���\}}|�|j|f���}|���|�	��|�
��\}}|�||���j
��|�|tj����|�||���j��dS)Nr_r�F��duplexr�)r�r�r��assertIsNone�parent_process�Piper��_test_send_parent_processr�r��recvrjr�r�r?r�r()rM�rconn�wconnr��
parent_pid�parent_names      r�test_parent_process_attributesz+_TestProcess.test_parent_process_attributesBs���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J����$�-�-�/�/�0�0�0��y�y��y�.�.���u��L�L�� >�e�X�L�N�N��	���	�	�	�	������"'�*�*�,�,��
�K�����T�%9�%9�%;�%;�%?�@�@�@�����R�Y�[�[�1�1�1�����d�&:�&:�&<�&<�&A�B�B�B�B�Brc�t�ddlm}|�|��j|��jg��dS)Nr�r�)�multiprocessing.processr��sendr�r(�r�r�r�s   rr�z&_TestProcess._test_send_parent_processQsG��:�:�:�:�:�:�
�
�
�N�N�$�$�(�.�.�*:�*:�*?�@�A�A�A�A�Arc��|jdkr-|�d�|j����|�d���\}}|�|j|f���}|���|�tj	���std���|���}|�|d��|�
��|���|�tj	���std���|���}|�|d	��dS)
Nr_r�Fr�r��r3z(Could not communicate with child process�alive�	not alive)r�r�r�r�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�rj�	terminater�)rMr�r�r��parent_process_statuss     r�test_parent_processz _TestProcess.test_parent_processVs8���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�
�y�y��y�.�.���u��L�L��7�u�i�
�
I�
I��	���	�	�	��z�z�'�"6�z�7�7�	M� �!K�L�L�L� %�
�
�������.��8�8�8�	���
�
�
�	�������z�z�'�"6�z�7�7�	M� �!K�L�L�L� %�
�
�������.��<�<�<�<�<rc��|�|j|f���}|���tjd��dS)Nr�i,)r��_test_report_parent_statusr�rP�sleep)r�r�r�s   rr�z,_TestProcess._test_create_grandchild_processos:���K�K�s�=�U�I�K�N�N��	���	�	�	��
�3�����rc�.�ddlm}|�|�����rdnd��|���t
j���|�|�����rdnd��dS)Nrr�r�r�r�)r�r�r�r�r�r�
SHORT_TIMEOUTr�s   rr�z'_TestProcess._test_report_parent_statusus���:�:�:�:�:�:�
�
�
�n�n�.�.�7�7�9�9�J�7�7�{�K�K�K�������g�&;��<�<�<�
�
�
�n�n�.�.�7�7�9�9�J�7�7�{�K�K�K�K�Krc��|�d��}|���}|ddf}ddd�}d}|�|j|||���}d|_|���}|jd	kr |�|j|j��|�|�	��d
��|�|jd��|�
||�����|�t|�����tu��|�|jd��|���|�|jd��|�|�	��d��|�||�����|�|���|dd���|�|���|��|�|���|j��|jd	krZ|�|���|j��|�|���|j��|���|�|jd��|�|�	��d
��|�
||�����t-|��dS)Nrb��gR���Q@)�hello�bye�SomeProcess)r�rR�kwargsr(Tr_Fr)r�Eventr�r�r�r�r�rjr�r��assertNotIn�active_childrenr��typer�r�r��assertInr�r(r�r�r )rMr~�erRr�r(r�r�s        r�test_processz_TestProcess.test_process|s����J�J�q�M�M���J�J�L�L���1�a�y���D�)�)�����L�L��:�D��d�
�
�
������&�&�(�(���9�	�!�!����Q�Y���8�8�8���������u�-�-�-������4�(�(�(�����D�0�0�2�2�3�3�3�����T�1�1�3�3�4�4��<�=�=�=������T�*�*�*�	���	�	�	������T�*�*�*���������t�,�,�,��
�
�a��-�-�/�/�0�0�0���������$�q�r�r�(�+�+�+���������&�)�)�)���������!�&�)�)�)��9�	�!�!����Q�U�U�W�W�g�o�6�6�6����Q�U�U�W�W�a�e�,�,�,�	�����������Q�'�'�'���������u�-�-�-�����D�0�0�2�2�3�3�3��A�����rzneeds native_idc���|jdkr-|�d�|j����tj��j}|�d��}|�|j|f���}|�	��|�
��}|���t|��|�
||��dS)Nr_r�rbr�)r�r�r��	threading�main_thread�	native_idrr��"_test_process_mainthread_native_idr�r�r�r �assertNotEqual)rM�current_mainthread_native_idr~r��child_mainthread_native_ids     r�!test_process_mainthread_native_idz._TestProcess.test_process_mainthread_native_id�s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�'0�'<�'>�'>�'H�$��J�J�q�M�M���L�L�� G�q�d�L�S�S��	���	�	�	�%&�U�U�W�W�"�	�������A�������8�:T�U�U�U�U�Urc�`�tj��j}|�|��dSr)r�r�r�r})r�r~�mainthread_native_ids   rr�z/_TestProcess._test_process_mainthread_native_id�s-��(�4�6�6�@��	���"�#�#�#�#�#rc�.�tjd��dS)N�d�rPr��r�s r�_sleep_somez_TestProcess._sleep_some�s���
�3�����rc�.�tj|��dSrr�)r��delays  r�_test_sleepz_TestProcess._test_sleep�s���
�5�����rc���|jdkr-|�d�|j����|�|j����d�_����|�����d��|�	�|�
����|��jd��t�j
��}|�|d��d��|�|jd��|�����d��|�|d��d��|�|jd��|�����d��t!jd��|���t%t&d	��rÈfd
�}t'jt&j|��}	t'jd��|�|��d��t'jd��t'jt&j|��nV#t'jd��t'jt&j|��wxYw|�|��d��|�|jd��|�����d��|��|�
������
���jS)
Nr_r�r�Trr1r>rb�alarmc�(��td�z���)Nzjoin took too long: %s��RuntimeError)rRr�s �r�handlerz+_TestProcess._kill_process.<locals>.handler�s���"�#;�a�#?�@�@�@r�
F)r�r�r�r�rr�r�rjr�r�r�r�rIr�rhrLrPr��hasattr�signal�SIGALRMrr�)rM�methr�r
�old_handlerr�s     @r�
_kill_processz_TestProcess._kill_process�s�����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��L�L�� 0�L�1�1�����	���	�	�	���������t�,�,�,��
�
�a��-�-�/�/�0�0�0������T�*�*�*��Q�V�$�$�������a���$�'�'�'��$�$�T�\�3�7�7�7���������t�,�,�,������b���4�(�(�(��$�$�T�\�3�7�7�7���������t�,�,�,�	
�
�1�
�
�
���Q�����6�7�#�#�
	+�
A�
A�
A�
A�
A� �-����@�@�K�
;���R� � � �� � ������.�.�.���Q�����
�f�n�k�:�:�:�:����Q�����
�f�n�k�:�:�:�:�������T�T�V�V�T�*�*�*��$�$�T�\�3�7�7�7���������u�-�-�-�����D�0�0�2�2�3�3�3�	�������z�s�2I2�25J'c��|�tjj��}tjdkr#|�|tj��dSdS�N�nt)	rrr�r�r?r(rjr
�SIGTERM�rMr�s  r�test_terminatez_TestProcess.test_terminate�sM���%�%�o�&=�&G�H�H��
�7�d�?�?����X����7�7�7�7�7��?rc��|�tjj��}tjdkr#|�|tj��dSdSr)	rrr��killr?r(rjr
�SIGKILLrs  r�	test_killz_TestProcess.test_kill�sM���%�%�o�&=�&B�C�C��
�7�d�?�?����X����7�7�7�7�7��?rc���	tj��}n#t$rd}YnwxYw|�t	|��t
u��|�|dk��dSra)r�	cpu_countrkr�r��int)rM�cpuss  r�test_cpu_countz_TestProcess.test_cpu_count�st��	�"�,�.�.�D�D��"�	�	�	��D�D�D�	��������T�
�
�c�)�*�*�*������	�"�"�"�"�"s��%�%c��|�t|�����t��|�t
jtf���}|�||�����d|_	|�
��|�||�����|���|�||�����dS�Nr�T)
rjr�r�r�r�rPr��DELTAr�r�r�r�r��rMr�s  r�test_active_childrenz!_TestProcess.test_active_childrens�������d�2�2�4�4�5�5�t�<�<�<��L�L��
�%��L�:�:������D�0�0�2�2�3�3�3����	���	�	�	��
�
�a��-�-�/�/�0�0�0�	����������D�0�0�2�2�3�3�3�3�3rc��|�|��t|��dkr\td��D]N}|�|j|||gzf���}|���|����MdSdS)Nr�r�)r�r��ranger��_test_recursionr�r�)r�r��id�ir�s     rr(z_TestProcess._test_recursions���
�
�
�2�����r�7�7�Q�;�;��1�X�X�
�
���K�K��.�e�R���V�_� �������	�	�	��������
�;�
�
rc��|�d���\}}|�|g��tjt��g}|���r;|�|�����|����;gdgddgddgdgddgddgg}|�||��dS)NFr�rrb)	r�r(rPr�r#r��appendr�rj)rMr�r��result�expecteds     r�test_recursionz_TestProcess.test_recursions����y�y��y�.�.���u����U�B�'�'�'��
�5�������j�j�l�l�	(��M�M�%�*�*�,�,�'�'�'��j�j�l�l�	(�
��c��A���A���c��A���A����	
�����*�*�*�*�*rc�0�|�d��dS)N�$@r.�r��events  r�_test_sentinelz_TestProcess._test_sentinel3s��
�
�
�4�����rc���|jdkr-|�d�|j����|���}|�|j|f���}|�t��5|jddd��n#1swxYwY|�	��|�
|j��|j}|�|t��|�t|d�����|���|���|�t|d�����dS)Nr_r�r�r1r�rb)r�r�r�r�r�r4�assertRaisesrB�sentinelr��
addCleanupr�r�rr�r4�setr�)rMr3r�r7s    r�
test_sentinelz_TestProcess.test_sentinel7sg���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��
�
�����L�L�� 3�5�(�L�C�C��
�
�
�z�
*�
*�	�	�
�J�J�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	���	�	�	����������:�����h��,�,�,������3�?�?�?�@�@�@�
�	�	����	�����������!�<�<�<�=�=�=�=�=s�B�B�BrNc�Z�|�|���tj|��dSr)r�r��exit)r��rcr~s   r�_test_closez_TestProcess._test_closeGs%���=�
�E�E�G�G�G��������rc�b�|jdkr-|�d�|j����|���}|�|jd|i���}d|_|���|�|�	��d��|�
t��5|���ddd��n#1swxYwY|�
d��|���|�|�	��d��|�|jd��|���|�
t��5|�	��ddd��n#1swxYwY|�
t��5|���ddd��n#1swxYwY|�
t��5|���ddd��n#1swxYwY|���t#j|��}~t'j��|�|��d��t-|��dS)Nr_r�r~)r�r�TFr)r�r�r�rr�r>r�r�rjr�r6rBrr}r�r�r��weakref�ref�gc�collect�assertIsr )rMr~r��wrs    r�
test_closez_TestProcess.test_closeMs���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��J�J�L�L���L�L�� 0�#�q��L�B�B�����	���	�	�	���������t�,�,�,�
�
�
�z�
*�
*�	�	�
�G�G�I�I�I�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���d����	��������������u�-�-�-������Q�'�'�'�	���	�	�	�
�
�
�z�
*�
*�	�	�
�J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�
�z�
*�
*�	�	�
�F�F�H�H�H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�
�z�
*�
*�	�	�
�K�K�M�M�M�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	���	�	�	�
�[��^�^��
�
�
�����
�
�b�b�d�d�D�!�!�!��A�����sH�C)�)C-�0C-�F/�/F3�6F3�G5�5G9�<G9�H;�;H?�H?c�L���jdkr-��d��j����tj��}|dkrdnd}�fd�t|��D��}|D]}|����|D]}t|���|D]}��|j	d����fd�t|��D��}|D]}|����tjd	��|D]}|����|D]}t|���tjd
kr^tjg}t"jdkr |�tj��|D]}��|j	|���dSdS)Nr_r��spawnr|r�c�H��g|]}���jd�����S))�{�G�z�?r�)r�r��.0r*rMs  �r�
<listcomp>z4_TestProcess.test_many_processes.<locals>.<listcomp>us<���$�$�$�����T�%5�G��D�D�$�$�$rrc�F��g|]}���j�����S)r�)r�rrKs  �rrMz4_TestProcess.test_many_processes.<locals>.<listcomp>~s:���$�$�$�����T�%5��6�6�$�$�$r���MbP?r�darwin)r�r�r�r�get_start_methodr'r�r#rjr�rPr�r�r?r(r
rr��platformr,rr�)rM�sm�N�procsr��	exitcodess`     r�test_many_processesz _TestProcess.test_many_processesms�����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�
�
-�
/�
/���w���A�A�C��$�$�$�$���(�(�$�$�$���	�	�A�
�G�G�I�I�I�I��	�	�A���O�O�O�O��	,�	,�A����Q�Z��+�+�+�+�$�$�$�$���(�(�$�$�$���	�	�A�
�G�G�I�I�I�I��
�5�����	�	�A�
�K�K�M�M�M�M��	�	�A���O�O�O�O�
�7�d�?�?� �.��)�I��|�x�'�'�� � �&�.��1�1�1��
5�
5���
�
�a�j�)�4�4�4�4��?�
5�
5rc���t��}tj|��}|���}|�|||f���}~|���|���tj��|�	|��d��|�
|���d��t|��dS)Nr�r|)
ryr@rArr�r�r�rBrCrDrjr�r )rMrrEr~r�s     r�test_lose_target_refz!_TestProcess.test_lose_target_ref�s����O�O��
�[��^�^���J�J�L�L���L�L���A��L�/�/��
�	���	�	�	�	������
�
�����
�
�b�b�d�d�D�!�!�!���������!�$�$�$��A�����rc�z�|�tj����|���dSr)r}r�fd_countr/)rM�evtr~s   r�_test_child_fd_inflationz%_TestProcess._test_child_fd_inflation�s.��	���i� �"�"�#�#�#����
�
�
�
�
rc�R�����jdkr-��d��j����tj��}|dkr(��d�|����d}�������������fd�t|��D��}|D]}|����	�fd�t|��D��}��	tt|����d|������|D]}|����t���dS#����|D]}|����t���wxYw)Nr_r��forkr|c�L��g|] }���j��f�����!S�r�)r�r])rLr*r\r~rMs  ���rrMz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>�s@���$�$�$�����T�%B�#�q���R�R�$�$�$rc�8��g|]}������SrZ�r�)rLr*r~s  �rrMz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>�s!���3�3�3�Q������3�3�3rrb)r�r�r�rrQr�rr'r�rjr�r9r�r )rMrSrTrUr��	fd_countsr\r~s`     @@r�test_child_fd_inflationz$_TestProcess.test_child_fd_inflation�s�������9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�
�
-�
/�
/��
��<�<�
�M�M�7�>�>�r�B�B�C�C�C�
���j�j�l�l���J�J�L�L��$�$�$�$�$�$���(�(�$�$�$���	�	�A�
�G�G�I�I�I�I�	�3�3�3�3�%��(�(�3�3�3�I����S��Y���0�0�!�Y�?�?�?�
�G�G�I�I�I��
�
�����������N�N�N�N�N��
�G�G�I�I�I��
�
�����������N�N�N�N���s
�AE(�(>F&c����fd�}�fd�}tj|������tj|d������dS)Nc�X��tjd������dS)N��?�rPr�r9�r\s�r�func1z2_TestProcess._test_wait_for_threads.<locals>.func1�s!����J�s�O�O�O��G�G�I�I�I�I�Irc�X��tjd������dS)N�)rPr��clearrjs�r�func2z2_TestProcess._test_wait_for_threads.<locals>.func2�s!����J�r�N�N�N��I�I�K�K�K�K�Krr�Tr�)r��Threadr�)rMr\rkros `  r�_test_wait_for_threadsz#_TestProcess._test_wait_for_threads�s���	�	�	�	�	�	�	�	�	�	�	���&�&�&�,�,�.�.�.����d�3�3�3�9�9�;�;�;�;�;rc�v�|jdkr-|�d�|j����|���}|�|j|f���}|���|���|�|�	����dS)Nr_r�r�)
r�r�r�r�r�rqr�r�r��is_set)rMr\�procs   r�test_wait_for_threadsz"_TestProcess.test_wait_for_threads�s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��j�j�l�l���|�|�4�#>�c�V�|�L�L���
�
�����	�	��������
�
���%�%�%�%�%rc��|���D]S\}}|dkr(tj��}|���n
|dksJ�d}t	t
|d���T|���dS)Nr�remove)�items�io�StringIOr�setattrr�r9)rMr\�break_std_streams�stream_name�action�streams      r�_test_error_on_stdio_flushz'_TestProcess._test_error_on_stdio_flush�s���#4�#:�#:�#<�#<�	,�	,��K���� � ���������������)�)�)�)����C��d�+�+�+�+����	�	�	�	�	rc	�l�tj��dg}|d���dD�]}|D]�}tt|��}tt||��	|���}|�|j|f���}|�	��|�
��|�|�����|�
|jd��tt||����#tt||��wxYw��dS)Nr��stdout�stderrr�)ryrzr�getattrr�r{r�r�r�r�r�r�rsrjr�)rM�streamsr}r�
old_streamr\rts       r�test_error_on_stdio_flush_1z(_TestProcess.test_error_on_stdio_flush_1�s#���;�=�=�$�'����
������/�
	:�
	:�K�!�
:�
:��$�S�+�6�6�
���[�&�1�1�1�	:��*�*�,�,�C��<�<�t�/N�.1�V�(�5�5�D��J�J�L�L�L��I�I�K�K�K��O�O�C�J�J�L�L�1�1�1��$�$�T�]�A�6�6�6��C��j�9�9�9�9��G�C��j�9�9�9�9����
:�
	:�
	:s
�%BD�D/c	���dD]�}dD]�}tt|��}	|���}|�|j|||if���}|���|���|�|�����|�	|j
d��tt||����#tt||��wxYw��dS)Nr�)rrwr�r)r�r�r�r�r�r�r�r�rsrjr�r{)rMr}r~r�r\rts      r�test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_2�s���0�	:�	:�K�-�
:�
:��$�S�+�6�6�
�	:��*�*�,�,�C��<�<�t�/N�.1�K��3H�-I�(�K�K�D��J�J�L�L�L��I�I�K�K�K��O�O�C�J�J�L�L�1�1�1��$�$�T�]�A�6�6�6��C��j�9�9�9�9��G�C��j�9�9�9�9����
:�	:�	:s�BC�C,r1c�V�tj|��|���dSrri)rMr\rs   r�_sleep_and_set_eventz!_TestProcess._sleep_and_set_event
s#���
�5�������	�	�	�	�	rc��|jdkr-|�d�|j����tj��}|dkr(|�d�|����ddlm}|���d}|���}|�	|j
||f���}|���|j}tj||��tj|dz��|���}|�	|j
|f���}	|	���|	���|�|�����|�|	jd��|���|�|�����|�|jd	��dS)
Nr_r��
forkserverr)�_forkserverrhr��@)r�)r�r�r�rrQ�multiprocessing.forkserverr��ensure_runningr�r�r�r��_forkserver_pidr?rrPr�r�r�rsrjr�r�)
rM�signumrSr�rr\rtr��evt2r�s
          r�check_forkserver_deathz#_TestProcess.check_forkserver_deaths����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�
�
-�
/�
/��
����
�M�M�7�>�>�r�B�B�C�C�C�:�:�:�:�:�:��"�"�$�$�$����j�j�l�l���|�|�4�#<�C��<�|�P�P���
�
�����)��
���V�����
�5�3�;�����z�z�|�|�����D�$=�T�G��L�L��
���
�
�
�
�
�
����������
�
�&�&�&�������+�+�+��	�	��������
�
���%�%�%��
�
�d�m�X�.�.�.�.�.rc�D�|�tj��dSr)r�r
�SIGINTrws r�test_forkserver_sigintz#_TestProcess.test_forkserver_sigint5s���#�#�F�M�2�2�2�2�2rc�h�tjdkr!|�tj��dSdSr)r?r(r�r
rrws r�test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkill9s0��
�7�d�?�?��'�'���7�7�7�7�7��?r)rN�r1)1rWrXrYrqr�r�r��classmethodr�r�r�r�r�r�r�r�r�rC�
skipUnlessr��_HAVE_THREAD_NATIVE_IDr�r�rrrrrr r%r(r/r4r:r>rFrWrYr]rerqrur�r�r�r�r�r�r�rZrrr�r��si������,�M�1�1�1�
,�
,�
,����(����[��
'�
'�
'�����[��
C�
C�
C��B�B��[�B�=�=�=�2����[��
�L�L��[�L�&�&�&�P�X���9�;L�M�M�V�V�N�M�V� �$�$��[�$�����[������[��1�1�1�f8�8�8�
8�8�8�
#�#�#�4�4�4�����[��+�+�+�(����[��>�>�>� �����[��
���@!5�!5�!5�F�������[�����>�
<�
<��[�
<�
&�
&�
&��@B�	�	�	��[�	�:�:�:�&:�:�:�"�����[��$/�$/�$/�L3�3�3�8�8�8�8�8rr�c�&�eZdZd�Zd�Zd�Zd�ZdS)�_UpperCaserc��tj�|��tj��\|_|_dSr)rr�rNr��
child_conn�parent_connrws rrNz_UpperCaser.__init__Es7����(�(��.�.�.�,;�,@�,B�,B�)����)�)�)rc��|j���t|jjd��D].}|j�|������/|j���dSr)r�r�iterr�r�r��upper�rMrs  r�runz_UpperCaser.runIsp������ � � ��d�o�*�D�1�1�	,�	,�A��O� � ������+�+�+�+���������rc��t|��tusJ�|j�|��|j���Sr)r�r�r�r�r�r�s  r�submitz_UpperCaser.submitOsA���A�w�w�#�~�~�~�~�����a� � � ���$�$�&�&�&rc��|j�d��|j���|j���dSr)r�r�rr�rws r�stopz_UpperCaser.stopTsH������d�#�#�#����� � � ���������rN)rWrXrYrNr�r�r�rZrrr�r�CsS������C�C�C� � � �'�'�'�
 � � � � rr�c�P�eZdZdZd�Zd�Zed���Zed���Zd�Z	dS)�_TestSubclassingProcess�r]c�L�t��}d|_|���|�|�d��d��|�|�d��d��|���|���dS)NTr��HELLO�world�WORLD)r�r�r�rjr�r�r�)rM�
uppercasers  r�test_subclassingz(_TestSubclassingProcess.test_subclassing]s��� �]�]�
� �
������������*�*�7�3�3�W�=�=�=�����*�*�7�3�3�W�=�=�=��������������rc�X�|jdkr-|�d�|j����tj}|�tj|��|�|j|f���}|�	��|�
��t|d���5}|���}|�
d|��|�
d|��|�
d|��ddd��dS#1swxYwYdS)	Nr_r�r��utf-8��encoding�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)r�r�r�r�TESTFNr8�unlinkr��_test_stderr_flushr�r��open�readr�)rM�testfnrt�f�errs     r�test_stderr_flushz)_TestSubclassingProcess.test_stderr_flushfsD���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��!�����	�(�&�1�1�1��|�|�4�#:�&��|�K�K���
�
�����	�	����
�&�7�
+�
+�
+�	/�q��&�&�(�(�C��M�M�-�s�3�3�3��M�M�3�S�9�9�9��M�M�.�#�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s�;AD�D#�&D#c��tj|tjtjztjz��}t|ddd���t
_ddzdS)N�wr�F�r��closefdrbr)r?r��O_WRONLY�O_CREAT�O_EXCLr�r�)r�r��fds   rr�z*_TestSubclassingProcess._test_stderr_flushwsH��
�W�V�R�[�2�:�5��	�A�
B�
B���"�c�G�U�C�C�C��
�	�!����rc���tj|tjtjztjz��}t|ddd���t
_tj|��dS)Nr�r�Fr�)r?r�r�r�r�r�r�r<)r��reasonr�r�s    r�_test_sys_exitz&_TestSubclassingProcess._test_sys_exit~sQ��
�W�V�R�[�2�:�5��	�A�
B�
B���"�c�G�U�C�C�C��
��������rc���|jdkr-|�d�|j����tj}|�tj|��gd�dfD]�}|�|j||f���}d|_	|�
��t|��|�|j
d��t|d�	��5}|���}ddd��n#1swxYwY|�|���t#|����t%j|����gd
�}|D]�\}}|�|���5|�t(j|���}d|_	|�
��t|��|�|j
|��ddd��n#1swxYwY��dS)Nr_r�)rbr��zignore thisr�Trbr�r�)))Trb)�Fr))�r�)rr)rZr�rR)r�r�r�rr�r8r�r�r�r�r�r#rjr�r�r��rstripr�r?r�r�r<)	rMr�r�r�r��content�casesrRr.s	         r�
test_sys_exitz%_TestSubclassingProcess.test_sys_exit�sW���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��!�����	�(�&�1�1�1�
�I�I��
�	�	�F����D�$7�v�v�>N��O�O�A��A�H�
�G�G�I�I�I���O�O�O����Q�Z��+�+�+��f�w�/�/�/�
#�1��&�&�(�(��
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#����W�^�^�-�-�s�6�{�{�;�;�;��I�f���������$�	7�	7�N�D�(����4��(�(�
7�
7��L�L���t�L�<�<��������	�	�	��Q����� � ���X�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7��	7�	7s%�!D�D	�	D	�8A'G+�+G/	�2G/	N)
rWrXrYrqr�r�r�r�r�r�rZrrr�r�Ys|������"�M����/�/�/�"����[������[��
&7�&7�&7�&7�&7rr�c�z�t|d��r|���S|���dkS)N�emptyr)rr��qsize)r~s r�queue_emptyr��s4���q�'�����w�w�y�y���w�w�y�y�A�~�rc�z�t|d��r|���S|���|kS)N�full)rr�r�)r~�maxsizes  r�
queue_fullr��s4���q�&���$��v�v�x�x���w�w�y�y�G�#�#rc��eZdZed���Zd�Zed���Zd�Zed���Zd�Z	d�Z
ed���Zd	�Zd
�Z
d�Zd�Zd
�Zd�ZdS)�
_TestQueuec��|���td��D]}|����|���dS)N�)r/r'r�r9)r�r�child_can_start�parent_can_continuer*s     r�	_test_putz_TestQueue._test_put�sP���������q���	�	�A��I�I�K�K�K�K����!�!�!�!�!rc���d}|�|���}|���}|���}|�|j|||f���}d|_|���|�t|��d��|�t||��d��|�	d��|�	dd��|�	ddd��|�	d	d��|�	d
dd��|�
d��tjt��|�t|��d��|�t||��d��t|j	��}t|j
��}|�t j|dd��|�|jd��|�t j|ddd��|�|jd��|�t j|d��|�|jd��|�t j|ddt(��|�|jt(��|�t j|ddt*��|�|jd��|�t j|ddt,�
��|�|jt,��|���|���|�t|��d��|�t||��d��|���t5|��dS)Nr��r�r�TFrbr�r��r|�rr�)rr�r�r�r�r�rjr�r�r}�
put_nowaitrPr�r#rIr6�pyqueue�FullrhrL�TIMEOUT1�TIMEOUT2�TIMEOUT3r9r/r�r )rM�MAXSIZErr�r�rtr}r�s        r�test_putz_TestQueue.test_put�s\�����
�
�7�
�+�+���*�*�,�,��"�j�j�l�l���|�|��>���*=�>���������
�
��������U�+�+�T�2�2�2�����E�7�3�3�U�;�;�;�
�	�	�!����
�	�	�!�T����
�	�	�!�T�4� � � �
�	�	�!�U����
�	�	�!�U�D�!�!�!�
�������	
�
�5��������U�+�+�U�3�3�3�����E�7�3�3�T�:�:�:��E�I�&�&��"�5�#3�4�4�
����'�,��Q��6�6�6��$�$�S�[�!�4�4�4����'�,��Q��t�<�<�<��$�$�S�[�!�4�4�4����'�,�
�A�6�6�6��$�$�Z�%7��;�;�;����'�,��Q��h�?�?�?��$�$�S�[�(�;�;�;����'�,��Q��x�@�@�@��$�$�S�[�!�4�4�4����'�,��Q��h��G�G�G��$�$�S�[�(�;�;�;�������� � �"�"�"�����U�+�+�T�2�2�2�����E�7�3�3�U�;�;�;��	�	�����E�����rc��|���|�d��|�d��|�d��|�d��|���dS)Nr�r�r�r|)r/r}r9�r�rr�r�s    r�	_test_getz_TestQueue._test_getsh��������
�	�	�!����
�	�	�!����
�	�	�!����
�	�	�!�������!�!�!�!�!rc�.�|���}|���}|���}|�|j|||f���}d|_|���|�t|��d��|���|�	��tjt��|�t|��d��|�|�
dd��d��|�|�
d��d��|�|�
d���d��|�|���d	��|�t|��d��t|j
��}t|j��}|�t"j|d��|�|jd
��|�t"j|dd��|�|jd
��|�t"j|��|�|jd
��|�t"j|dt*��|�|jt*��|�t"j|dt,��|�|jd
��|�t"j|t.���|�|jt.��|���t3|��dS)Nr�TFr�r�rbr�r�r|r)rr�r�r�r�r�rjr�r9r/rPr�r#r��
get_nowaitrIr6r��EmptyrhrLr�r�r�r�r )rMrr�r�rtr�r�s       r�test_getz_TestQueue.test_gets����
�
�����*�*�,�,��"�j�j�l�l���|�|��>���*=�>���������
�
��������U�+�+�T�2�2�2�������� � �"�"�"��
�5��������U�+�+�U�3�3�3�	
������4��.�.��2�2�2�������4���!�,�,�,�������1��-�-�q�1�1�1�����)�)�+�+�Q�/�/�/�����U�+�+�T�2�2�2��E�I�&�&��"�5�#3�4�4�
����'�-��e�4�4�4��$�$�S�[�!�4�4�4����'�-��e�T�:�:�:��$�$�S�[�!�4�4�4����'�-��4�4�4��$�$�Z�%7��;�;�;����'�-��d�H�=�=�=��$�$�S�[�(�;�;�;����'�-��e�X�>�>�>��$�$�S�[�!�4�4�4����'�-��h��?�?�?��$�$�S�[�(�;�;�;��	�	�����E�����rc�V�tdd��D]}|�|���dS)Nrrm)r'r})r�rr*s   r�
_test_forkz_TestQueue._test_forkAs4���r�2���	�	�A��I�I�a�L�L�L�L�	�	rc�$�|���}td��D]}|�|���tjt
��|�|j|f���}d|_|�	��td��D]*}|�
|���|���+|�tj|jd��|���t!|��dS)Nrr�TrmF)rr'r}rPr�r#r�r�r�r�rjr�r6r�r�r�r )rMrr*r�s    r�	test_forkz_TestQueue.test_forkIs����
�
�����r���	�	�A��I�I�a�L�L�L�L�	
�
�5����
�L�L���u�h�L�?�?�����	���	�	�	��r���	-�	-�A����U�Y�Y�[�[�!�,�,�,�,����'�-���E�:�:�:�	�������E�����rc���|���}	|�|���d��n%#t$r|�d��YnwxYw|�d��|�|���d��|�d��|�|���d��|���|�|���d��|���|�|���d��t|��dS)Nrzqsize method not implementedrbr|r�)rrjr�rkr�r}r�r �rMr~s  r�
test_qsizez_TestQueue.test_qsizees(���J�J�L�L��	:����Q�W�W�Y�Y��*�*�*�*��"�	:�	:�	:��M�M�8�9�9�9�9�9�	:����	���a������������A�&�&�&�	���a������������A�&�&�&�	��������������A�&�&�&�	��������������A�&�&�&��A�����s�(?�A!� A!c��t|jd��D]/}tjt��|����0dSr)r�r�rPr�r#�	task_done)r�r~�objs   r�_test_task_donez_TestQueue._test_task_doneusF�����t�$�$�	�	�C��J�u����
�K�K�M�M�M�M�	�	rc�����������fd�td��D��}|D]}d|_|����td��D]}��|�������|D]}��d���|D]}|����t
���dS)Nc�J��g|]}���j�f����� Sra)r�r)rLr*rrMs  ��rrMz-_TestQueue.test_task_done.<locals>.<listcomp>~s>���&�&�&���<�<�t�';�5�(�<�K�K�&�&�&rr�Tr)�
JoinableQueuer'r�r�r}r�r )rM�workersr�r*rs`   @r�test_task_donez_TestQueue.test_task_done{s������"�"�$�$��&�&�&�&�&�!�!�H�H�&�&�&���	�	�A��A�H�
�G�G�I�I�I�I��r���	�	�A��I�I�a�L�L�L�L�
�
�
�����	�	�A��I�I�d�O�O�O�O��	�	�A�
�F�F�H�H�H�H��E�����rc���tj��5d}t|dzdd���5}|�d��ddd��n#1swxYwYt	jt
j����5	t|��n*#tj
$r|�d��YnwxYwddd��n#1swxYwYddd��dS#1swxYwYdS)N�imported_by_an_imported_modulez.pyr�r�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)r�temp_cwdr��writer�
DirsOnSysPathr?�getcwd�
__import__r�r��fail)rM�module_namer�s   r�test_no_import_lock_contentionz)_TestQueue.test_no_import_lock_contention�s���
�
�
!�
!�	3�	3�:�K��k�E�)�3��A�A�A�	
�Q��������	
�	
�	
�	
�	
�	
�	
�	
�	
�	
�	
����	
�	
�	
�	
��,�R�Y�[�[�9�9�
3�
3�3��{�+�+�+�+���}�3�3�3��I�I�2�3�3�3�3�3�3����
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s|�C�A�C�A	�C�A	�(C�>C�B�C�$B7�4C�6B7�7C�:C�C
	�
C�
C
	�C�C"�%C"c��tj��}tj��}|�t
j|jdd��tj��|z
}|�|d��t|��dS)NTg�������?r+)
rrrPrQr6r�r�r��assertGreaterEqualr )rMr~r��deltas    r�test_timeoutz_TestQueue.test_timeout�st���!�#�#���� � �����'�-����e�<�<�<��� � �5�(��	
����u�-�-�-��A�����rc�\�|jdkr-|�d�|j����Gd�dt��}tj���5|���}|�|����|�d��|�	|�
t
j�����t|��ddd��n#1swxYwYtj���5|�d���}|�|����|�d��	|�
|���d��n#t$rYnwxYw|�	|�
t
j�����|�	|�����t|��ddd��dS#1swxYwYdS)	Nr]r�c��eZdZd�ZdS)�F_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec��t�r)rArws rrpzQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__�s��$�$rN�rWrXrYrprZrr�NotSerializabler�s#������
%�
%�
%�
%�
%rrTr�rbr�)r�r�r��object�testr�captured_stderrrr}r�r�r�r rjr�rkr�)rMrr~s   r�"test_queue_feeder_donot_stop_onexcz-_TestQueue.test_queue_feeder_donot_stop_onexc�su���9��#�#��M�M�7�>�>�t�y�I�I�J�J�J�	%�	%�	%�	%�	%�f�	%�	%�	%��\�
)�
)�
+�
+�	�	��
�
���A�
�E�E�/�/�#�#�$�$�$�
�E�E�$�K�K�K��O�O�A�E�E�'�*?�E�@�@�A�A�A���N�N�N�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��\�
)�
)�
+�
+�	�	��
�
�1�
�%�%�A�
�E�E�/�/�#�#�$�$�$�
�E�E�$�K�K�K�
�� � ������A�.�.�.�.��&�
�
�
���
����
�O�O�A�E�E�'�*?�E�@�@�A�A�A��O�O�A�G�G�I�I�&�&�&���N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	sK�*B	C?�?D�D�(A	H!�2(F�H!�
F(�%H!�'F(�(A,H!�!H%�(H%c���|jdkr-|�d�|j����Gd�dt���G�fd�dtjj��}���}tj�	��5|t	j
�����}|�|��|�d��|�|�
tj�	����ddd��n#1swxYwY|�|j��|�|j��dS)
Nr]r�c��eZdZdZd�Zd�ZdS)�K_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc�"�d|_d|_dS�NF)�reduce_was_called� on_queue_feeder_error_was_calledrws rrNzT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__�s��).��&�8=��5�5�5rc��d|_t��NT)r)rArws rrpzV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__�s��)-��&�$�$rN)rWrXrY�__doc__rNrprZrrrr&�s8������,�,�
>�
>�
>�
%�
%�
%�
%�
%rrc�.��eZdZdZe�fd���ZdS)�E_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc�h��t|t��rt|���rd|_dSdSdSr,)rrAr*)r�rrs  �r�_on_queue_feeder_errorz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_error�sO����q�.�1�1�@�"�3��8�8�@�;?�C�8�8�8�@�@�@�@rN)rWrXrYr-�staticmethodr1)rs�r�	SafeQueuer/�sE�������C�C�
�
@�
@�
@�
@��\�
@�
@�
@rr3)�ctxTr�)r�r�r�r rrrr!rr"�get_contextr}r�r�r�r)r*)rMr3�not_serializable_objr~rs    @r�'test_queue_feeder_on_queue_feeder_errorz2_TestQueue.test_queue_feeder_on_queue_feeder_error�s�����9��#�#��M�M�7�>�>�t�y�I�I�J�J�J�	%�	%�	%�	%�	%�f�	%�	%�	%�	@�	@�	@�	@�	@�	@�	@��.�4�	@�	@�	@� /��0�0��
�\�
)�
)�
+�
+�	B�	B��	�o�9�;�;�<�<�<�A�
�E�E�&�'�'�'�
�E�E�$�K�K�K��O�O�A�E�E�'�*?�E�@�@�A�A�A�
	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�	
���,�>�?�?�?����,�M�N�N�N�N�Ns�A;D�D�"Dc��tj��tj��fD]�}|���|�t
d��5|�d��ddd��n#1swxYwY|�t
d��5|���ddd��n#1swxYwY��dS)Nz	is closed�foo)rrr	r�assertRaisesRegexrBr}r�rs  r�$test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptions�s2�� �&�(�(�/�*G�*I�*I�I�	�	�A�
�G�G�I�I�I��'�'�
�K�@�@�
�
����e����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'�
�K�@�@�
�
�������
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��		�	s$�A:�:A>	�A>	� C�C	�C	N)rWrXrYr�r�r�r�r�r�r�rrrrrr#r7r;rZrrr�r��s�������"�"��[�"�9�9�9�v�"�"��[�"�3�3�3�j����[�����8��� ����[��
���,3�3�3�*	�	�	����@$O�$O�$O�L����rr�c� �eZdZd�Zd�Zd�ZdS)�	_TestLockc�x�|���}|�|���d��|�|�d��d��|�|���d��|�t
tjf|j��dS�NTF)�Lockrj�acquire�releaser6rBr��ThreadError�rM�locks  r�	test_lockz_TestLock.test_locks����y�y�{�{�����������.�.�.�������e�,�,�e�4�4�4����������.�.�.����:�y�'<�=�t�|�L�L�L�L�Lrc�\�|���}|�|���d��|�|���d��|�|���d��|�|���d��|�|���d��|�|���d��|�t
tf|j��dSr,)�RLockrjrArBr6r�r	rDs  r�
test_rlockz_TestLock.test_rlocks����z�z�|�|�����������.�.�.����������.�.�.����������.�.�.����������.�.�.����������.�.�.����������.�.�.����>�<�8�$�,�G�G�G�G�Grc�b�|���5	ddd��dS#1swxYwYdSr�r@rws r�test_lock_contextz_TestLock.test_lock_contextsw��
�Y�Y�[�[�	�	��	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�$�(�(N)rWrXrYrFrIrLrZrrr=r=sG������M�M�M�H�H�H�����rr=c�&�eZdZd�Zd�Zd�Zd�ZdS)�_TestSemaphorec���|�dt|��|�|���d��|�dt|��|�|���d��|�dt|��|�|�d��d��|�dt|��|�|���d��|�dt|��|�|���d��|�dt|��dS)Nr�TrbrF)rnrtrjrArB�rM�sems  r�_test_semaphorez_TestSemaphore._test_semaphores2���'�'��9�c�:�:�:����������-�-�-��'�'��9�c�:�:�:����������-�-�-��'�'��9�c�:�:�:�������U�+�+�U�3�3�3��'�'��9�c�:�:�:����������-�-�-��'�'��9�c�:�:�:����������-�-�-��'�'��9�c�:�:�:�:�:rc�j�|�d��}|�|��|�|���d��|�dt
|��|�|���d��|�dt
|��dS)Nr�r�r�)�	SemaphorerRrjrBrnrtrPs  r�test_semaphorez_TestSemaphore.test_semaphore)s����n�n�Q�������S�!�!�!����������-�-�-��'�'��9�c�:�:�:����������-�-�-��'�'��9�c�:�:�:�:�:rc�Z�|�d��}|�|��dS�Nr�)�BoundedSemaphorerRrPs  r�test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphore1s/���#�#�A�&�&�����S�!�!�!�!�!rc�F�|jdkr-|�d�|j����|�d��}t	|j��}|�|d��d��|�|jd��|�|dd��d��|�|jd��|�|dt��d��|�|jd��|�|dt��d��|�|jt��|�|t���d��|�|jt��dS)Nr]r�rFr1Tr�)r�r�r�rTrIrArjrhrLr�r�r�)rMrQrAs   rrz_TestSemaphore.test_timeout9sw���9��#�#��M�M�7�>�>�t�y�I�I�J�J�J��n�n�Q�������,�,�����������/�/�/��$�$�W�_�c�:�:�:��������-�-�u�5�5�5��$�$�W�_�c�:�:�:��������1�1�5�9�9�9��$�$�W�_�a�8�8�8�������x�0�0�%�8�8�8��$�$�W�_�h�?�?�?�������2�2�2�E�:�:�:��$�$�W�_�h�?�?�?�?�?rN)rWrXrYrRrUrYrrZrrrNrNsU������;�;�;�;�;�;�"�"�"�@�@�@�@�@rrNc��eZdZedd���Zd�Zd�Zd�Zd�Zd�Z	d�Z
ed	���Zej
ed
��d���Zed���Zej
ed
��d
���Zed���Zd�ZdS)�_TestConditionNc���|���|���|�|��|���|���dSr)rArBr/)r��cond�sleeping�wokenr3s     rr�z_TestCondition.fRsQ���������������	�	�'����
�
�
�����������rc��td��D]>}	|��|krn,n#t$rYnwxYwtjt���?tjt��|�||��dS�Nr)r'rkrPr�r#rn)rMrKrlr*s    r�assertReachesEventuallyz&_TestCondition.assertReachesEventuallyZs����r���	�	�A�
��4�6�6�U�?�?��E�#��&�
�
�
����
�����J�u������
�5�����'�'��t�4�4�4�4�4s�$�
2�2c�0�|jdkr�	|j���|j���z
}|�|d��|�|j���d��dS#t$rYdSwxYwdS)Nr]r)r��_sleeping_countrt�_woken_countrj�_wait_semaphorerk)rMr^�sleeperss   r�check_invariantz_TestCondition.check_invariantes����9��#�#�
� �0�:�:�<�<� �-�7�7�9�9�:��� � ��1�-�-�-�� � ��!5�!?�!?�!A�!A�1�E�E�E�E�E��&�
�
�
����
����
$�#s�A6B�
B�Bc��|���}|�d��}|�d��}|�|j|||f���}d|_|���|�|j��tj	|j|||f���}d|_|���|�|j��|�
��|�
��tjt��|�dt|��|�
��|���|���tjt��|�dt|��|�
��|���|���tjt��|�dt|��|�|��|���dS)Nrr�Trbr�)�	ConditionrTr�r�r�r�r8r�r�rprArPr�r#rnrt�notifyrBri)rMr^r_r`r�s     r�test_notifyz_TestCondition.test_notifyps����~�~�����>�>�!�$�$�����q�!�!���L�L���d�H�e�-D�L�E�E�����	���	�	�	�����������D�F�$��%�1H�I�I�I�����	���	�	�	���������	������������	
�
�5�����'�'��9�e�<�<�<�	
���������
�
�
�������	
�
�5�����'�'��9�e�<�<�<�	
���������
�
�
�������	
�
�5�����'�'��9�e�<�<�<�	
���T�"�"�"�	�������rc���|���}|�d��}|�d���td��D]�}|�|j||�t
f���}d|_|���|�|j	��tj|j||�t
f���}d|_|���|�|j	����td��D]}|����td��D]}�����|�
dt���|�|��td��D]�}|�|j||�f���}d|_|���|�|j	��tj|j||�f���}d|_|���|�|j	����td��D]}|����t!jt$��|�
dt���|���|���|���|��fd�d��|�|��dS)Nrr�r�Tr�c�"��t���Sr�rt�r`s�r�<lambda>z0_TestCondition.test_notify_all.<locals>.<lambda>�����Y�u�-=�-=�r)rkrTr'r�r�r�r�r�r8r�r�rprArnrtrirPr�r#�
notify_allrBrc�rMr^r_r*r�rTr`s      @r�test_notify_allz_TestCondition.test_notify_all�s�����~�~�����>�>�!�$�$�����q�!�!���q���	$�	$�A����D�F�#'��5�(�"C��E�E�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�� ���'+�X�u�h�&G�I�I�I�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�#��q���	�	�A���������q���	�	�A��M�M�O�O�O�O��'�'��9�e�<�<�<�	
���T�"�"�"��q���		$�		$�A����D�F�$��%�1H��I�I�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�� ���d�H�e�5L�M�M�M�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�#��q���	�	�A��������	
�
�5�����'�'��9�e�<�<�<�	
������������������	
�$�$�%=�%=�%=�%=�q�A�A�A�	
���T�"�"�"�"�"rc����|���}|�d��}|�d���td��D]�}|�|j||�f���}d|_|���|�|j��tj
|j||�f���}d|_|���|�|j����td��D]}|����tj
t��|�dt ���|���|�d���|���|��fd�d��|���|�d	���|���|��fd
�d��|���|�d���|���|�dt ���|�|��dS)Nrr�r�Tr�r�)�nc�"��t���Srrprqs�rrrz._TestCondition.test_notify_n.<locals>.<lambda>�rsrr�c�"��t���Srrprqs�rrrz._TestCondition.test_notify_n.<locals>.<lambda>rsr)rkrTr'r�r�r�r�r8r�r�rprArPr�r#rnrtrlrBrcrirus      @r�
test_notify_nz_TestCondition.test_notify_n�s6����~�~�����>�>�!�$�$�����q�!�!���q���		$�		$�A����D�F�$��%�1H��I�I�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�� ���d�H�e�5L�M�M�M�A��A�H�
�G�G�I�I�I��O�O�A�F�#�#�#�#��q���	�	�A��������	
�
�5�����'�'��9�e�<�<�<�	
���������a�����������	
�$�$�%=�%=�%=�%=�q�A�A�A�	
���������a������������$�$�%=�%=�%=�%=�q�A�A�A�	
���������a������������'�'��9�e�<�<�<�	
���T�"�"�"�"�"rc�2�|���}t|j��}|���|t��}|���|�|d��|�|jt��dSr()	rkrIr/rAr�rBrjrhrL)rMr^r/rms    rrz_TestCondition.test_timeout
s{���~�~�����T�Y�'�'���������d�8�n�n������������e�$�$�$��$�$�T�\�8�<�<�<�<�<rc����|5d�_|���|��fd���}|r�jdkrtjd��ddd��dS#1swxYwYdS)Nrc����jdkS�Nr��rl��states�rrrz0_TestCondition._test_waitfor_f.<locals>.<lambda>�
���E�K��N�rr�rb)rlrl�wait_forr�r<)r�r^r�r-s  ` r�_test_waitfor_fz_TestCondition._test_waitfor_fs����
�	�	��E�K��K�K�M�M�M��]�]�#:�#:�#:�#:�;�;�F��
�U�[�A�-�-�������	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�AA&�&A*�-A*zneeds sharedctypesc���|���}|�dd���|�|j|�f���}d|_|���|5|��fd���}|�|��|��j	d��ddd��n#1swxYwYtd��D]T}tjd��|5�xj	d	z
c_	|�
��ddd��n#1swxYwY�Ut|��|�|jd��dS)
Nr*r>r�Tc����jdkS�Nrr�r�s�rrrz-_TestCondition.test_waitfor.<locals>.<lambda>*r�rrr�rJrb)rkr
r�r�r�r�r�r�rjrlr'rPr�rlr#r�)rMr^r�r-r*r�s     @r�test_waitforz_TestCondition.test_waitfors�����~�~�����
�
�3��#�#���L�L�� 4�D�%�=�L�I�I�����	���	�	�	�
�	-�	-��]�]�#:�#:�#:�#:�;�;�F��O�O�F�#�#�#����U�[�!�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�
�q���	�	�A��J�t�����
�
����q� ������
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	�Q���������Q�'�'�'�'�'s%�'A	B<�<C�C�.%D�D#	�&D#	c�.��|���|5d}tj��}|��fd�|���}tj��|z
}|s|dz|cxkr	|dzkr
nnd|_ddd��dS#1swxYwYdS)Nr+c����jdkSrr�r�s�rrrz8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>=r�rr�g333333�?r1T)rBrPrQr�rl)r�r^r��successrQr.�dtr-s  `     r�_test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_f7s�������
�
�
�
�	%�	%��H���!�!�B��]�]�#:�#:�#:�#:�H�]�M�M�F���!�!�B�&�B��
%�h��n�r�C�C�C�C�H�t�O�C�C�C�C�C� $��
�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	%�	%s�A%B
�
B�Bc��|���}|�dd��}|�dd��}|�d��}|�|j||||f���}d|_|���|�|�tj
�����td��D]T}tj
d��|5|xjd	z
c_|���ddd��n#1swxYwY�Ut!|��|�|j��dS)
Nr*rFr�Tr�r�rJrb)rkr
rTr�r�r�r�r�rArr�r'rPr�rlrlr#)rMr^r�r�rQr�r*s       r�test_waitfor_timeoutz#_TestCondition.test_waitfor_timeoutCsq���~�~�����
�
�3��"�"���*�*�S�%�(�(���n�n�Q�����L�L�� <�#�U�G�S�9�
�
;�
;�����	���	�	�	�������G�,@��A�A�B�B�B��q���	�	�A��J�t�����
�
����q� ������
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	�Q��������
�&�&�&�&�&s�+%D�D 	�#D 	c���|5|���ddd��n#1swxYwYtjd��|�!tj|t
j��dSdSra)rlrPr�r?rr
r�)r�rr�s   r�_test_wait_resultz _TestCondition._test_wait_result[s���
�	�	�
�H�H�J�J�J�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
�1�
�
�
��?��G�C���'�'�'�'�'��?s�$�(�(c��t|t��r$tjdkrt	j��}nd}|���}|5|�|�d����|�|�d����|�	|j
||f���}|���|�|�d����|�!|�
t|jd��|���ddd��dS#1swxYwYdS)Nr-rr+r��<)r�ProcessesMixinr�rRr?r�rkr�r/r�r�r�r�r6�KeyboardInterruptr�)rMr�rr�s    r�test_wait_resultz_TestCondition.test_wait_resultcsY���d�N�+�+�	����0G�0G��)�+�+�C�C��C��N�N����
�	�	����Q�V�V�A�Y�Y�'�'�'����Q�V�V�C�[�[�)�)�)����D�$:�!�S���J�J�A�
�G�G�I�I�I��O�O�A�F�F�2�J�J�'�'�'����!�!�"3�Q�V�R�@�@�@�
�F�F�H�H�H�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�C"E�E�Er)rWrXrYr�r�rcrirmrvr{rr�rCr��HAS_SHAREDCTYPESr�r�r�r�r�rZrrr\r\PsK�����������[��	5�	5�	5�	�	�	�+�+�+�Z<#�<#�<#�|0#�0#�0#�d=�=�=�����[���X��)�+?�@�@�(�(�A�@�(�.�	%�	%��[�	%��X��)�+?�@�@�'�'�A�@�'�.�(�(��[�(�����rr\c�2�eZdZed���Zd�Zdd�ZdS)�
_TestEventc�`�tjt��|���dSr)rPr�r�r9r2s  r�_test_eventz_TestEvent._test_eventzs#���
�8����
�	�	�����rc��|���}t|j��}|�|���d��|�|d��d��|�|jd��|�|t��d��|�|jt��|���|�|���d��|�|��d��|�|jd��|�|t��d��|�|jd��|�	��|�
|j|f���}d|_|�
��|�|��d��|���dS)NFr1Tr�)r�rIr/rjrsrhrLr�r9rnr�r�r�r�r�)rMr3r/r�s    r�
test_eventz_TestEvent.test_events����
�
�����U�Z�(�(��	
���������/�/�/�	
�����c���E�*�*�*��$�$�T�\�3�7�7�7������h����/�/�/��$�$�T�\�8�<�<�<�
�	�	����	
���������.�.�.���������&�&�&��$�$�T�\�3�7�7�7������h����.�.�.��$�$�T�\�3�7�7�7�	���
�
�
�
�L�L�� 0��x�L�@�@�����	���	�	�	���������&�&�&�	�������r�returnNc�8�|���}|jdkr�|�t|��d��|���|�t|��d��|���|�t|��d��dS|jdkr\|�t|��d��|���|�t|��d��dSdS)Nr]z<Event at .* unset>z<Event at .* set>r^z(<EventProxy object, typeid 'Event' at .*)r�r��assertRegex�reprr9rn)rMr3s  r�	test_reprz_TestEvent.test_repr�s����
�
�����9��#�#����T�%�[�[�*@�A�A�A��I�I�K�K�K����T�%�[�[�*>�?�?�?��K�K�M�M�M����T�%�[�[�*@�A�A�A�A�A�
�Y�)�
#�
#����T�%�[�[�*U�V�V�V��I�I�K�K�K����T�%�[�[�*U�V�V�V�V�V�$�
#r)r�N)rWrXrYr�r�r�r�rZrrr�r�xsW����������[��!�!�!�FW�W�W�W�W�Wrr�c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�
_DummyListc���tj�tjd����}tj��}|�||f��d|jd<dS)Nr*r)r�heap�
BufferWrapper�struct�calcsizer@�__setstate__�
_lengthbuf)rM�wrapperrEs   rrNz_DummyList.__init__�sZ��!�&�4�4�V�_�S�5I�5I�J�J���#�%�%�����7�D�/�*�*�*�������rc��|\|_|_|j����d��|_dS)Nr*)�_wrapper�_lock�create_memoryview�castr�)rMr�s  rr�z_DummyList.__setstate__�s7��&+�#����
��-�9�9�;�;�@�@��E�E����rc��|j|jfSr)r�r�rws r�__getstate__z_DummyList.__getstate__�s���
�t�z�*�*rc�p�|j5|jdxxdz
cc<ddd��dS#1swxYwYdS�Nrrb�r�r�)rM�_s  rr,z_DummyList.append�s���
�Z�	$�	$��O�A����!�#����	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�+�/�/c�^�|j5|jdcddd��S#1swxYwYdSr�r�rws r�__len__z_DummyList.__len__�sx��
�Z�	&�	&��?�1�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s�
"�&�&N)rWrXrYrNr�r�r,r�rZrrr�r��sb���������F�F�F�+�+�+�$�$�$�&�&�&�&�&rr�c�.�tjd��dS)NrJr�rZrr�_waitr��s���J�t�����rc�8�eZdZdZd
d�Zd�Zd�Zd�Zd�Zd�Z	d	S)�Bunchz
    A bunch of threads.
    Fc��||_||_||_|���|_|���|_|���|_|s|j���g}t|��D]M}|�
|j���}d|_|�
��|�|���Nd�}	tj||	|��|_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.
        r�Tc�8�|D]}|����dSr)r�)r_r�s  r�finalizez Bunch.__init__.<locals>.finalize�s*���
�
���������
�
rN)r�rRrx�	DummyList�started�finishedr��	_can_exitr9r'r��taskr�r�r,r@r��
_finalizer)
rM�	namespacer�rRrx�wait_before_exitr_r*r�r�s
          rrNzBunch.__init__�s��������	���� �*�*�,�,���!�+�+�-�-��
�"���*�*����	!��N��� � � ����q���	�	�A��!�!���!�3�3�A��A�H�
�G�G�I�I�I��N�N�1�����	�	�	�"�*�4��7�C�C����rc���tj��}|j�|��	|j|j�|j�|��|j�d��|j�	��sJ�dS#|j�|��|j�d��|j�	��sJ�wxYw)N�)
r?r�r�r,r�rRr�r�r/rs�rMr�s  rr�z
Bunch.task�s����i�k�k������C� � � �	+��D�F�D�I����M� � ��%�%�%��N����#�#�#��>�(�(�*�*�*�*�*�*�*��
�M� � ��%�%�%��N����#�#�#��>�(�(�*�*�*�*�*�*�*�*�*s�B�AC c��t|j��|jkr-t��t|j��|jk�+dSdSr)r�r�rxr�rws r�wait_for_startedzBunch.wait_for_started�sG���$�,���$�&�(�(��G�G�G��$�,���$�&�(�(�(�(�(�(rc��t|j��|jkr-t��t|j��|jk�+dSdSr)r�r�rxr�rws r�wait_for_finishedzBunch.wait_for_finishedsG���$�-� � �4�6�)�)��G�G�G��$�-� � �4�6�)�)�)�)�)�)rc�8�|j���dSr)r�r9rws r�	do_finishzBunch.do_finishs����������rc�.�|���dSr)r�rws rrzBunch.close	s���������rNr�)
rWrXrYr-rNr�r�r�r�rrZrrr�r��s���������D�D�D�D�8+�+�+��������������rr�c��eZdZd�Zd�ZdS)�
AppendTruec��||_dSr)r)rMrs  rrNzAppendTrue.__init__s
������rc�:�|j�d��dSr,)rr,rws rrUzAppendTrue.__call__s�����������rNrVrZrrr�r�
s2�������������rr�c�<�eZdZdZdZdZd�Zd�Zd�Zd�Z	e
d���Zdd
�Zd�Z
e
d���Zd
�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd�Zd�Ze
d���Zd�ZdS)�_TestBarrierz$
    Tests for Barrier objects.
    r|g>@c�R�|�|j|j���|_dS)Nr�)�BarrierrT�defaultTimeout�barrierrws r�setUpz_TestBarrier.setUps"���|�|�D�F�D�4G�|�H�H����rc�F�|j���d|_dSr)r��abortrws r�tearDownz_TestBarrier.tearDowns!�������������rc��|jdkrgS|jdkr|j���St��S)Nr_r^)r�r^r�r�rws rr�z_TestBarrier.DummyList"s?���9�	�!�!��I�
�Y�)�
#�
#��<�$�$�&�&�&��<�<�rc���t||||jdz
��}	||�|���|���dS#|���wxYwra)r�rTr�r)rMr�rRrgs    r�run_threadsz_TestBarrier.run_threads*s`���$��4�����*�*��	�
�A�t�H�H�
���!�!�!�
�G�G�I�I�I�I�I��A�G�G�I�I�I�I���s�A�A!c���|j}||jksJ�t|��D]�}|d�d��t	|d��||zksJ�|���|d�d��t	|d��|dz|zksJ�|�����	|jdksJ�n#t$rYnwxYw|jrJ�dS)NrTrb)	�partiesrTr'r,r�r/�	n_waitingrk�broken)r�r��resultsrx�mr*s      r�	multipassz_TestBarrier.multipass2s���O���C�E�z�z�z�z��q���	�	�A��A�J���d�#�#�#��w�q�z�?�?�a�!�e�+�+�+�+��L�L�N�N�N��A�J���d�#�#�#��w�q�z�?�?�q�1�u��k�1�1�1�1��L�L�N�N�N�N�	��$��)�)�)�)�)��"�	�	�	��D�	�����>�!�!�!�!�!s�
C�
C �C rbc��|���|���g}|�|j|j||f��dS)z;
        Test that a barrier is passed in lockstep
        N)r�r�r�r�)rM�passesr�s   r�test_barrierz_TestBarrier.test_barrierCsI���>�>�#�#�T�^�^�%5�%5�6�������$�,���)H�I�I�I�I�Irc�,�|�d��S)zC
        Test that a barrier works for 10 consecutive runs
        r)r�rws r�test_barrier_10z_TestBarrier.test_barrier_10Js��� � ��$�$�$rc�X�|���}|�|��dSr)r/r})r�r�rrms    r�_test_wait_return_fz _TestBarrier._test_wait_return_fPs"���l�l�n�n��
�	�	�#�����rc�$��|����|�|j|j�f���fd�t	|j��D��}|�|�d��d��t���dS)z9
        test the return value from barrier.wait
        c�8��g|]}������SrZrc)rLr*rs  �rrMz1_TestBarrier.test_wait_return.<locals>.<listcomp>[s!���6�6�6�1�5�9�9�;�;�6�6�6rrrbN)	rr�r�r�r'rTrj�countr )rMr�rs  @r�test_wait_returnz_TestBarrier.test_wait_returnUs�����
�
��������1�D�L�%�3H�I�I�I�6�6�6�6��d�f�
�
�6�6�6��������q�)�)�1�-�-�-��E�����rc�b�|���t|��dkrt�dSra)r/r�r	)r�r�r�s   r�_test_action_fz_TestBarrier._test_action_f_s.���������w�<�<�1������rc��|���}|�|jt|�����}|�|j||f��|�t|��d��dS)z,
        Test the 'action' callback
        )r~rbN)r�r�rTr�r�r�rjr�)rMr�r�s   r�test_actionz_TestBarrier.test_actionesr���.�.�"�"���,�,�t�v�j��.A�.A�,�B�B������,�w��.@�A�A�A�����W���q�)�)�)�)�)rc�B�	|���}||jdzkrt�|���|�d��dS#tj$r|�d��YdSt$r|���YdSwxYw�Nr�T)r/rTr	r,r��BrokenBarrierErrorr�)r�r��results1�results2r*s     r�
_test_abort_fz_TestBarrier._test_abort_fns���		������A��C�E�1�H�}�}�"�"��L�L�N�N�N��O�O�D�!�!�!�!�!���+�	"�	"�	"��O�O�D�!�!�!�!�!�!��	�	�	��M�M�O�O�O�O�O�O�	���s�AA�$B�=B�Bc�v�|���}|���}|�|j|j||f��|�t|��d��|�t|��|jdz
��|�|jj��dS)zK
        Test that an abort will put the barrier in a broken state
        rrbN)	r�r�rr�rjr�rTr�r�)rMr�r�s   r�
test_abortz_TestBarrier.test_abort{s����>�>�#�#���>�>�#�#������+��,��(�;�	=�	=�	=�����X����*�*�*�����X�����q��1�1�1������+�,�,�,�,�,rc���|���}||jdzkrO|j|jdz
kr'tjd��|j|jdz
k�'|���nU	|���|�d��n*#tj$r|�d��YnwxYw|���|�d��dS)Nr�rbrOT)	r/rTr�rPr��resetr,r�r�)r�r�r�r��results3r*s      r�
_test_reset_fz_TestBarrier._test_reset_f�s����L�L�N�N�����q��=�=��#�c�e�A�g�-�-��
�5�!�!�!��#�c�e�A�g�-�-��M�M�O�O�O�O�
&�����������%�%�%�%���/�
&�
&�
&�����%�%�%�%�%�
&����	��������������s�3)B�$C�Cc��|���}|���}|���}|�|j|j|||f��|�t|��d��|�t|��|jdz
��|�t|��|j��dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rrbN)r�r�rr�rjr�rT)rMr�r�rs    r�
test_resetz_TestBarrier.test_reset�s����>�>�#�#���>�>�#�#���>�>�#�#������+��,��(�H�E�	G�	G�	G�����X����*�*�*�����X�����q��1�1�1�����X�����/�/�/�/�/rc�"�	|���}||jdzkrt�|���|�d��nI#tj$r|�d��Yn#t$r|���YnwxYw|���|jdzkr|���|���|���|�d��dSr�)r/rTr	r,r�r�r�r)r�r��barrier2r�r�rr*s       r�_test_abort_and_reset_fz$_TestBarrier._test_abort_and_reset_f�s���		������A��C�E�1�H�}�}�"�"��L�L�N�N�N��O�O�D�!�!�!�!���+�	"�	"�	"��O�O�D�!�!�!�!�!��	�	�	��M�M�O�O�O�O�O�	����
�=�=�?�?�c�e�Q�h�&�&��M�M�O�O�O��
�
������������������s�AA�$B�;B�Bc���|���}|���}|���}|�|j��}|�|j|j||||f��|�t|��d��|�t|��|jdz
��|�t|��|j��dS)zF
        Test that a barrier can be reset after being broken.
        rrbN)r�r�rTr�rr�rjr�)rMr�r�rr
s     r�test_abort_and_resetz!_TestBarrier.test_abort_and_reset�s����>�>�#�#���>�>�#�#���>�>�#�#���<�<���'�'������5��,��(�H�h�O�	Q�	Q�	Q�����X����*�*�*�����X�����q��1�1�1�����X�����/�/�/�/�/rc���|���}||jdzkrtjd��	|�d��dS#tj$r|�d��YdSwxYw)Nr���?rhT)r/rTrPr�r�r�r,�r�r�r�r*s    r�_test_timeout_fz_TestBarrier._test_timeout_f�s����L�L�N�N�����q��=�=��J�s�O�O�O�	!��L�L���������+�	!�	!�	!��N�N�4� � � � � � �	!���s�A�$A7�6A7c���|���}|�|j|j|f��|�t|��|jj��dS)z$
        Test wait(timeout)
        N)r�r�rr�rjr�r�)rMr�s  rrz_TestBarrier.test_timeout�sZ���.�.�"�"������-���g�/F�G�G�G�����W���t�|�';�<�<�<�<�<rc��|�|j��}||jdzkrtjd��	|���dS#t
j$r|�d��YdSwxYw)Nr�rT)r/r�rTrPr�r�r�r,rs    r�_test_default_timeout_fz$_TestBarrier._test_default_timeout_f�s����L�L��+�,�,�����q��=�=��J�s�O�O�O�	!��L�L�N�N�N�N�N���+�	!�	!�	!��N�N�4� � � � � � �	!���s�A�$A<�;A<c���|�|jd���}|���}|�|j||f��|�t
|��|j��dS)z4
        Test the barrier's default timeout
        rhr�N)r�rTr�r�rrjr�r�)rMr�r�s   r�test_default_timeoutz!_TestBarrier.test_default_timeout�sl���,�,�t�v�s�,�3�3���.�.�"�"������5���7I�J�J�J�����W���w��7�7�7�7�7rc��|�d��}|���|���dSra)r�r/)rMrgs  r�test_single_threadz_TestBarrier.test_single_thread�s/���L�L��O�O��	������	�������rc��t|��D]E}|���|5|�|��ddd��n#1swxYwY�FdSr)r'r/r�)r�r�r��connrEr*s      r�_test_thousand_fz_TestBarrier._test_thousand_f�s����v���	�	�A��L�L�N�N�N��
�
��	�	�!����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	�	s�A
�
A	�A	c�H�|jdkr-|�d�|j����d}|���}|�d��\}}t|j��D]U}|�|j|j	|||f���}|�
��|�|j���Vt|��D]A}t|j��D]*}|�
|���|���+�BdS)Nr^r���Fr�)r�r�r�r@r�r'rTr�rr�r�r8r�rjr�)rMr�rErr��jr�r*s        r�
test_thousandz_TestBarrier.test_thousand�s���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J����y�y�{�{���9�9�U�+�+���j��t�v���	$�	$�A����D�$9�!%��v�z�4� H��J�J�A�
�G�G�I�I�I��O�O�A�F�#�#�#�#��v���	1�	1�A��4�6�]�]�
1�
1��� � ������a�0�0�0�0�
1�	1�	1rNr�)rWrXrYr-rTr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr
rrrrrrrrZrrr�r�s
��������	
�A��N�I�I�I���� � � �����"�"��[�"� J�J�J�J�%�%�%�����[���������[��
*�*�*��
�
��[�
�
-�
-�
-�����[��"0�0�0�����[��*
0�
0�
0��!�!��[�!�=�=�=��!�!��[�!�8�8�8����
����[��1�1�1�1�1rr�c	�z�eZdZdZddddded��ed��fgZd	�Zed
���Zdd�Z	d
�Z
d�ZdS)�
_TestValuer�)r*i�i�^)�dg
@g�)�hi�����)r~��r�x�yc�B�ts|�d��dSdS�Nz%requires multiprocessing.sharedctypes�r�r�rws rr�z_TestValue.setUp�0���	C��M�M�A�B�B�B�B�B�	C�	Crc�V�t||j��D]\}}|d|_�dSrW)�zip�codes_valuesrl)r��values�sv�cvs    rr�z_TestValue._test"s9���&�#�"2�3�3�	�	�F�B���!�u�B�H�H�	�	rFc����|r�fd��jD��}n�fd��jD��}t|�j��D]&\}}��|j|d���'���j|f���}d|_|���|���t|�j��D]&\}}��|j|d���'dS)Nc�D��g|]\}}}��||����SrZ)�RawValue�rL�coderlr�rMs    �rrMz)_TestValue.test_value.<locals>.<listcomp>*s=���?�?�?�(�$��q��m�m�D�%�0�0�?�?�?rc�D��g|]\}}}��||����SrZ)r
r6s    �rrMz)_TestValue.test_value.<locals>.<listcomp>-s=���?�?�?�(�$��q��j�j��u�-�-�?�?�?rrbr�Tr�)	r/r.rjrlr�r�r�r�r�)rM�rawr0r1r2rts`     r�
test_valuez_TestValue.test_value(s'����	?�?�?�?�?�,0�,=�?�?�?�F�F�?�?�?�?�,0�,=�?�?�?�F��&�$�"3�4�4�	.�	.�F�B�����R�X�r�!�u�-�-�-�-��|�|�4�:�V�I�|�>�>������
�
�����	�	�����&�$�"3�4�4�	.�	.�F�B�����R�X�r�!�u�-�-�-�-�	.�	.rc�2�|�d���dS�NT)r9)r:rws r�
test_rawvaluez_TestValue.test_rawvalue;s�����D��!�!�!�!�!rc��|�dd��}|���}|���}|�ddd���}|���}|���}|���}|�dd|���}|���}	|���}
|�||	��|�ddd���}|�t
|d����|�t
|d����|�t|jddd���|�	dd��}|�t
|d����|�t
|d����dS)Nr*r|�rEF�get_lock�get_obj�navalue)
r
r@rAr@rjr�rr6rAr5)
rM�val1�lock1�obj1�val2�lock2�obj2rE�val3�lock3�obj3�arr4�arr5s
             r�test_getobj_getlockz_TestValue.test_getobj_getlock>s}���z�z�#�q�!�!���
�
�����|�|�~�~���z�z�#�q�t�z�,�,���
�
�����|�|�~�~���y�y�{�{���z�z�#�q�t�z�,�,���
�
�����|�|�~�~������u�%�%�%��z�z�#�q�u�z�-�-�������z�2�2�3�3�3������y�1�1�2�2�2����.�$�*�c�1�9��M�M�M��}�}�S�!�$�$�������z�2�2�3�3�3������y�1�1�2�2�2�2�2rNr�)rWrXrYrqrr/r�r�r�r:r=rNrZrrr!r!s�������"�M�	����	�e�e�C�j�j�%�%��*�*�%�
�L�C�C�C�����[��
.�.�.�.�&"�"�"�3�3�3�3�3rr!c�
�eZdZdZed���Zejedud��d
d���Z	ejedud��d���Z
ejedud��d���Zejedud��d	���ZdS)�
_TestArrayr�c�x�tdt|����D]}||xx||dz
z
cc<�dSra)r'r�)r��seqr*s   rr�z_TestArray.f\sK���q�#�c�(�(�#�#�	�	�A���F�F�F�c�!�A�#�h��F�F�F�F�	�	rNzrequires _ctypesFc�D�gd�}|r|�d|��}n|�d|��}|�t|��t|����|�|d|d��|�t	|dd���t	|dd�����tjdgd���x|dd�<|dd�<|�t	|dd���|��|�|��|�|j|f�	��}d
|_|�	��|�
��|�t	|dd���|��dS)N)
i�iri�i5���i$i�i�i?r*r�r�r�)rbr�r�r�r�r�r�T)�RawArray�Arrayrjr�r��arrayr�r�r�r�r�)rMr9rR�arrr�s     r�
test_arrayz_TestArray.test_arrayasp��@�@�@���	'��-�-��S�)�)�C�C��*�*�S�#�&�&�C�����S���3�s�8�8�,�,�,�����Q���Q��(�(�(�����c�!�A�#�h����c�!�A�#�h���8�8�8�#�k�#�|�|�|�<�<�<��A�a�C��3�q��s�8�����c�!�!�!�f���s�+�+�+����s�����L�L���c�V�L�4�4�����	���	�	�	�	����������c�!�!�!�f���s�+�+�+�+�+rc	��d}td��D]�}|�d|��}|�t|��|��|�t	|��dg|z��td��|dd�<|�t	|��t	td������~��dS)Nrr�r*r)r'rWrjr�r�)rM�sizer�rYs    r�test_array_from_sizez_TestArray.test_array_from_sizezs�����
�q���	�	�A��*�*�S�$�'�'�C����S��X�X�t�,�,�,����T�#�Y�Y���d�
�3�3�3��2�Y�Y�C����F����T�#�Y�Y��U�2�Y�Y���8�8�8���
	�	rc�2�|�d���dSr<)rZrws r�
test_rawarrayz_TestArray.test_rawarray�s�����D��!�!�!�!�!rc�|�|�dttd������}|���}|���}|�dttd����d���}|���}|���}|���}|�dttd����|���}|���}	|���}
|�||	��|�dtd��d���}|�t|d����|�t|d����|�	t|jdtd��d���|�dtd����}|�t|d����|�t|d����dS)Nr*rr?Fr@rA�notalock)rWr�r'r@rAr@rjr�rr6rArV)
rM�arr1rDrE�arr2rGrHrE�arr3rJrKrLrMs
             r�test_getobj_getlock_objz"_TestArray.test_getobj_getlock_obj�s����z�z�#�t�E�"�I�I���/�/���
�
�����|�|�~�~���z�z�#�t�E�"�I�I���T�z�:�:���
�
�����|�|�~�~���y�y�{�{���z�z�#�t�E�"�I�I���T�z�:�:���
�
�����|�|�~�~������u�%�%�%��z�z�#�u�R�y�y�u�z�5�5�������z�2�2�3�3�3������y�1�1�2�2�2����.��*�c�5��9�9�:�	�	G�	G�	G��}�}�S�%��)�)�,�,�������z�2�2�3�3�3������y�1�1�2�2�2�2�2rr�)
rWrXrYrqr�r�rC�skipIfr9rZr]r_rerZrrrPrPXs�������"�M�����[���X�_�U�d�]�$6�7�7�,�,�,�8�7�,�0�X�_�U�d�]�$6�7�7���8�7���X�_�U�d�]�$6�7�7�"�"�8�7�"��X�_�U�d�]�$6�7�7�3�3�8�7�3�3�3rrPc�B�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�_TestContainers�r^c��|�ttd������}|�|dd�ttd������|���}|�|dd�g��|�ttd������|�|dd�ttd������|�|dd��|�|dd�gd���|dz}|�|dd�gd���|�|ddgzgd���|�|dd�ttd������||g}|�|��}|�d�|D��gd	�gd�g��|�|g��}|�d
��|�|ddd�gd���dS)
Nrr|r�)r�r�r�)
rrbr�r�r�rrbr�r�r�r�)rrbr�r�r�rrbr�r�r�r|r�c�"�g|]}|dd���
SrrZ)rL�elements  rrMz-_TestContainers.test_list.<locals>.<listcomp>�s ��)�)�)�G�W�Q�Q�Q�Z�)�)�)r)
rrbr�r�r�r|r�r�r��	r�r)rrbr�r�r�r|r�r�r�rmr�)r�r'rj�extendr,)rMrfrgr"r�r�s      r�	test_listz_TestContainers.test_list�s���I�I�d�5��9�9�o�o�&�&������1�1�1��t�E�"�I�I���/�/�/��I�I�K�K������1�1�1��r�"�"�"�	����e�A�h�h��� � � �����1�1�1��t�E�!�H�H�~�~�.�.�.�����1��q�!�!�!�����1�R�4��'�'�'�*�*�*�	�Q�������1�1�1��=�=�=�>�>�>�����a��V��%I�%I�%I�J�J�J�����1�1�1��t�E�"�I�I���/�/�/�
��F���I�I�a�L�L�����)�)�q�)�)�)�
+�
+�
+�-K�-K�-K�L�	�	�	�

�I�I�q�c�N�N��	�����������1��a�a�a��"I�"I�"I�J�J�J�J�Jrc��|�ttd������}t|��}|�t|��ttd������|�t|��g��t|��}d|d<|�t	|��d��dS)Nrr�r)r�r'r�rj�next)rMrf�its   r�test_list_iterz_TestContainers.test_list_iter�s����I�I�d�5��9�9�o�o�&�&��
�!�W�W������b���4��b�	�	�?�?�3�3�3�����b���2�&�&�&�
�!�W�W����!������b���3�'�'�'�'�'rc������fd�td��D����}��d�|D��gd�gdz��d|dd<��|ddd�gd���td	d��D](}��||dd�gd����)��|d	���d
����t	|d	��d
��tddd
��D]+}��t	||��d���,~����}|�|��~dS)Nc�T��g|]$}��td������%S)r�)r�r')rL�_irMs  �rrMz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>�s+���>�>�>�r�t�y�y��q���*�*�>�>�>rr�c�"�g|]}|dd���
SrrZ)rL�inners  rrMz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>�s ��2�2�2�u�%����(�2�2�2r)rrbr��7rr>)rrbryrbr�)r�r'rj�popr�r,)rMrfr*rgs`   r�test_list_proxy_in_listz'_TestContainers.test_list_proxy_in_list�su����I�I�>�>�>�>�U�1�X�X�>�>�>�?�?�����2�2��2�2�2�Y�Y�Y�K�!�O�D�D�D���!��R������1��a�a�a��*�*�*�-�-�-��q�!���	1�	1�A����Q�q�T�!�!�!�W�i�i�i�0�0�0�0�����1������Q�'�'�'�����Q�q�T���A�&�&�&��q�!�Q���	+�	+�A����S��1��Y�Y��*�*�*�*�
��I�I�K�K��	�������
�A�Arc�z�|���}ttdd����}|D]}t|��||<�|�|���td�|D������|�t
|�����|��|�t
|�����d�|D����|�t
|�	����d�|D����dS)N�A�Fc3�8K�|]}|t|��fV��dSr��chr�rLr*s  r�	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>�s,����'E�'E���C��F�F��'E�'E�'E�'E�'E�'Erc�,�g|]}t|����SrZr�r�s  rrMz-_TestContainers.test_dict.<locals>.<listcomp>�s��-F�-F�-F��c�!�f�f�-F�-F�-Frc�0�g|]}|t|��f��SrZr�r�s  rrMz-_TestContainers.test_dict.<locals>.<listcomp>�s"��,J�,J�,J�Q�a��Q���[�,J�,J�,Jr)
�dictr�r'r�rjr�sorted�keysr0rx)rMr"�indicesr*s    r�	test_dictz_TestContainers.test_dict�s���I�I�K�K���u�R��}�}�%�%���	�	�A��q�6�6�A�a�D�D���������4�'E�'E�W�'E�'E�'E�#E�#E�F�F�F����������)�)�7�3�3�3��������
�
�+�+�-F�-F�g�-F�-F�-F�G�G�G��������	�	�*�*�,J�,J�'�,J�,J�,J�K�K�K�K�Krc���|���}ttdd����}|D]}t|��||<�t	|��}|�t|��|��|�t|��g��t	|��}|���|�tt|��dS)Nr}r~)
r�r�r'r�r�rjrnr6r	rq)rMr"r�r*rrs     r�test_dict_iterz_TestContainers.test_dict_iter�s����I�I�K�K���u�R��}�}�%�%���	�	�A��q�6�6�A�a�D�D�
�!�W�W������b���7�+�+�+�����b���2�&�&�&�
�!�W�W��	���	�	�	����,��b�1�1�1�1�1rc�"�|�dd���}|�dd���}|�||���}|�|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�hamstersrr�)�water�feed)�pets�suppliesr�r�r|�blanketsr�r�r��rr�rb�marmots�X�cr>r�)r�rjrnr�r�r�)rMr�r�r"�l�outers      r�test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nested	s����y�y��Q�y�/�/���9�9�2�A�9�.�.���I�I�4�(�I�3�3������'�*�B�/�/�/�����:��w�/��4�4�4�$%��*�
�j�!�����*�-�q�1�1�1�����:��z�2�A�6�6�6�!"��*�
�g������'�*�A�.�.�.�����:��w�/��3�3�3�������6��9�-�q�1�1�1�$&��*�
�j�!�����:��z�2�B�7�7�7���y���Z�=����������'�*�A�.�.�.�����:��w�/��3�3�3�	���	�	�	�����Q����#�#�#�����'�*�A�.�.�.�����j�)�1�-�-�-��I�I�t�X�&�'�'����!��Y������i��!�,�,�,�����1��i��!�,�,�,�������1��i��!�,�,�,��	�	�B��8�Q�-�(�(�����e�A�h��-�-�-�����r��2��v�.��2�2�2�2�2rc��|���}|�|�����|d�d��|�|d���d��|���}|���|d<|d�d��|�|d���d��dS)Nr�{��)r�r,rr}rjr�r�res   r�test_nested_queuez!_TestContainers.test_nested_queue1	s����I�I�K�K��	�����������	�!�����
�
�
�����1������S�)�)�)��I�I�K�K���z�z�|�|��!��	�!�����
�
�
�����1������S�)�)�)�)�)rc�t�|���}d|_d|_d|_|�|j|jfd��|`|�t|��d��|�t|d����|�t|d����dS)N�Bob�Builder�hidden)r�r�zNamespace(name='Bob')r(�job)�	Namespacer(r��_hiddenrjr�r�r)rMrxs  r�test_namespacez_TestContainers.test_namespace;	s����N�N������������	����!�&�!�%��*<�=�=�=�
�E�����Q���!8�9�9�9������6�*�*�+�+�+����G�A�u�-�-�-�.�.�.�.�.rN)rWrXrYrqrorsr{r�r�r�r�r�rZrrrhrh�s������� �M�K�K�K�>(�(�(����(L�L�L�2�2�2�,3�,3�,3�\*�*�*�	/�	/�	/�	/�	/rrhr1c�4�tj|��||zSrr�)r'r/s  r�sqrr�J	s���J�t�����Q�3�Jrc��||zSrrZ�r'r(s  r�mulr�N	����Q�3�Jrc�N�tj|��tddz���)Nr'i)rPr�rBr.s r�raise_large_valuerrorr�Q	s$���J�t����
�S�7�]�
#�
#�#rc��|SrrZ�r's r�identityr�U	s���Hrc��eZdZdZd�Zd�ZdS)�
CountedObjectrc�V�|xjdz
c_t�|��Sra)�n_instancesr �__new__rs rr�zCountedObject.__new__[	s$�����1�����~�~�c�"�"�"rc�@�t|��xjdzc_dSra)r�r�rws r�__del__zCountedObject.__del___	s"���T�
�
���!�#����rN)rWrXrYr�r�r�rZrrr�r�X	s7�������K�#�#�#�$�$�$�$�$rr�c��eZdZdS)�SayWhenErrorN�rWrXrYrZrrr�r�b	s�������rr�c#�K�|dkrtd���t|��D]}||krtd���|V��dS)Nr>zSomebody said when)r�r')�total�whenr*s   r�exception_throwing_generatorr�d	s`�����r�z�z��/�0�0�0�
�5�\�\������9�9��3�4�4�4�������rc�
��eZdZe�fd���Ze�fd���Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zed���Zd�Zed���Zd�Zd�Zd�Zd�Zd�Z �xZ!S)�	_TestPoolc�|��t�����|�d��|_dSr)�super�
setUpClass�Pool�pool�r��	__class__s �rr�z_TestPool.setUpClasso	s.���
���������8�8�A�;�;����rc���|j���|j���d|_t�����dSr)r�r�r�r��
tearDownClassr�s �rr�z_TestPool.tearDownClasst	sI������������
�
�������
���������rc���|jj}|�|td��td����|�|tdddi��td�����dS)N)r|r|rZr'r�r�)r��applyrjr�)rM�papplys  r�
test_applyz_TestPool.test_apply{	si������������T�*�*�C��F�F�3�3�3�������R�#�a��1�1�3��8�8�8�<�<�<�<�<rc
��|jj}|�|tt	td������t	ttt	td����������|�|tt	td����d���t	ttt	td����������dS)Nrr�rm��	chunksize)r��maprjr�r�r')rM�pmaps  r�test_mapz_TestPool.test_map�	s����y�}�������c�4��b�	�	�?�?�3�3�T�#�c�4��b�	�	�?�?�:S�:S�5T�5T�U�U�U������c�4��c�
�
�#3�#3�r�B�B�B��c�#�t�E�#�J�J�'7�'7�8�8�9�9�	;�	;�	;�	;�	;rc
�.�|jj}ttt	d��t	ddd������}|�|t|��ttjt|������ttt	d��t	ddd������}|�|t|d���ttjt|������dS)Nrrmr>r�r�rmr�)r��starmapr�r.r'rjr�r�)rM�psmap�tupless   r�test_starmapz_TestPool.test_starmap�	s����	�!���c�%��)�)�U�1�R��_�_�5�5�6�6�������s�F�+�+��i�/��V�<�<�=�=�	?�	?�	?��c�%��*�*�e�B�r�2�&6�&6�7�7�8�8�������s�F�b�9�9�9��i�/��V�<�<�=�=�	?�	?�	?�	?�	?rc
�N�tttd��tddd������}|�|j�t|�����ttj	t|������dS)Nr�r�r>)
r�r.r'rjr��
starmap_asyncr�r�r�r�)rMr�s  r�test_starmap_asyncz_TestPool.test_starmap_async�	s����c�%��*�*�e�B�r�2�&6�&6�7�7�8�8�������0�0��f�=�=�A�A�C�C��i�/��V�<�<�=�=�	?�	?�	?�	?�	?rc
�:�|�|j�tt	td���������t	ttt	td����������dSrb)rjr��	map_asyncr�r�r'r�r�rws r�test_map_asyncz_TestPool.test_map_async�	sq�������,�,�S�$�u�R�y�y�/�/�B�B�F�F�H�H��c�#�t�E�"�I�I���7�7�8�8�	:�	:�	:�	:�	:rc�Z�|jdkr|j���ng}|j�t
dg|j|j������|�dt|����|�dg|d��|j�t
dg|j|j������|�dt|����|�
|dt��dS)Nr^�1)�callback�error_callbackrbrrfr�)r�r^r�r�r�rr,r/rjr�r�rB)rM�	call_argss  r�test_map_async_callbacksz"_TestPool.test_map_async_callbacks�	s��+/�9�	�+A�+A�D�L�%�%�'�'�'�r�	��	���C�#��%.�%5�+4�+;�	�	=�	=�=A�T�V�V�V�����C�	�N�N�+�+�+����!��i��l�+�+�+��	���C�#��%.�%5�+4�+;�	�	=�	=�=A�T�V�V�V�����C�	�N�N�+�+�+����i��l�J�7�7�7�7�7rc�Z�|jdkr-|�d�|j����Gd�dt��}|�t
��5|j�t|��gdz��ddd��dS#1swxYwYdS)Nr_r�c��eZdZd�ZdS)�*_TestPool.test_map_unplicklable.<locals>.Ac� �td���)Nz
cannot picklerrws rrpz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__�	s��"�?�3�3�3rNrrZrr�Ar��	s#������
4�
4�
4�
4�
4rr�r)	r�r�r�r r6r	r�r�r�)rMr�s  r�test_map_unplicklablez_TestPool.test_map_unplicklable�	s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J�	4�	4�	4�	4�	4��	4�	4�	4��
�
�|�
,�
,�	)�	)��I�M�M�#�����u�R�x�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�	)�	)s�&-B � B$�'B$c���	|j�tgd����t���dS#t
j$r|�d��YdSwxYw)Nrbr�r�z2pool.map_async with chunksize stalled on null list)r�r�r�r�r�r�TimeoutErrorrrws r�test_map_chunksizez_TestPool.test_map_chunksize�	sz��	L��I����R�1��5�5�9�9�(�9�K�K�K�K�K���+�	L�	L�	L��I�I�J�K�K�K�K�K�K�	L���s�;?�$A'�&A'c�D�|jdkr-|�d�|j����|�t��5|j�ttdd��d��ddd��n#1swxYwY|�t��5|j�ttdd��d��ddd��n#1swxYwY|�t��5|j�ttdd��d��ddd��n#1swxYwYGd�d��}|�t��5|j�t|��d��ddd��n#1swxYwY|�t��5|j�t|��d��ddd��dS#1swxYwYdS)	Nr^r�rbr>rr�c� �eZdZd�Zd�Zd�ZdS)�E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec��|SrrZrws r�__iter__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__�	s���rc��t�r)r�rws r�__next__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__�	s��"�"rc��dSrarZrws rr�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__�	s���qrN)rWrXrYr�r�r�rZrr�SpecialIterabler��	sA������
�
�
�
#�
#�
#�
�
�
�
�
rr�)	r�r�r�r6r�r�r�r�r�)rMr�s  r�"test_map_handle_iterable_exceptionz,_TestPool.test_map_handle_iterable_exception�	sZ���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��
�
�|�
,�
,�	G�	G��I�M�M�#�;�A�r�B�B�A�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G��
�
�|�
,�
,�	G�	G��I�M�M�#�;�A�r�B�B�A�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G��
�
�|�
,�
,�	G�	G��I�M�M�#�;�B��B�B�A�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	�	�	�	�	�	�	�	��
�
�|�
,�
,�	5�	5��I�M�M�#���0�0�!�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�|�
,�
,�	5�	5��I�M�M�#���0�0�!�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5sZ�0B�B�B�40C0�0C4�7C4�0E�E�E�*F9�9F=�F=�*H�H�Hc��|j�tdtf��}t	|j��}|�|��d��|�|jt��dS)Nr��1)	r��apply_asyncr�r�rIr�rjrhrL�rMrmr�s   r�
test_asyncz_TestPool.test_async�	sf���i�#�#�C�!�X��8�8���C�G�$�$����������#�#�#��$�$�S�[�(�;�;�;�;�;rc��|j�tdtdzf��}t	|j��}|�tj|t���|�	|j
t��dS)Nr�rr�)r�r�r�r�rIr�r6rr�rhrLr�s   r�test_async_timeoutz_TestPool.test_async_timeout�	sm���i�#�#�C�!�X��^�)<�=�=���C�G�$�$�����/�6��X��N�N�N��$�$�S�[�(�;�;�;�;�;rc
��|j�ttt	d������}|�t|��tt
ttt	d����������|j�ttt	d������}t	d��D](}|�t|��||z���)|�t|j
��|j�ttt	d����d���}t	d��D](}|�t|��||z���)|�t|j
��dS�Nrrr�r�)r��imapr�r�r'rjr�rqr6�
StopIterationr��rMrrr*s   r�	test_imapz_TestPool.test_imap�	sK��
�Y�^�^�C��e�B�i�i���
1�
1������b���4��C��e�B�i�i���(A�(A�#B�#B�C�C�C�
�Y�^�^�C��e�B�i�i���
1�
1���r���	,�	,�A����T�"�X�X�q��s�+�+�+�+����-���5�5�5�
�Y�^�^�C��e�D�k�k�!2�!2�c�^�
B�
B���t���	,�	,�A����T�"�X�X�q��s�+�+�+�+����-���5�5�5�5�5rc���|jdkr-|�d�|j����|j�t
t
dd��d��}|�t|j	��|j�t
t
dd��d��}|�t|j	��|j�t
t
dd��d��}td��D](}|�t|��||z���)|�t|j	��|j�t
t
dd��d	��}td
��D](}|�t|��||z���)|�t|j	��|j�t
t
dd��d��}td��D](}|�t|��||z���)|�t|j	��dS)Nr^r�rbr>rr�rmr�r�r�r�)
r�r�r�r�rr�r�r6r�r�r'rjrqrs   r�#test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exception�	s���9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��Y�^�^�C�!=�a��!D�!D�a�
H�
H�����,���4�4�4�
�Y�^�^�C�!=�a��!D�!D�a�
H�
H�����,���4�4�4�
�Y�^�^�C�!=�b�!�!D�!D�a�
H�
H���q���	,�	,�A����T�"�X�X�q��s�+�+�+�+����,���4�4�4��Y�^�^�C�!=�b�!�!D�!D�a�
H�
H���q���	,�	,�A����T�"�X�X�q��s�+�+�+�+����,���4�4�4�
�Y�^�^�C�!=�b�!�!D�!D�a�
H�
H���q���	,�	,�A����T�"�X�X�q��s�+�+�+�+����,���4�4�4�4�4rc
�f�|j�ttt	d������}|�t
|��ttttt	d����������|j�ttt	d����d���}|�t
|��ttttt	d����������dSr)r��imap_unorderedr�r�r'rjr�r�)rMrrs  r�test_imap_unorderedz_TestPool.test_imap_unordered
s���
�Y�
%�
%�c�4��b�	�	�?�?�
;�
;���������T�#�c�4��b�	�	�?�?�*C�*C�%D�%D�E�E�E�
�Y�
%�
%�c�4��d���+<�+<��
%�
L�
L���������T�#�c�4��d���3D�3D�*E�*E�%F�%F�G�G�G�G�Grc
�\�|jdkr-|�d�|j����|j�t
t
dd��d��}|�t|j	��|j�t
t
dd��d��}|�t|j	��|j�t
t
dd��d��}ttt
ttd��������}|�t��5td��D]<}t|��}|�||��|�|���=	ddd��n#1swxYwY|j�t
t
dd��d	��}ttt
ttd��������}|�t��5td��D]<}t|��}|�||��|�|���=	ddd��dS#1swxYwYdS)
Nr^r�rbr>rr�rmr�r�)r�r�r�r�r
r�r�r6r�r�r�r�r'rqr�rw)rMrr�expected_valuesr*rls     r�-test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exception

s����9�	�!�!��M�M�7�>�>�t�y�I�I�J�J�J��Y�
%�
%�c�&B�1�b�&I�&I�&'�)�)��	
���,���4�4�4�
�Y�
%�
%�c�&B�1�b�&I�&I�&'�)�)��	
���,���4�4�4�
�Y�
%�
%�c�&B�2�q�&I�&I�&'�)�)���s�3��U�2�Y�Y���8�8�9�9��
�
�
�|�
,�
,�	.�	.��2�Y�Y�
.�
.���R�����
�
�e�_�5�5�5��&�&�u�-�-�-�-�
.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.��Y�
%�
%�c�&B�2�q�&I�&I�&'�)�)���s�3��U�2�Y�Y���8�8�9�9��
�
�
�|�
,�
,�	.�	.��2�Y�Y�
.�
.���R�����
�
�e�_�5�5�5��&�&�u�-�-�-�-�
.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s&�A
F6�6F:�=F:�A
J!�!J%�(J%c���|jdkrtnt}|�||jd��|�||jd��|jdkr�|�d��}	|�dt
|j����|���|�	��dS#|���|�	��wxYwdS)Nr^r>rr�)
r��RemoteErrorrBr6r�rjr��_poolrr�)rM�expected_errorr�s   r�test_make_poolz_TestPool.test_make_pool.
s���)-��i�)?�)?�+�+�)�	�	
���.�$�)�R�8�8�8����.�$�)�Q�7�7�7��9�	�!�!��	�	�!���A�
�� � ��C���L�L�1�1�1����	�	�	�������������	�	�	�����������
"�!s�3(C�*C/c�0�|j�tjd�t	d��D��d���}|j���t
|jj��}|��|�|j	d��dS)Nc��g|]}d��S)r+rZr�s  rrMz,_TestPool.test_terminate.<locals>.<listcomp>?
s��3�3�3���3�3�3ri'rbr�r�)
r�r�rPr�r'r�rIr��
assertLessrL)rMr-r�s   rrz_TestPool.test_terminate=
s�����$�$��J�3�3�e�E�l�l�3�3�3�q�%����	
�	�������T�Y�^�,�,������������c�*�*�*�*�*rc�P�|�d��}|�|�tg��g��|�t	|�tg����g��|�t	|�tg����g��|�|�tg�����g��|�	��|�
��dSra)r�rjr�r�r�rr
r�r�rr�r$s  r�test_empty_iterablez_TestPool.test_empty_iterableG
s����I�I�a�L�L��������s�B����,�,�,�����a�f�f�S�"�o�o�.�.��3�3�3�����a�.�.�s�B�7�7�8�8�"�=�=�=�������S�"�-�-�1�1�3�3�R�8�8�8�	���	�	�	�	�������rc���|jdkr�ttd����}d�|D��}|�d��5}|�t
|��}|�|���|��ddd��n#1swxYwY|���|�	t|jt
|��dSdS)Nr]rc�,�g|]}t|����SrZ)r�r�s  rrMz*_TestPool.test_context.<locals>.<listcomp>V
s��*�*�*�1��A���*�*�*rr�)r�r�r'r�r�r�rjr�r�r6rB)rM�Lr.r��rs     r�test_contextz_TestPool.test_contextS
s����9��#�#��U�2�Y�Y���A�*�*��*�*�*�H����1���
4���K�K��Q�'�'��� � ������(�3�3�3�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4����
4�
4�
4�
4�
�F�F�H�H�H����j�!�+�s�A�>�>�>�>�>�$�#s�	AB�B� Bc� �td���)Nr�rrs r�_test_tracebackz_TestPool._test_traceback]
s���3���rc�D�|jdk�r�|�d��5}	|�|j��|�d��n#t
$r}|}Yd}~nd}~wwxYwddd��n#1swxYwY|���|�t|��t��|�
|jd��|j}|�t|��tjj��|�d|j��t$j���5}	|�#t$r"t+jt+j���YnwxYw	ddd��n#1swxYwY|�d|�����|�d��5}	|�t4t7dd��d��|�d��n#t
$r}|}Yd}~nd}~wwxYw|�t|��t8��|�|jd��ddd��n#1swxYwY|���dSdS)Nr]rbzexpected RuntimeError)r�z&raise RuntimeError(123) # some commentr>zexpected SayWhenError)r�r�r�rr�	Exceptionr�rDr�r	rjrR�	__cause__rr��RemoteTracebackr��tbr!rr"r��
excepthook�exc_info�getvaluer�r�r�r�)rMr�r��exc�cause�f1s      r�test_tracebackz_TestPool.test_tracebacka
sA���9��#�#����1���
7��7��G�G�D�0�1�1�1��I�I�5�6�6�6�6��!�����C�C�C�C�C�C���������
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�
�F�F�H�H�H��M�M�$�s�)�)�\�2�2�2����S�X�v�.�.�.��M�E��M�M�$�u�+�+��';�'K�L�L�L��M�M�B�E�H�M�M�M���-�-�/�/�
4�2�4��I��#�4�4�4��N�C�L�N�N�3�3�3�3�4����3�	
4�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4����
4�
4�
4�
4�

�M�M�B��+�+�-�-�
)�
)�
)����1���
3��7��E�E�#�;�A�r�B�B�A�F�F�F��I�I�5�6�6�6�6��!�����C�C�C�C�C�C����������
�
�d�3�i�i��6�6�6��
�
�c�m�T�2�2�2�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�
�F�F�H�H�H�H�H�C$�#s��A9�A�A9�
A*�A%� A9�%A*�*A9�9A=�A=�
F
�E�)E=�:F
�<E=�=F
�
F�F�I?�*H�I?�
H-�!H(�#I?�(H-�-AI?�?J�Jc� �td���)Nr9rrs r�_test_wrapped_exceptionz!_TestPool._test_wrapped_exception�
s���5�!�!�!rc� �|�d��5}|�t��5|�|j��ddd��n#1swxYwYddd��n#1swxYwY|���dSra)r�r6r	r�r-r�r$s  r�test_wrapped_exceptionz _TestPool.test_wrapped_exception�
s���
�Y�Y�q�\�\�	6�Q��"�"�<�0�0�
6�
6�����4�5�5�5�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	
�������s4�A/�A�A/�A	�A/�A	� A/�/A3�6A3c�x�tj��}|�t��5|�d��5}	|�tddg��tjd��|���|�	��nA#tjd��|���|�	��wxYw	ddd��n#1swxYwYddd��n#1swxYwY|�
tj��|z
d��dS)Nr�rrbrhg�������?)rPrQr6rBr�r�r�r�rr��
assertGreater)rM�t_startr�s   r�test_map_no_failfastz_TestPool.test_map_no_failfast�
s���.�"�"��
�
�
�z�
*�
*�	�	����1���
����E�E�/�!�Q��8�8�8��J�s�O�O�O��G�G�I�I�I��F�F�H�H�H�H���J�s�O�O�O��G�G�I�I�I��F�F�H�H�H�H����H�

�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���4�>�+�+�g�5�s�;�;�;�;�;sM�D�C.�B �#=C.� >C�C.�"D�.C2	�2D�5C2	�6D�D	�D	c��d�td��D��}d�|D��}|j�t|��~t	j��t
jt��|�	td�|D����dh��|�	tjd��dS)Nc�*�g|]}t����SrZ)r�r�s  rrMz4_TestPool.test_release_task_refs.<locals>.<listcomp>�
s��3�3�3�A�
���3�3�3rrc�6�g|]}tj|����SrZ)r@rA)rL�os  rrMz4_TestPool.test_release_task_refs.<locals>.<listcomp>�
s ��-�-�-�1���A���-�-�-rc3�*K�|]}|��V��dSrrZ)rLrEs  rr�z3_TestPool.test_release_task_refs.<locals>.<genexpr>�
s(����1�1�b�R�R�T�T�1�1�1�1�1�1rr)
r'r�r�r�rBrCrPr�r#rjr9r�r�)rM�objs�refss   r�test_release_task_refsz _TestPool.test_release_task_refs�
s���4�3��r���3�3�3��-�-��-�-�-���	�
�
�h��%�%�%��
�
�����
�5��������1�1�D�1�1�1�1�1�D�6�:�:�:�	
����2�A�6�6�6�6�6rc�h�|jdkr|�d��|�d��}|5	ddd��n#1swxYwY|�t��5|5	ddd��n#1swxYwYddd��n#1swxYwY|���dS)Nr^�test not applicable to managerrb)r�r�r�r6rBr��rMr�s  r�
test_enterz_TestPool.test_enter�
sk���9�	�!�!��M�M�:�;�;�;��y�y��|�|��
�	�	��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�
�z�
*�
*�	�	��
�
��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�	�	�����sG�A�A
�
A
�+B�.A<�0B�<B	�B�B	�B�B�Bc�~�|jdkr|�d��|�d��}|���|���t
jj|_tj
dtf��5d}tj
��ddd��dS#1swxYwYdS)Nr^r=rbz%unclosed running multiprocessing pool)r�r�r�r�r�rr��RUN�_stater	�check_warnings�ResourceWarningr�
gc_collectr>s  r�test_resource_warningz_TestPool.test_resource_warning�
s����9�	�!�!��M�M�:�;�;�;��y�y��|�|���������	�	����&�*�.���
�
+�8�/�J�L�L�	!�	!��D��� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s�B2�2B6�9B6)"rWrXrYr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrrr+r-r/r3r;r?rF�
__classcell__�r�s@rr�r�m	s�������������[��� � � � ��[� �=�=�=�
;�;�;�?�?�?�?�?�?�
:�:�:�8�8�8�)�)�)�L�L�L�5�5�5�4<�<�<�<�<�<�6�6�6�5�5�5�4H�H�H�".�".�".�H
�
�
�+�+�+�
�
�
�?�?�?�� � ��[� �$�$�$�L�"�"��[�"����<�<�<�(
7�
7�
7���� !�!�!�!�!�!�!rr�c� �td���)N�key)�KeyErrorrZrr�raisingrL�
s��
�5�/�/�rc��d�S)Nc��dS)N�*rZrZrrrrz%unpickleable_result.<locals>.<lambda>�
s��2�rrZrZrr�unpickleable_resultrP�
s
���:�rc��eZdZdZd�Zd�ZdS)�_TestPoolWorkerErrorsr�c���tjd��}dg��fd�}|�t|���}|�t
|j��|��d��|��dt
��|�	��|�
��dS)Nr�c���|�d<dSr�rZ�r(�
scratchpads �r�errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�
s����J�q�M�M�Mr�r�r)rr�r�rLr6rKr�r�r�rr�)rMr�rWrmrVs    @r�test_async_error_callbackz/_TestPoolWorkerErrors.test_async_error_callback�
s����� ��#�#���V�
�	 �	 �	 �	 �	 ��m�m�G�G�m�<�<�����(�C�G�,�,�,����
�1�
�&�&�&����j��m�X�6�6�6�	���	�	�	�	�������rc���ddlm}tjd��}t	d��D]�}dg��fd�}|�t|���}|�||j���d}|�	|��|�
�d|��|�|j��|�|j
����|���|���dS)Nr)�MaybeEncodingErrorr�rmc���|�d<dSr�rZrUs �rrWz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback�
s��� #�
�1�
�
�
rrX)�multiprocessing.poolr[rr�r'r�rPr6r�r�r��assertIsNotNoner(rlrr�)rMr[r��	iterationrWrm�wrappedrVs       @r�test_unpickleable_resultz._TestPoolWorkerErrors.test_unpickleable_result�
s���;�;�;�;�;�;�� ��#�#���r���	0�	0�I���J�
$�
$�
$�
$�
$��-�-� 3�G�-�L�L�C����0�#�'�:�:�:� ��m�G��O�O�G�$�$�$��!�!�*�Q�-�1C�D�D�D�� � ���-�-�-�� � ���/�/�/�/�	���	�	�	�	�������rN)rWrXrYrqrYrarZrrrRrR�
s7������#�M�
�
�
�����rrRc�*�eZdZdZd�Zd�Zd�Zd�ZdS)�_TestPoolWorkerLifetimer�c���tjdd���}|�dt|j����d�|jD��}g}td��D]1}|�|�t|f�����2t|��D]:\}}|�|�
��t|�����;|���d}|r\td�|jD����s>|dz}tjt��|rtd�|jD�����>d	�|jD��}|�d|��|�d|��|�t%|��t%|����|���|���dS)
Nr�r��maxtasksperchildc��g|]	}|j��
SrZ�r��rLr�s  rrMzE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>	s��1�1�1�A�!�%�1�1�1rr��2c3�>K�|]}|���V��dSr�r�ris  rr�zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>s*����#B�#B�Q�A�J�J�L�L�#B�#B�#B�#B�#B�#Brrbc��g|]	}|j��
SrZrhris  rrMzE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>s��2�2�2�Q�1�5�2�2�2r)rr�rjr�rr'r,r�r��	enumerater��_repopulate_pool�allrPr�r#r�r�r�rr�)	rMr��origworkerpidsr�r*rrm�	countdown�finalworkerpidss	         r�test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetimes���� ��R�8�8�8������C���L�L�)�)�)�1�1���1�1�1�����s���	6�	6�A��N�N�1�=�=��q�e�4�4�5�5�5�5�"�'�*�*�	0�	0�H�Q�����S�W�W�Y�Y��A���/�/�/�/�	�������	��	��#B�#B�!�'�#B�#B�#B� B� B�	���N�I��J�u�����	��#B�#B�!�'�#B�#B�#B� B� B�	�3�2�!�'�2�2�2������~�.�.�.������/�/�/����F�>�2�2�F�?�4K�4K�L�L�L�	���	�	�	�	�������rc��tjdd���}g}td��D]2}|�|�t
|df�����3|���|���t|��D]:\}}|�	|�
��t|�����;dS)Nr�rbrer�g333333�?)rr�r'r,r�r�rr�rnrjr�)rMr�r�r*rrms      r�%test_pool_worker_lifetime_early_closez=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_close#s���
� ��Q�7�7�7�����q���	9�	9�A��N�N�1�=�=��q�#�h�7�7�8�8�8�8�	���	�	�	�	������!�'�*�*�	0�	0�H�Q�����S�W�W�Y�Y��A���/�/�/�/�	0�	0rc��dD]J}|�t��5tjd|���ddd��n#1swxYwY�KdS)N)rr>rh�12r�re)r6rBrr�)rMrls  r�"test_pool_maxtasksperchild_invalidz:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalid0s���'�	@�	@�E��"�"�:�.�.�
@�
@��$�Q��?�?�?�?�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@��	@�	@s�A�A	�	A	c��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_okrj�rM�cmdr=�outr�s     r�>test_worker_finalization_via_atexit_handler_of_multiprocessingzV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessing5sG�����|�1�B�B�4��M�M���C������Q�����rN)rWrXrYrqrtrvryr�rZrrrcrcsX������#�M����:0�0�0�@�@�@�
 � � � � rrc)�BaseManager�	BaseProxyrc� �eZdZd�Zd�Zd�ZdS)�FooBarc��dS)N�f()rZrws rr�zFooBar.fNs���urc��t�r)rBrws r�gzFooBar.gPs���rc��dS)N�_h()rZrws r�_hz	FooBar._hRs���vrN)rWrXrYr�r�r�rZrrr�r�MsA����������������rr�c#�<K�td��D]	}||zV��
dSrb)r')r*s r�bazr�Us4����
�2�Y�Y������c�	�	�	�	��rc��eZdZdZd�Zd�ZdS)�
IteratorProxy)r�c��|SrrZrws rr�zIteratorProxy.__iter__[s���rc�,�|�d��S)Nr�)�_callmethodrws rr�zIteratorProxy.__next__]s�����
�+�+�+rN)rWrXrY�	_exposed_r�r�rZrrr�r�Ys7�������I����,�,�,�,�,rr�c��eZdZdS)�	MyManagerNr�rZrrr�r�`s�������Drr��Foo)�callable�Bar)r�r�)r��exposedr�)r��	proxytypec�*�eZdZdZd�Zd�Zd�Zd�ZdS)�_TestMyManagerric��tt���}|���|�|��|���|�|jjdtj	f��dS�N)�shutdown_timeoutr)
r��SHUTDOWN_TIMEOUTr��common�shutdownr��_processr�r
r�rMr^s  r�test_mymanagerz_TestMyManager.test_mymanagerlso���-=�>�>�>���
�
�������G����������
	
�
�
�g�&�/�!�f�n�_�1E�F�F�F�F�Frc���tt���}|5|�|��ddd��n#1swxYwY|�|jjdtjf��dSr�)r�r�r�r�r�r�r
rr�s  r�test_mymanager_contextz%_TestMyManager.test_mymanager_contextws����-=�>�>�>��
�	!�	!��K�K�� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�
	
�
�
�g�&�/�!�f�n�_�1E�F�F�F�F�Fs
�:�>�>c��tt���}|���|5|�|��ddd��n#1swxYwY|�|jjd��dSr�)r�r�r�r�rjr�r�r�s  r�!test_mymanager_context_prestartedz0_TestMyManager.test_mymanager_context_prestarted�s����-=�>�>�>���
�
����
�	!�	!��K�K�� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�����)�2�A�6�6�6�6�6s�A�A�Ac����|����|����|���}�fd�dD��}�fd�dD��}|�|ddg��|�|ddg��|�����d��|�t�j��|���d��d��|�t�jd��|�����d��|���
��d��|���d��d��|���d��d��|�t|��d	�td
��D����dS)Nc�4��g|]}t�|���|��SrZ�r)rLr(r9s  �rrMz)_TestMyManager.common.<locals>.<listcomp>��(���O�O�O��G�C��<N�<N�O�t�O�O�Or)r�r�r�c�4��g|]}t�|���|��SrZr�)rLr(�bars  �rrMz)_TestMyManager.common.<locals>.<listcomp>�r�rr�r�r�r�r�c��g|]}||z��SrZrZr�s  rrMz)_TestMyManager.common.<locals>.<listcomp>�s��$<�$<�$<�Q�Q�q�S�$<�$<�$<rr)
r�r�r�rjr�r6rBr�r�rr�r�r')rMr^r��foo_methods�bar_methodsr�r9s     @@rr�z_TestMyManager.common�s������k�k�m�m���k�k�m�m���k�k�m�m��O�O�O�O�(8�O�O�O��O�O�O�O�(8�O�O�O������s�C�j�1�1�1�����s�D�k�2�2�2���������%�(�(�(����*�c�e�,�,�,��������-�-�u�5�5�5����+�s���=�=�=���������%�(�(�(���������6�*�*�*��������-�-�u�5�5�5��������.�.��7�7�7�����c���$<�$<�%��)�)�$<�$<�$<�=�=�=�=�=rN)rWrXrYrqr�r�r�r�rZrrr�r�hs[������ �M�	G�	G�	G�G�G�G�7�7�7�>�>�>�>�>rr�c��tSr)�_queuerZrr�	get_queuer��s���Mrc��eZdZdZdS)�QueueManagerz$manager class used by server processN�rWrXrYr-rZrrr�r��s������.�.�.�.rr�r�c��eZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNr�rZrrr�r��s������J�J�J�Jrr��	xmlrpclibc�J�eZdZdZgd�Zedd�Zed���Zd�ZdS)�_TestRemoteManagerri)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNc���t||tt���}|���|���}|�t
|j����dS)N�rr��
serializerr�)r��
SERIALIZERr��connectr�r}r�r0�r�rr�r^rs     r�_putterz_TestRemoteManager._putter�se����W��-�/�/�/��	�������!�!�#�#��
�	�	�%��
�#�#�$�$�$�$�$rc��tjd��}ttjdf|t
t���}|���|�|j	��|�
|j|j|f���}d|_
|���t|j|t
t���}|���|���}|�|���|j��|�t*|jt.j��~dS)N� rr�r�T)r?�urandomr�r�HOSTr�r�r�r8r�r�r�rr�r�r�r�rjr�r-r6r!r}rPr�)rMr�r^r��manager2rs      r�test_remotez_TestRemoteManager.test_remote�s���*�R�.�.���"�'��+�W��-�/�/�/��	�
�
��������(�)�)�)��L�L���G�O�W�3M�L�N�N�����	���	�	�	� ��O�W��-�/�/�/��	�������"�"�$�$����������d�k�2�2�2�	
���)�U�Y��
�;�;�;�
�E�Er)	rWrXrYrqr0r-r�r�r�rZrrr�r��sa������ �M����F�
�A�A�A�Y�F��%�%��[�%�����rr��md5c�*�eZdZed���Zd�ZdS)�_TestManagerRestartc��t||tt���}|���|���}|�d��dS)Nr�r�)r�r�r�r�r�r}r�s     rr�z_TestManagerRestart._putter�s[����W��-�/�/�/��	�������!�!�#�#��
�	�	�-� � � � � rc�v�tjd��}ttjdf|t
t���}	|���}|j}|j	�
��|���|�|j
|j|f���}|���|���|���}|�|���d��~t%|d��r|���n*#t%|d��r|���wwxYwt||t
t���}	|���|�|j��dS#t*$r�}|jt,jkr�t1jd��t||t
t���}t%|d��r |�|j��Yd}~dSYd}~dSd}~wwxYw)Nr�rr�r�r�r�r)r?r�r�rr�r�r��
get_serverr�listenerrr�r�r�r�r�rjr�rr�r8�OSError�errno�
EADDRINUSErPr�)rMr�r^�srvr�addrr�rr�s        r�test_rapid_restartz&_TestManagerRestart.test_rapid_restart�s?���*�R�.�.���"�'��+�W�!�4D�F�F�F��	#��%�%�'�'�D��<�D�
�M���!�!�!��M�M�O�O�O����D�L����7Q��R�R�A�
�G�G�I�I�I�
�F�F�H�H�H��%�%�'�'�E����U�Y�Y�[�[�-�8�8�8���w�
�+�+�
#�� � �"�"�"����w�
�+�+�
#�� � �"�"�"�"�
#������'�j�-�/�/�/��
	2��M�M�O�O�O��O�O�G�,�-�-�-�-�-���
	2�
	2�
	2��w�%�*�*�*��
�J�s�O�O�O�"��g�*�!1�3�3�3�G��w�
�+�+�
2����� 0�1�1�1�1�1�1�1�1�1�
2�
2�
2�
2�
2�
2�����
	2���s%�CD4�4'E�<.F,�,
H8�6A1H3�3H8N)rWrXrYr�r�r�rZrrr�r��s>�������!�!��[�!�'2�'2�'2�'2�'2rr��c	��eZdZdZed���Zd�Zd�Zd�Zd�Z	ed���Z
edd	���Zej
ed
��d���Zej
ed
��ejejdkd
��ejedkd��ej
eed��d��d���������Zed���Zej
ed
��ejejdkd��d�����Zd�ZdS)�_TestConnectionr�c��t|jt��D]}|�|���|���dSr)r��
recv_bytes�SENTINEL�
send_bytesr)r�r�msgs   r�_echoz_TestConnection._echo"sC������2�2�	!�	!�C��O�O�C� � � � ��
�
�����rc��|���\}}|�|j|f���}d|_|���gd�}td��}|dz}t
jdttd������}|j	dkr:|�
t|�����t��|�
|�|��d��|�
|���|��|�
|�|��d��|�
|���|��|j	dk�rNt
jdd	gdz��}t|��d	gdt%|��z
zz}	|�
|�|��d��|�
|�|��t%|��|jz��|�
t|��|	��t
jdd	gdz��}d	gd
zt|��zd	gdt%|��z
zz}	|�
|�|��d��|�
|�|d
|jz��t%|��|jz��|�
t|��|	��t+td����}|�
|�|��d��	|�|��}
|�d
|
z��n8#t.j$r&}|�
|j|f��Yd}~nd}~wwxYwt5|j��}|�
|��d��|�|jd	��|�
|d��d��|�|jd	��|�
|t<��d��|�|jt<��|�d��t?j d��|�
|t<��d��|�|jd	��|�
|���d��td��dz}
|�|
��|�
|���|
��|�tB��|�"��|j	dkrv|�
|j#d��|�
|j$d��|�%tL|j��|�%tL|j��|�'��dS)Nr�T)rbr�Nr�rr*r�r]rr�r�z(                                        zexpected BufferTooShort, got %sFr>r+�Xi)(r�r�r�r�r�rrXr�r'r�rjr��filenorr�r�r�r�r��recv_bytes_into�itemsize�	bytearrayrr�BufferTooShortrRrIr�rhrLr�rPr�r�r�readable�writabler6�EOFErrorr�)rMrr�r�rRr��longmsgrY�bufferr.rmr�r��really_big_msgs              r�test_connectionz_TestConnection.test_connection(sl���9�9�;�;���j��L�L��
�*��L�?�?�����	���	�	�	��o�o���M�"�"����(���k�#�t�E�!�H�H�~�~�.�.���9��#�#����T�$�+�+�-�-�0�0�#�6�6�6�������3����.�.�.���������c�*�*�*��������-�-�t�4�4�4�������*�*�C�0�0�0��9��#�#��[��q�c�"�f�-�-�F��C�y�y�A�3�"�s�3�x�x�-�#8�8�H����T�_�_�S�1�1�4�8�8�8����T�1�1�&�9�9� ��X�X���7�
9�
9�
9����T�&�\�\�8�4�4�4��[��q�c�"�f�-�-�F��s�Q�w��c���*�a�S�F�S��X�X�4E�-F�F�H����T�_�_�S�1�1�4�8�8�8����T�1�1�&�!�f�o�:M�N�N� ��X�X���7�
9�
9�
9����T�&�\�\�8�4�4�4��u�X���/�/�F����T�_�_�W�5�5�t�<�<�<�
C��*�*�6�2�2���	�	�;�c�A�B�B�B�B��#�1�
5�
5�
5�� � ���'��4�4�4�4�4�4�4�4�����
5����
�T�Y�'�'����������'�'�'��$�$�T�\�1�5�5�5������b���5�)�)�)��$�$�T�\�1�5�5�5������h����/�/�/��$�$�T�\�8�<�<�<��	�	�$�����
�2���������h����.�.�.��$�$�T�\�1�5�5�5���������d�+�+�+��s���'7�8������'�'�'�������*�*�N�;�;�;�����!�!�!��������9��#�#����T�]�D�1�1�1����T�]�D�1�1�1����h��	�2�2�2����h���8�8�8�	�������s�2N � O�/O�Oc��|�d���\}}|�|�d��d��|�|���d��|jdkr�|�|jd��|�|jd��|�|jd��|�|jd��|�t|jd��|�t|j��|�t|j	��dSdS)NFr�rbr]Tr�)
r�rjr�r�r�r�r�r6r�r�)rM�reader�writers   r�test_duplex_falsez!_TestConnection.test_duplex_falsews�����%��0�0����������Q����.�.�.����������*�*�*��9��#�#����V�_�d�3�3�3����V�_�e�4�4�4����V�_�e�4�4�4����V�_�d�3�3�3����g�v�{�A�6�6�6����g�v�{�3�3�3����g�v�{�3�3�3�3�3�$�#rc���|���\}}|�|j|f���}d|_|���|���t
d��}|�|��|�|�	��|��|�t��|���|���dS)Nr�Tr�)r�r�r�r�r�rrr�rjr�r�r�)rMrr�r�r�s     r�test_spawn_closez _TestConnection.test_spawn_close�s��� �9�9�;�;���j��L�L��
�*��L�?�?�����	���	�	�	��������G�n�n���������������*�*�C�0�0�0�����!�!�!��
�
����	�������rc���|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)Nr]r��abcdefghijklmnopqrstuvwxyzr|r�r���r�r��rbr>r�)
r�r�r�rr�r�rjr�r6rB)rMr�rfrgs    r�test_sendbytesz_TestConnection.test_sendbytes�s���9��#�#��M�M�7�>�>�t�y�I�I�J�J�J��0�1�1���y�y�{�{���1�	���S�������������-�-�-�	���S�!�������������Q�R�R��1�1�1�	���S�!�Q�������������Q�s�U��4�4�4�	���S�"�������������r���3�3�3�	���S�"�a� � � ����������r���3�3�3����*�a�l�C��<�<�<����*�a�l�C��Q�?�?�?����*�a�l�C��Q�?�?�?����*�a�l�C��<�<�<����*�a�l�C��B�?�?�?�?�?rc��	tj|��dS#t$r!}|jtjkrYd}~dS�d}~wwxYwr?)r?�fstatr�r��EBADF)r�r�r�s   r�_is_fd_assignedz_TestConnection._is_fd_assigned�s[��	��H�R�L�L�L��4���	�	�	��w�%�+�%�%��u�u�u�u�u������	���s��
A�>�>�AFc�n�|rOtdd��D]>}|�|��s'tj|���|���?tj|��}trtj|tj	��}tj
||��tj|��dS)Nrr6)r'rr?�dup2r�r�recv_handle�msvcrt�open_osfhandler�rr)r�r�data�create_dummy_fdsr*r�s      r�_writefdz_TestConnection._writefd�s����	.��1�c�]�]�
.�
.���*�*�1�-�-�.��G�D�K�K�M�M�1�-�-�-��
�
"�4�
(�
(���	8��&�r�2�;�7�7�B�
���T����
�������r�$test needs multiprocessing.reductionc��|jdkr|�d��|�d���\}}|�|j|df���}d|_|���|�tj	tj
��ttj
d��5}|���}trtj|��}tj|||j��ddd��n#1swxYwY|���ttj
d��5}|�|���d��ddd��dS#1swxYwYdS)	Nr]�only makes sense with processesTr�sfoor��wb�rb)r�r�r�r�r
r�r�r8rr�r�r�r�r�
get_osfhandler�send_handler�r�rjr�)rMrr�r�r�r�s      r�test_fd_transferz _TestConnection.test_fd_transfer�s����9��#�#��M�M�;�<�<�<��9�9�D�9�1�1���j��L�L��
�Z��4H�L�I�I�����	���	�	�	����	�(�)�*:�;�;�;�
�)�"�D�
)�
)�	3�Q������B��
.��)�"�-�-���!�$��A�E�2�2�2�		3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�
	
������
�)�"�D�
)�
)�	/�Q����Q�V�V�X�X�v�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s%�7AD�D�D�)E=�=F�Fr-�*test semantics don't make sense on Windowsr6z)largest assignable fd number is too smallrztest needs os.dup2()c���|jdkr|�d��|�d���\}}|�|j|ddf���}d|_|���|�tj	tj
��ttj
d��5}|���}tdt��D]}|�|��sn�|�d	��t#j||��	t'j|||j��t#j|��n#t#j|��wxYw	ddd��n#1swxYwY|���ttj
d
��5}|�|���d��ddd��dS#1swxYwYdS)Nr]r
Tr�sbarr�rr6z2could not find an unassigned large file descriptorr)r�r�r�r�r
r�r�r8rr�r�r�r�r'�MAXFDrrr?rrrr�rr�rjr�)rMrr�r�r�r��newfds       r�test_large_fd_transferz&_TestConnection.test_large_fd_transfer�s<���9��#�#��M�M�;�<�<�<��9�9�D�9�1�1���j��L�L��
�Z���4N�L�O�O�����	���	�	�	����	�(�)�*:�;�;�;�
�)�"�D�
)�
)�	 �Q������B��s�E�*�*�
P�
P���+�+�E�2�2���E���	�	�N�O�O�O��G�B�����
 ��%�d�E�1�5�9�9�9��������������������	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	
������
�)�"�D�
)�
)�	/�Q����Q�V�V�X�X�v�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s=�8A.E=�'E�E=�E-�-E=�=F�F�6)G,�,G0�3G0c�T�tj|���d��dS)N�)r?rr��rMrs  r�_send_data_without_fdz%_TestConnection._send_data_without_fd
s"��
��������&�&�&�&�&rzdoesn't make sense on Windowsc�\�|jdkr|�d��|�d���\}}|�|j|f���}d|_|���|�ttj
|��|���dS)Nr]r
Tr�r�)r�r�r�r�rr�r�r6r	rrr��rMrr�r�s    r�test_missing_fd_transferz(_TestConnection.test_missing_fd_transfer
s���
�9��#�#��M�M�;�<�<�<��9�9�D�9�1�1���j��L�L�� :�*��L�O�O�����	���	�	�	����,�	�(=�t�D�D�D�	�������rc��|���\}}|5|5|�d��|�|���d��|jdkr4|�|j��|�|j��ddd��n#1swxYwYddd��n#1swxYwY|jdkrv|�|j��|�|j��|�t|j��|�t|j��dSdS�N�r])
r�r�rjr�r�r��closedr�r6r�res   rrz_TestConnection.test_context
s����y�y�{�{���1�
�	+�	+��	+�	+�
�F�F�4�L�L�L����Q�V�V�X�X�t�,�,�,��y�K�'�'�� � ���*�*�*�� � ���*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+��9��#�#��O�O�A�H�%�%�%��O�O�A�H�%�%�%����g�q�v�.�.�.����g�q�v�.�.�.�.�.�	$�#s5�B=�A=B&�B=�&B*	�*B=�-B*	�.B=�=C�CNr�)rWrXrYrqr�r�r�r�r�r�rr
rCr��
HAS_REDUCTIONrrfr�rRrrr?rrrrrZrrr�r�s������,�M�����[��
M�M�M�^4�4�4����*@�@�@�@����[���	�	�	��[�	��X���(N�O�O�/�/�P�O�/�$�X���(N�O�O��X�_�S�\�W�,�A�C�C��X�_�U�c�\�@�B�B��X�����V�,�,�/�1�1�/�/�1�1�B�B�C�C�P�O�/�4�'�'��[�'��X���(N�O�O��X�_�S�\�W�,�.M�N�N���O�N�P�O��/�/�/�/�/rr�c�\�eZdZdZd�Zd�Zejej	d��d���Z
dS)�
_TestListenerr�c���|jjD]c}|j�|���}|�|j��|�t|jj|j|���ddS)N��family)�
connection�families�Listenerr8rr6r�r)rMr(r�s   r�test_multiple_bindz _TestListener.test_multiple_bind+
sy���o�.�	1�	1�F���(�(��(�7�7�A��O�O�A�G�$�$�$����g�t��'?��i��
1�
1�
1�
1�	1�	1rc��|j���5}|j�|j��5}|���5}|�d��|�|���d��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|jdkr"|�	t|j��dSdSr �r)r+�Clientr�acceptr�rjr�r�r6r�)rMr�rr"s    rrz_TestListener.test_context2
s���
�_�
%�
%�
'�
'�	5�1���'�'��	�2�2�
5�a��X�X�Z�Z�5�1��F�F�4�L�L�L��$�$�Q�V�V�X�X�t�4�4�4�5�5�5�5�5�5�5�5�5�5�5����5�5�5�5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5��9��#�#����g�q�x�0�0�0�0�0�$�#sX� C�B0�>B�
B0�B�B0� B�!B0�$C�0B4	�4C�7B4	�8C�C�Cz"test needs abstract socket supportc��|j�d��5}|j�|j��5}|���5}|�d��|�|���d��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|jdkr"|�	t|j��dSdS)Nz
somethingr!r]r.)rMr��clientr"s    r�test_abstract_socketz"_TestListener.test_abstract_socket<
s����_�
%�
%�m�
4�
4�	5����'�'��(8�9�9�
5�V��_�_�&�&�5�!��K�K��%�%�%��$�$�Q�V�V�X�X�t�4�4�4�5�5�5�5�5�5�5�5�5�5�5����5�5�5�5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5��9��#�#����g�x��7�7�7�7�7�$�#sX� C�B1�>B�B1�B�B1�!B�"B1�%C�1B5	�5C�8B5	�9C�C�CN)rWrXrYrqr,rrCr�r�abstract_sockets_supportedr3rZrrr%r%'
sl������"�M�1�1�1�1�1�1��X���8�=�?�?�8�8�?�?�8�8�8rr%c�:�eZdZdZed���Zd�Zd�Zd�ZdS)�_TestListenerClientr�c��|j�|��}|�d��|���dS)Nr�)r)r/r�r)r�rrs   rr�z_TestListenerClient._testM
s:���~�$�$�W�-�-���	�	�'�����
�
�����rc��|jjD]�}|j�|���}|�|j|jf���}d|_|���|���}|�	|�
��d��|���|�����dS)Nr'r�Tr�)
r)r*r+r�r�rr�r�r0rjr�r�r)rMr(r�r�rs     r�test_listener_clientz(_TestListenerClient.test_listener_clientS
s����o�.�	�	�F���(�(��(�7�7�A����D�J�a�i�\��B�B�A��A�H�
�G�G�I�I�I��8�8�:�:�D����T�Y�Y�[�[�'�2�2�2�
�F�F�H�H�H�
�G�G�I�I�I�I�	�	rc���|j���}|�|j|jf���}d|_|���tjd��|�	��}|�
|���d��|���|�
��|���dS)Nr�Trbr�)r)r+r�r�rr�r�rPr�r0rjr�rr�)rMr�r�rs    r�test_issue14725z#_TestListenerClient.test_issue14725^
s����O�$�$�&�&���L�L��
�!�)��L�>�>�����	���	�	�	��
�1�
�
�
�
�x�x�z�z����������g�.�.�.��
�
����	������	���	�	�	�	�	rc��|jjD]�}|j�|���}|j�|j��}|���}|�d��|�|�d����|�	��|�	��|�	����dS)Nr'�hellorb)
r)r*r+r/rr0r�r�r�r)rM�famr�rrfs     r�test_issue16955z#_TestListenerClient.test_issue16955n
s����?�+�	�	�C���(�(��(�4�4�A���&�&�q�y�1�1�A����
�
�A�
�L�L��"�"�"��O�O�A�F�F�1�I�I�&�&�&�
�G�G�I�I�I�
�G�G�I�I�I�
�G�G�I�I�I�I�	�	rN)	rWrXrYrqr�r�r9r;r?rZrrr6r6I
s_������,�M�����[��
	�	�	���� 	�	�	�	�	rr6c�l�eZdZdZd�Zed���Zd�Zed���Zd�Z	ed���Z
d�Zd	S)
�	_TestPollr�c�N�|���\}}|�|���d��|�d��|�|���d��|�|���d��dS)NFrT)r�rjr�r�res   r�test_empty_stringz_TestPoll.test_empty_string}
s����y�y�{�{���1���������5�)�)�)�	���S������������4�(�(�(���������4�(�(�(�(�(rc��|D]+}tjd��|�|���,|���dS�Nr+)rPr�r�r)r�r�stringsrs    r�_child_stringsz_TestPoll._child_strings�
sD���	�	�A��J�s�O�O�O��O�O�A������
�
�����rc�t�d}|���\}}|�|j||f���}|���|D]U}t	d��D]}|�d��rn�|���}|�||���V|���dS)N)r=r�a�brsbyerslopr���rJ)	r�r�rGr�r'r�r�rjr�)rMrFrfrgr�rr*r's        r�test_stringsz_TestPoll.test_strings�
s���G���y�y�{�{���1��L�L�� 3�1�g�,�L�G�G��	���	�	�	��	#�	#�A��3�Z�Z�
�
���6�6�$�<�<���E�������A����Q��"�"�"�"�	�������rc�0�|�d��dSr{)r�)r�rs  r�_child_boundariesz_TestPoll._child_boundaries�
s��	
���q�	�	�	�	�	rc��|�d��\}}|�|j|f���}|���t	jd��ddg}|D]}|�|���|���|���|�	|�
��|��dS)NFr�r�sfirstssecond)r�r�rNr�rPr�r�rr�r�r�)rMrr�r�rrs      r�test_boundariesz_TestPoll.test_boundaries�
s����y�y������1��L�L�� 6�a�T�L�B�B��	���	�	�	��
�1�
�
�
�
�y�!���	�	�C�
�L�L������	���	�	�	�	�������
�
�a�l�l�n�n�a�(�(�(�(�(rc��|�d��|�d��|�d��dS)NrIrJ�cd)r�)r�rgs  r�_child_dont_mergez_TestPoll._child_dont_merge�
s>��	���T����	���T����	���U�����rc���|���\}}|�|�d��d��|�|�d��d��|�|j|f���}|���|�|���d��|�|�d��d��|�|�d��d��|�|���d��|�|�d��d��|�|�d��d��|�|�d��d��|�|���d	��|���dS)
Nr1Fr+r�rIrTrJrR)r�rjr�r�rSr�r�r�)rMrfrgr�s    r�test_dont_mergez_TestPoll.test_dont_merge�
s����y�y�{�{���1����������e�,�,�,����������e�,�,�,��L�L�� 6�a�T�L�B�B��	���	�	�	����������.�.�.����������d�+�+�+����������d�+�+�+����������.�.�.����������d�+�+�+����������d�+�+�+����������d�+�+�+����������/�/�/�	�������rN)rWrXrYrqrCr�rGrLrNrPrSrUrZrrrArAy
s�������,�M�)�)�)�����[��
�
�
�����[��
)�
)�
)�����[��
����rrArc�v�eZdZdZed���Zed���Zed���Zd�Zed���Z	d�Z
dS)	�_TestPicklingConnectionsr�c�R�ddlm}|�tj���dS)Nr)�resource_sharerr�)rrYr�rr�)r�rYs  rr�z&_TestPicklingConnections.tearDownClass�
s4��3�3�3�3�3�3����W�%9��:�:�:�:�:rc�z�|D]�}|j�|���}|�|j��|���}|�|��|���|�����t
jtj	df��}|�|�
����|���\}}|�|��|���|���|���dS)Nr'r)r)r+r�rr0r�socket�
create_serverrr��getsocknamer�)r�rr*r>r��new_connr�s       r�	_listenerz"_TestPicklingConnections._listener�
s����	�	�C���'�'�s�'�3�3�A��I�I�a�i� � � ��x�x�z�z�H��I�I�h�����N�N����
�G�G�I�I�I�I�� �-�"4�a�!8�9�9���	�	�!�-�-�/�/�"�"�"��������$��	�	�(����������	���	�	�	��	�	�����rc��t|jd��D]Z\}}|j�|��}|�|�����|����[|���\}}tj��}|�|��|�	|�����|���|���dSr)
r�r�r)r/r�r�rr[r��sendall)r�rrr�r2s     r�_remotez _TestPicklingConnections._remote�
s���"�4�9�d�3�3�	�	�N�W�c��^�*�*�7�3�3�F��K�K��	�	���$�$�$��L�L�N�N�N�N��y�y�{�{������������w�������s�y�y�{�{�#�#�#��������
�
�����rc�l�|jj}|���\}}|�|j||f���}d|_|���|���|���\}}|�|j|f���}d|_|���|���|D]�}d|z�	d��}	|�
��}
|�|
|	f��|�
��}|�|�
��|	�
������|�d��td��}	|�
��}
|�|
|	f��|�
��}g}	|�
d��}
|
sn|�|
���.d�|��}|�||	�
����|���|�d��|���|���|���|���dS)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr�r)r)r*r�r�r_r�r�rrbrr�r�rjr�rr,r�)rMr*�lconn�lconn0�lpr��rconn0�rpr>r�rr^�bufrs              r�
test_picklingz&_TestPicklingConnections.test_pickling�
s8���?�+���	�	���
��v�
�\�\���v�x�6H�\�
I�
I����	�
���
�
�
��������	�	���
��v�
�\�\���V�I�\�
>�
>����	�
���
�
�
��������	;�	;�C�3�c�9�A�A�'�J�J�C��j�j�l�l�G��J�J���~�&�&�&��z�z�|�|�H����X�]�]�_�_�c�i�i�k�k�:�:�:�:�
�
�
�4�����:�;�;���*�*�,�,��
�
�
�G�S�>�"�"�"��:�:�<�<����	��
�
�c�"�"�A��
���J�J�q�M�M�M�		�
�h�h�s�m�m������c�i�i�k�k�*�*�*�������
�
�
�4����
���
�
�
�
���
�
�
�
���	�	�	�
���	�	�	�	�	rc�(�|���}|�d��|���|���}|���}|�|dz��|���dS)N�all is wellr�)r�r�r)r�rr�rr�s     r�child_accessz%_TestPicklingConnections.child_access&so���I�I�K�K��	���}����	���	�	�	��I�I�K�K���f�f�h�h���	�	�#�a�%�����
�
�����rc��|���\}}|�|j|f���}d|_|���|���|�d���\}}|�|��|���|�|���d��|���|�d���\}}|�|��|���|�d��|���|�|���d��|�	��dS)Nr�TFr�rm�foobar�foobarfoobar)
r�r�rnr�r�rr�rjr�r�)rMrr�r�rr�s      r�test_accessz$_TestPicklingConnections.test_access2s5�� �9�9�;�;���j��L�L�� 1��
�L�F�F�����	���	�	�	��������y�y��y�&�&���1��	�	�!����	���	�	�	���������=�1�1�1�	���	�	�	��y�y��y�&�&���1��	�	�!����	���	�	�	�	���x����	���	�	�	���������j�1�1�1�	�������rN)rWrXrYrqr�r�r_rbrkrnrrrZrrrWrW�
s�������#�M��;�;��[�;�����[��$����[��,�,�,�\�	�	��[�	�����rrWc�8��eZdZdZ�fd�Z�fd�Zd�Zd�Z�xZS)�	_TestHeapr�c����t�����tjjj|_tj���tjj_dSr)r�r�rr�r��_heap�old_heap�Heap�rMr�s �rr�z_TestHeap.setUpWsG���
���
�
����'�,�:�@��
�3B�3G�3L�3L�3N�3N���*�0�0�0rc�~��|jtjj_t�����dSr)rwrr�r�rvr�r�rys �rr�z_TestHeap.tearDown]s/���37�=���*�0�
���������rc
�,�d}d}g}tjjj}d|_t|��D]�}t
tjdd��dz��}tj�|��}|�	|��t|��|krtj|��}||=~��|j5g}d}	d}
t|j�����D]H}|D]C\}}
}|�	|j�|��|
|||
z
df��|	||
z
z
}	�D�I|j���D]J\}}|D]B\}
}|�	|j�|��|
|||
z
df��|
||
z
z
}
�C�K|�|	|
zt+d�|jD������|���tt|��dz
��D]�}||dd	�\}}
}||dzdd	�\}}}||kr=|�||j|j��|�|d���p|�||����	ddd��n#1swxYwYtj|��|r|���|�|�|j|j��|�t|j��d��|�t|j��d��|�t|j��d|j��|�t|j��d��dS)
N�rjrrbr�free�occupiedc3�$K�|]}|jV��dSr�r\)rL�arenas  rr�z&_TestHeap.test_heap.<locals>.<genexpr>�s$���� F� F���� F� F� F� F� F� Frr�)rr�r�rv�_DISCARD_FREE_SPACE_LARGER_THANr'r�random�lognormvariater,r��	randranger�r��_len_to_seqr0�_arenas�index�_allocated_blocksrxrj�sum�sortr\�shufflerz�_n_frees�
_n_mallocs�_pending_free_blocks)rM�
iterations�	maxblocks�blocksr�r*r\rgrpr}r~rr�r�r��arena_blocks�narena�nstart�nstops                   r�	test_heapz_TestHeap.test_heapas���
��	����#�1�7��/0��,��z�"�"�	�	�A��v�,�Q��2�2�T�9�:�:�D��$�2�2�4�8�8�A��M�M�!�����6�{�{�Y�&�&��$�Y�/�/���1�I����Z�	3�	3��C��D��H��$�*�1�1�3�3�4�4�
)�
)��*+�)�)�&�E�5�$��J�J��� 2� 2�5� 9� 9�5�$� $�U�
�F� 4�5�5�5��T�%�Z�(�D�D�)�(,�'=�'C�'C�'E�'E�
-�
-�#��|�#/�-�-�K�E�4��J�J��� 2� 2�5� 9� 9�5�$� $�U�
�J� 8�9�9�9���e��,�H�H�-�

���T�H�_� � F� F��� F� F� F�F�F�
H�
H�
H�
�H�H�J�J�J��3�s�8�8�A�:�&�&�	
3�	
3��'*�1�v�b�q�b�z�$���t�*-�a��c�(�2�A�2�,�'�����F�?�?��$�$�T�4�<��+>�+C�D�D�D��$�$�V�Q�/�/�/�/��$�$�T�6�2�2�2�2�	
3�-	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�D	��v�����	��J�J�L�L�L��	�	
�������8�8�8�����T�6�7�7��;�;�;�����T�\�*�*�A�.�.�.�����T�3�4�4�a��9O�P�P�P�����T�-�.�.��2�2�2�2�2s�G	J�J�Jc���tj��s2tj��|�tj��tj��}|jtjg|�R�tjd��td��D]N}tj	�
d��}tj	�
d��}||_||_�OdS)Nrr|rb)rB�	isenabled�enabler8�disable�
get_threshold�
set_thresholdr'rr�r��buddy)rM�
thresholdsr*rfrgs     r�test_free_from_gcz_TestHeap.test_free_from_gc�s����|�~�~�	(��I�K�K�K��O�O�B�J�'�'�'��%�'�'�
�����(�6�:�6�6�6�6�
�������t���	�	�A��$�2�2�1�5�5�A��$�2�2�1�5�5�A��A�G��A�G�G�	�	r)	rWrXrYrqr�r�r�r�rGrHs@rrtrtSsz�������"�M�O�O�O�O�O������>3�>3�>3�@������rrtc�$�eZdZdefdefdefgZdS)�_Foor'r(�zN)rWrXrYr9r:r;�_fields_rZrrr�r��s+������	�e��	�h��	�j��
�H�H�Hrr�c�B�eZdZdZd�Zed���Zd	d�Zd�Zd�Z	dS)
�_TestSharedCTypesr�c�B�ts|�d��dSdSr*r+rws rr�z_TestSharedCTypes.setUp�r,rc�$�|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_tt	|����D]}||xxdzcc<�dSrW)rlr'r(r'r�)r�r'r(r�r9rY�stringr*s        r�_doublez_TestSharedCTypes._double�s���	���1����	���1����	���1��������
�������
�����������s�3�x�x���	�	�A���F�F�F�a�K�F�F�F�F�	�	rFc	���tdd|���}ttd|���}ttd|���}ttdd|���}|�dtt
d	����|���}|�d
d|���}td��|_|�	|j
||||||f�
��}d|_|���|�
��|�|jd��|�|jd��|�|jd��|�|jd��|�|jd��t
d	��D]!}	|�||	|	dz���"|�|jtd����dS)Nr*r�r?gUUUUUU�?r%r�r�r"rrrmr�r�T�gUUUUUU�?r&r��@�
hellohello)r
r:r;r�rWr�r'rrlr�r�r�r�r�rjrdr'r()
rMrEr'r(r�r9rYr�r�r*s
          r�test_sharedctypesz#_TestSharedCTypes.test_sharedctypes�s����#�q�t�$�$�$���(�G�$�/�/�/���*�g�D�1�1�1���D�!�Q�T�*�*�*���j�j��d�5��9�9�o�o�D�j�9�9�����C��$��/�/���W�~�~����L�L���A�q�!�S�#�v�3N�L�O�O�����	���	�	�	�	�����������"�%�%�%����q�w��0�0�0������'�*�*�*�������"�"�"����s�u�c�*�*�*��r���	0�	0�A��"�"�3�q�6�1�Q�3�/�/�/�/������u�\�':�':�;�;�;�;�;rc�2�|�d���dS)NTr?)r�rws r�test_synchronizez"_TestSharedCTypes.test_synchronize�s�����D��)�)�)�)�)rc��tddd��}t|��}d|_d|_d|_|�|jd��|�|jd��|�|jd��dS)Nr��@r%r)r�rr'r(r�rjrd)rMr9r�s   r�	test_copyz_TestSharedCTypes.test_copy�s����1�c�7�#�#���3�i�i�����������������"�"�"����s�u�c�*�*�*�������(�(�(�(�(rNr�)
rWrXrYrqr�r�r�r�r�r�rZrrr�r��sx������"�M�C�C�C�����[��<�<�<�<�.*�*�*�)�)�)�)�)rr�z&requires multiprocessing.shared_memoryc��eZdZdZed���Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Ze
jejd
kd��d���Ze
jejd
kd
��d���Zd�Zd�Zd�Zd�Zd�ZdS)�_TestSharedMemoryr�c��t|t��rtj|��}n|}||jdt|���<|���dSr)rr�r�SharedMemoryrjr�r)�shmem_name_or_obj�binary_data�	local_smss   r�!_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_writes]���'��-�-�	*�%�2�3D�E�E�I�I�)�I�+6�	�
�'�s�;�'�'�'�(��������rc�H�|ttj����zSr)r�r?r�)rM�prefixs  r�
_new_shm_namez_TestSharedMemory._new_shm_name	s����B�I�K�K�(�(�(�(rc�X��|�d��}tj|dd���}|�|j��|�|j|��|�|jd��|�t|j
��|j��|�|jt|����|�t|j��t|����d|j
d<|�|j
dd��tj|��}|�|j
dd��|�
��tj|d|jz���}|�|jd|jz��|�
��|�t ��5tjdd	���ddd��n#1swxYwY|�t ��5tjd
���ddd��n#1swxYwYt"j�d��5}tj�|�d
��|�d��g}�fd�|D��}||_tjdd���}|�|j��|�|j|d��||_tjdd���}|�|j��|�|j|d��ddd��n#1swxYwYtjr�|�d��}	tj|	dd���}
|�t0��5	|�|
jd��tj|	��}|���|�
��|
�
��|
���n#|
���wxYw	ddd��n#1swxYwY|�t2��5tj|dd���}ddd��n#1swxYwYtjrWGd�dtj��}
|
|��}|�|j|j��|�
��|�t0��5tjd��}|���ddd��n#1swxYwY|�
��dS)N�test01_tsmbT���creater\rOrrmr����F�r��,multiprocessing.shared_memory._make_filename�	test01_fn�	test02_fnc���g|]}�|z��SrZrZ�rLr(�NAME_PREFIXs  �rrMz?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp><����:�:�:�D�[�4�'�:�:�:rrb�test01_dblunlinkr|c�,�eZdZejejzZdS)�O_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rWrXrYr?r��O_RDWR�_flagsrZrr�OptionalAttachSharedMemoryr�qs��������b�i�/���rr��test01_notthere)r�rr�r8r�rjr(rr\r�rjr�r�rrr6rBrC�mock�patch�_SHM_NAME_PREFIX�side_effect�_name�
_USE_POSIX�FileNotFoundError�FileExistsError)rM�	name_tsmb�sms�also_sms�same_sms�mock_make_filename�names�shm1�shm2�name_dblunlink�sms_uno�sms_duo�there_can_only_be_one_smsr��ok_if_exists_sms�nonexisting_smsr�s                @r�test_shared_memory_basicsz+_TestSharedMemory.test_shared_memory_basicss�����&�&�}�5�5�	��(��4�c�J�J�J������
�#�#�#�	
�����9�-�-�-������#�.�.�.�����C�G���c�h�7�7�7�	
�
�
�c�h��C���)�)�)��
�
�c�#�(�m�m�S��X�X�.�.�.�����
��������R�(�(�(�!�-�i�8�8�������a��"�-�-�-�������!�-�i�b���k�J�J�J������
�r�#�(�{�3�3�3��������
�
�z�
*�
*�	=�	=��&�d��<�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=��
�
�z�
*�
*�	5�	5��&�e�4�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�]�
 �
 �:�<�<�	3�?Q�'�8�K��'�'��4�4�d�6H�6H��6U�6U�V�E�;�:�:�:�E�:�:�:�E�-2��*� �-�T��B�B�B�D��O�O�D�K�(�(�(����T�Z��q��2�2�2�-2��*� �-�T��B�B�B�D��O�O�D�K�(�(�(����T�Z��q��2�2�2�#	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�&�#�	%�"�/�/�0B�C�C�N�#�0�������G�
�"�"�#4�5�5�

%�

%�	%��+�+�G�L�$�?�?�?�+�8��H�H�G��N�N�$�$�$��M�M�O�O�O��M�M�O�O�O��N�N�$�$�$�$��G�N�N�$�$�$�$����$�

%�

%�

%�

%�

%�

%�

%�

%�

%�

%�

%����

%�

%�

%�

%��
�
��
/�
/�	�	�)6�(B����)�)�)�%�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��#�	%�
0�
0�
0�
0�
0�]�-G�
0�
0�
0�9�9�)�D�D�����-�2�C�H�=�=�=��"�"�$�$�$��
�
�0�
1�
1�	%�	%�+�8�9J�K�K�O��"�"�$�$�$�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	�	�	�����s��+H�H�H�3I�I�I�?C5N�N�N�R�A+Q�
R�Q5�5R�R	�R	�*S�S�S�)V�V�Vc�`��tj�d��5}tj�|�d��|�d��g}�fd�|D��}||_tjdd���}|�|j	��|�
|j|d��||_tjdd���}|�|j	��|�
|j|d��ddd��dS#1swxYwYdS)	Nr��	test03_fn�	test04_fnc���g|]}�|z��SrZrZr�s  �rrMzA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>�r�rTrbr�r)rCr�r�rr�r�r�r�r8r�rjr�)rMr�r�r�r�r�s     @r�test_shared_memory_recreatez-_TestSharedMemory.test_shared_memory_recreatesg����]�
 �
 �:�<�<�	3�?Q�'�8�K��'�'��4�4�d�6H�6H��6U�6U�V�E�;�:�:�:�E�:�:�:�E�-2��*� �-�T��B�B�B�D��O�O�D�K�(�(�(����T�Z��q��2�2�2�-2��*� �-�T��B�B�B�D��O�O�D�K�(�(�(����T�Z��q��2�2�2�#	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s�C5D#�#D'�*D'c��|�t��5tjdd���}ddd��n#1swxYwY|�t��5tjdd���}ddd��n#1swxYwY|�t��5tjd���}ddd��dS#1swxYwYdS)NTr>r�rr�)r6rBrr�)rM�sms_invalids  r�"test_invalid_shared_memory_crationz4_TestSharedMemory.test_invalid_shared_memory_cration�s���
�
�
�z�
*�
*�	K�	K�'�4�D�r�J�J�J�K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K��
�
�z�
*�
*�	J�	J�'�4�D�q�I�I�I�K�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J����	J�	J�	J�	J��
�
�z�
*�
*�	B�	B�'�4�D�A�A�A�K�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�	B�	Bs3�>�A�A�#B�B
�
B
�+C�C�Cc	�`�ttjdz��D�]}|�|���5t	jdd���}|�|j��d|jdd�<tj	||�	��}tj
|��}|�|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��ddd��n#1swxYwY��dS)Nrb��protoTr�r��picklerr���protocolsnewvalsoldval)r'�pickle�HIGHEST_PROTOCOLr�rr�r8r�rj�dumps�loadsr�rjr(r�)rMr�r��pickled_sms�sms2s     r�"test_shared_memory_pickle_unpicklez4_TestSharedMemory.test_shared_memory_pickle_unpickle�sL���6�2�Q�6�7�7�	B�	B�E����E��*�*�
B�
B�#�0��3�G�G�G������
�+�+�+�(����!���%�l�3��?�?�?���|�K�0�0���%�%�d�M�,F�G�G�G�� � ���4�9�5�5�5�� � ��s�w�q��s�|�!4�!4�i�@�@�@�� � ��t�x��!��}�!5�!5�y�A�A�A� )����!���� � ��s�w�q��s�|�!4�!4�i�@�@�@�� � ��t�x��!��}�!5�!5�y�A�A�A� )����1��
�� � ��s�w�q��s�|�!4�!4�i�@�@�@�� � ��t�x��!��}�!5�!5�y�A�A�A�-
B�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B����
B�
B�
B�
B��	B�	Bs�GH!�!H%	�(H%	c���ttjdz��D]�}|�|���5t	jdd���}d|jdd�<tj||�	��}|���|�	��|�
t��5tj|��ddd��n#1swxYwYddd��n#1swxYwY��dS)
Nrbr�Tr�r�r�rr�r�)
r'r�r�r�rr�rjr�rr�r6r�r�)rMr�r�r�s    r�.test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_object�sc���6�2�Q�6�7�7�	.�	.�E����E��*�*�
.�
.�#�0��3�G�G�G��(����!���$�l�3��?�?�?���	�	�����
�
�����&�&�'8�9�9�.�.��L��-�-�-�.�.�.�.�.�.�.�.�.�.�.����.�.�.�.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.����
.�
.�
.�
.��	.�	.s6�A;C(�0C�C(�C�C(�C�C(�(C,	�/C,	c��tjdd���}|�|j��|�|j|jdf���}d|_|���|�	��|�
t|jdd���d��|�|j|df���}d|_|���|�	��|�
t|jdd���d��|�
��dS)NTr�r�showdyr�r|sHELLO)rr�r8r�r�r�r(r�r�r�rjr�rjr)rMr�r�s   r�#test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processes�s%���(��3�?�?�?������
�#�#�#�
�L�L��9��(�H�%�
�
�
�����	���	�	�	�	����������s�w�r��r�{�+�+�X�6�6�6�
�L�L��9��x��
�
�
�����	���	�	�	�	����������s�w�r��r�{�+�+�X�6�6�6��	�	�����rr$z#not feasible in non-posix platformsc�0�tj���}|���|�td����}t
j|jj	tj��|�td����}|�t��5t
jt
j��tj��ddd��n#1swxYwY|���dSrb)r�managers�SharedMemoryManagerr��
ShareableListr'r?rr�r�r
r�r6r�r�r�)rM�smm�sl�sl2s    r�4test_shared_memory_SharedMemoryServer_ignores_sigintzF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigint�s
���&�:�:�<�<���	�	�����
�
�u�R�y�y�
)�
)��
	���� �&�-�0�0�0�����b�	�	�*�*���
�
�0�
1�
1�	0�	0��G�B�I�K�K���/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	�������s�:1C7�7C;�>C;zresource_tracker is posix onlyc��d}tjj�d|��\}}}|�|��dS)Nz�if 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r{)r!rr|r}r�r~s     r�>test_shared_memory_SharedMemoryManager_reuses_resource_trackerzP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_tracker�sG�����|�1�B�B�4��M�M���C��	
��������rc���tj����|�t��5��d���ddd��n#1swxYwY�����fd�tdd��D��}�fd�tddd	��D��}tj	|d
j
j���}|�t|��d��tj|d
j���}|�t|j��d��|d
j}����t"jdkrG|�t&��5tj|���}ddd��n#1swxYwYtj���5}|�	d
��}|�d���}	|j
j}ddd��n#1swxYwYt"jdkrJ|�t&��5tj	|���}
ddd��dS#1swxYwYdSdS)Nrmr�c�T��g|]$}��t|������%SrZ)rr')rLr*�smm1s  �rrMzS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>s-���D�D�D���"�"�5��8�8�,�,�D�D�Drr|rc�<��g|]}��|�����S)r�)r�)rLrrs  �rrMzS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>s*���G�G�G�a��!�!�q�!�)�)�G�G�Grr���r�r(r-�howdy)rrrr6rBr�r�r'rr�shmr(rjr�rrjr�r�rRr�)rM�lol�lom�doppleganger_list0�doppleganger_shm0�	held_name�
absent_shm�smm2r
r�	absent_slrs           @r�-test_shared_memory_SharedMemoryManager_basicsz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicssh����'�;�;�=�=��
�
�
�z�
*�
*�	&�	&����1��%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&��
�
����D�D�D�D�e�A�r�l�l�D�D�D��G�G�G�G�5��S�"�3E�3E�G�G�G��*�8�c�!�f�j�o�N�N�N������/�0�0�!�4�4�4�)�6�C��F�K�H�H�H������$5�$9� :� :�B�?�?�?���F�K�	��
�
�����<�7�"�"��"�"�#4�5�5�
H�
H�*�7�Y�G�G�G�
�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H����
H�
H�
H�
H��
%�
9�
9�
;�
;�	$�t��#�#�G�,�,�B��#�#��#�-�-�C����I�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$��<�7�"�"��"�"�#4�5�5�
H�
H�)�7�Y�G�G�G�	�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H����
H�
H�
H�
H�
H�
H�#�"sG�A�A!�$A!�F2�2F6�9F6�8H�H#�&H#�I7�7I;�>I;c���tjgd���}|�|jj��|�|jjt|����|�tt|����t|����|�	t��5|dddd��n#1swxYwY|�	t��5d|d<ddd��n#1swxYwY|�d��}d|d<|�||�d����|�|j
d��|�t|��d��tj��5tjd��|�	t$��5|�d��ddd��n#1swxYwY|�|�d	��d
��ddd��n#1swxYwY|�|dd��|�|dd��|�t)|��d��d
|d
<|�|d
d
��d|d<|�|dd��|�|j
d��|�t$d��5d|d<ddd��n#1swxYwY|�|dd��d|d<|�|dd��|�|dd��|�t$d��5d|d<ddd��n#1swxYwY|�|dd��|�t$d��5d|d<ddd��n#1swxYwY|�|dd��tj��5tjd��|�|�d
��d��|�|�d��d��|�|�d��d��ddd��n#1swxYwY|�d��}tj||���}	|�|jj|jj��|�||jj��|�t|��t|����|�|j
|j
��d|d<|�|dd��|�|dd��|j���|j���n#|j���wxYwtj|jj���}|�|jj|jj��d|d<|�|dd��|j���|j���tj��}	|�t|��d��|�|j
d��|�|�d��d��|�	t$��5|�d��ddd��n#1swxYwY|j���|j���dS#|j���wxYw) N)r�HoWdYgX9��vq�r�NTrOr�r�rrz8s8sdqxxxxxx?xxxxxxxx?q�ignore�100r�r�r�TrO�somer�z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrbr"u	encodéess	123456789sadios�test03_duplicater�Mr>ipr��any)rrr8rr�r�r(r�r�r6�
IndexError�_get_packing_formatrjr�r��warnings�catch_warnings�simplefilterrBr�r�r:r�r�r�r)rMr
�current_format�name_duplicate�sl_copy�sl_tethered�empty_sls       r�'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basics2s[	��
�
(�>�>�>�
�
��	
�����
�&�&�&�	
�
�
�b�f�k�3�r�7�7�+�+�+��
�
�c�$�r�(�(�m�m�S��W�W�-�-�-��
�
�z�
*�
*�	�	��q�E�E�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
�
�z�
*�
*�	�	��B�q�E�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��/�/��2�2����1�������)?�)?��)B�)B�C�C�C�	
�����$=�>�>�>�	
����R���!�$�$�$��
$�
&�
&�	/�	/��!�(�+�+�+��"�"�:�.�.�
 �
 ��������
 �
 �
 �
 �
 �
 �
 �
 �
 �
 �
 ����
 �
 �
 �
 ����R�X�X�c�]�]�A�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	
����A���(�(�(�����B���&�&�&�	
����"�I�I�>�	
�	
�	
���1������A���#�#�#���1������A���'�'�'������$7�8�8�8�
�
#�
#�J�$?�A�A�	#�	#�"�B�q�E�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�	
����A���'�'�'���1������A��
�+�+�+�����A���)�)�)�
�
#�
#�J�$?�A�A�	 �	 ��B�q�E�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	
����A���)�)�)�
�
#�
#�J�$?�A�A�	!�	!� �B�q�E�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	
����A���)�)�)��
$�
&�
&�	4�	4��!�(�+�+�+����R�X�X�b�\�\�1�-�-�-����R�X�X�h�/�/��3�3�3����R�X�X�h�/�/��3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4��+�+�,>�?�?���-�b�~�F�F�F��
	!�������W�[�-=�>�>�>����^�W�[�-=�>�>�>����T�"�X�X�t�G�}�}�5�5�5����R�Y���7�7�7��G�B�K����W�R�[�"�-�-�-�����2���+�+�+��K�������K��� � � � ��G�K��� � � � ����$�1�r�v�{�C�C�C��������k�o�&:�;�;�;���B������B���%�%�%��������
�������!�.�0�0��	"����S��]�]�A�.�.�.����X�_�b�1�1�1����X�^�^�E�2�2�A�6�6�6��"�"�:�.�.�
%�
%����t�$�$�$�
%�
%�
%�
%�
%�
%�
%�
%�
%�
%�
%����
%�
%�
%�
%��L��� � � ��L���!�!�!�!�!��H�L���!�!�!�!���s��:	C�C�C�4D�D
�
D
�%/H6�G6�*H6�6G:	�:H6�=G:	�>,H6�6H:�=H:�L&�&L*�-L*�%N7�7N;�>N;�9P�P�P�BS!�!S%�(S%�C0X"�"X=�0B_�1^�_�^�_�^�_�_-c�B�ttjdz��D�]}|�|���5t	jtd����}|�|jj��tj	||���}tj
|��}|�|tj��|�|dd��|�
||��d|d<|�|dd��d	|d
<|�|d
d	��t	jtd����}|�|jj��tj	||���}|�t|��t|����|j���|j���|j���ddd��n#1swxYwY��dS)Nrbr�rr�r>rm�changedr��newvaluer�i�)r'r�r�r�rrr8rr�r�r�r�rj�assertIsNotr�r)rMr�r
�
serialized_sl�deserialized_sl�	larger_sl�serialized_larger_sls       r�)test_shared_memory_ShareableList_picklingz;_TestSharedMemory.test_shared_memory_ShareableList_pickling�s!���6�2�Q�6�7�7�	�	�E����E��*�*�
�
�"�0��r���;�;�������
�.�.�.� &��R�%� @� @� @�
�"(�,�}�"=�"=���%�%�#�]�%@�B�B�B�� � ���!4�a�8�8�8�� � ��_�5�5�5�%.���"�� � ��A��	�2�2�2�"��1��� � ���!3�Z�@�@�@�)�7��c�
�
�C�C�	����	�
� 4�5�5�5�'-�|�I��'N�'N�'N�$�� � ��]�!3�!3�S�9M�5N�5N�O�O�O��
�#�#�%�%�%��#�)�)�+�+�+��������/
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	�	s�GH�H	�H	c��ttjdz��D]�}|�|���5t	jtd����}tj||���}|j���|j�	��|�
t��5tj|��ddd��n#1swxYwYddd��n#1swxYwY��dS)Nrbr�rr�)
r'r�r�r�rrr�rrr�r6r�r�)rMr�r
r8s    r�5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_object�sY���6�2�Q�6�7�7�	0�	0�E����E��*�*�

0�

0�"�0��r���;�;�� &��R�%� @� @� @�
����������
�
�����&�&�'8�9�9�0�0��L��/�/�/�0�0�0�0�0�0�0�0�0�0�0����0�0�0�0�

0�

0�

0�

0�

0�

0�

0�

0�

0�

0�

0����

0�

0�

0�

0��	0�	0s6�BC1�9C�C1�C�C1�!C�"C1�1C5	�8C5	c��d}tjtjdd|gtjtj���5}|j���������}|�	��|�
��tj��tjz}d}tj��|krftj|��t!|dzd��}	t#j|d�	��}n#t&$rYn*wxYwtj��|k�ft)d
���t*jdkrYt/jd|��d
��|j������}|�d|��ddd��dS#1swxYwYdS)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�r|Fr�zJA 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�r��PIPEr��readline�strip�decoder�r/rPrQrr�r��minrr�r�r�r?r(r%�
unregisterr�r�r�)rMrr�r(�deadlinerTr	r�s        r�4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_termination�s��	���
�s�~�t�T�3�?�%/�_�%/�_�6�6�6�%	J�9:��8�$�$�&�&�,�,�.�.�5�5�7�7�D�
�K�K�M�M�M�
�F�F�H�H�H��~�'�'�'�*>�>�H��A��.�"�"�X�-�-��
�1�
�
�
���!��Q�K�K���'�4�T�%�H�H�H�C�C��(�����E������.�"�"�X�-�-�%�&K�L�L�L��w�'�!�!�!�+�J��J�J��H�H�H�
�h�m�m�o�o�,�,�.�.���
�
�D�EH�J�J�J�G%	J�%	J�%	J�%	J�%	J�%	J�%	J�%	J�%	J�%	J�%	J�%	J����%	J�%	J�%	J�%	J�%	J�%	Js7�CG�D�G�
D'�$G�&D'�'BG�G
�
G
N)rWrXrYrqr2r�r�r�r�r�rrrrCrfr?r(rrr r3r<r>rKrZrrr�r��sd������#�M�����\��)�)�)�n�n�n�`3�3�3�,B�B�B�B�B�B�4
.�
.�
.����8�X�_�R�W��'�)N�O�O���P�O��.�X�_�R�W��'�)I�J�J���K�J��(H�H�H�<o"�o"�o"�b���60�0�0�0J�0J�0J�0J�0Jrr�c�@�eZdZdZd�Zd�Zed���Zd�Zd�Z	dS)�
_TestFinalizer�c��tj���|_tj���dSr)r�_finalizer_registryr�registry_backuprnrws rr�z_TestFinalize.setUps4��#�7�<�<�>�>���� �&�&�(�(�(�(�(rc��tj��|�tj��tj�|j��dSr)rBrCr�rrO�updaterPrws rr�z_TestFinalize.tearDown
sD��
�
��������1�2�2�2�� �'�'��(<�=�=�=�=�=rc��Gd�dt��}|��}tj||jd���~t	j��|��}tj||jd���}|��|��~t	j��|��}tj||jd���|��}tj||jdd�	��|��}tj||jd
d�	��|��}	tj|	|jdd�	��|��}
tj|
|jd
d�	��tjd|jdd�	��tjd|jdd�	��tj��|���tj	d��dS)Nc��eZdZdS)�)_TestFinalize._test_finalize.<locals>.FooNr�rZrrr�rU��������Drr�)rfr�)rg)r)�d10rb)rR�exitpriority)�d01r)�d02)�d03)r�i����)�STOPi����)
r r�Finalizer�rBrC�_exit_functionrr?�_exit)r�rr�rfrg�close_brrWrYrZr[s           r�_test_finalizez_TestFinalize._test_finalizes���	�	�	�	�	�&�	�	�	�
�C�E�E���
�a����0�0�0�0�
�
�
�����C�E�E���-��4�9�6�:�:�:����	�	�	���	�	�	�
�
�
�����C�E�E���
�a����0�0�0�0��c�e�e���
�c�4�9�8�!�D�D�D�D��c�e�e���
�c�4�9�8�!�D�D�D�D��c�e�e���
�c�4�9�8�!�D�D�D�D��c�e�e���
�c�4�9�8�!�D�D�D�D��
�d�D�I�F��E�E�E�E��
�d�D�I�I�D�I�I�I�I�	
������
�
����
�������rc�:�|���\}}|�|j|f���}d|_|���|���d�t
|jd��D��}|�|gd���dS)Nr�Tc��g|]}|��SrZrZ)rLrs  rrMz/_TestFinalize.test_finalize.<locals>.<listcomp>?s��9�9�9�#�#�9�9�9rr\)rfrgrWr[rZrYr�)	r�r�rar�r�r�r�r�rj)rMrr�r�r-s     r�
test_finalizez_TestFinalize.test_finalize7s����9�9�;�;���j��L�L�� 3�:�-�L�H�H�����	���	�	�	�	������9�9��d�i��!8�!8�9�9�9������!L�!L�!L�M�M�M�M�Mrc������	�d��G�fd�dt���d�	d���	fd�}���	fd�}tj��}tj��}	tjd��tjddd��tj|�	��tj|�	��g}tj
|��5tjd
��d�	ddd��n#1swxYwY����	tj|��tj|�tj
��dS#tj|��tj|�tj
��wxYw)Nc��dSrrZrZrr�cbz,_TestFinalize.test_thread_safety.<locals>.cbD����Drc���eZdZ�fd�ZdS)�-_TestFinalize.test_thread_safety.<locals>.Fooc�j��||_tj|�tjdd�����dS)Nrbr�)rX)rArr]r��randint)rMrgs �rrNz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__Hs3�������
�d�B�V�^�A�s�5K�5K�L�L�L�L�L�LrN)rWrXrYrN)rgs�rr�rjGs5�������
M�
M�
M�
M�
M�
M�
Mrr�Fc����sZtjtj��dz��	tj��n#t
$r}|�Yd}~nd}~wwxYw��XdSdSrE)rPr�r�r�_run_finalizersr!)r�r(�finishs ��r�run_finalizersz8_TestFinalize.test_thread_safety.<locals>.run_finalizersPs�����
��
�6�=�?�?�T�1�2�2�2���(�*�*�*�*�� �����C�C�C�C�C�C���������
�
�
�
�
�
s�A�
A�A�Ac����i}�sc	�fd�td��D��|tjd��<n-#t$r }|�|���Yd}~nd}~wwxYw��adSdS)Nc�$��h|]}�����
SrZrZ)rLr*r�s  �r�	<setcomp>zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>bs���/I�/I�/I�!�����/I�/I�/Irrr|)r'r��getrandbitsr!rn)r"r�r�r(ros  ���r�make_finalizersz9_TestFinalize.test_thread_safety.<locals>.make_finalizers[s�����A��
��0J�/I�/I�/I�u�R�y�y�/I�/I�/I�A�f�(��+�+�,�,�� �����C��G�G�I�I�I�I�I�I�I�I����������
�
�
�
�
s�08�
A"�A�A"g���ư>r|r�r�T)r r��getswitchintervalrBr��setswitchintervalr�r�rpr�
start_threadsrPr�rC)
rMrpru�old_interval�
old_thresholdr_r�rgr(ros
      @@@@r�test_thread_safetyz _TestFinalize.test_thread_safetyBs�������	�	�	�	M�	M�	M�	M�	M�	M�	M�&�	M�	M�	M�����		�		�		�		�		�		�
	�
	�
	�
	�
	�
	�
	��,�.�.���(�*�*�
�
	��!�$�'�'�'���Q��1�%�%�%� �'�~�>�>�>� �'��?�?�?�A�G�!�/��8�8�
�
��
�3������
�
�
�
�
�
�
�
�
�
�
����
�
�
�
����	��
�!�,�/�/�/���m�,�,��J�L�L�L�L�L��
�!�,�/�/�/���m�,�,��J�L�L�L�L���s1�A(D'�=C �D'� C$�$D'�'C$�(D'�'7EN)
rWrXrYrqr�r�r�rardr{rZrrrMrMst������"�M�)�)�)�>�>�>�
�%�%��[�%�N	N�	N�	N�4�4�4�4�4rrMc��eZdZd�Zd�ZdS)�_TestImportStarc�t�ddl}tj�tj��}tj�|�|��d��}|�|��}d�|D��}d�|D��}|�d��|�	d��|S)Nrz*.pyc��g|]J}tj�tj�|��d��d��KS)rbr)r?r��splitext�split)rLr�s  rrMz4_TestImportStar.get_module_names.<locals>.<listcomp>�s@��K�K�K��2�7�#�#�B�G�M�M�!�$4�$4�Q�$7�8�8��;�K�K�Krc��g|]}d|z��S)zmultiprocessing.rZ)rLr�s  rrMz4_TestImportStar.get_module_names.<locals>.<listcomp>�s��;�;�;�a�%��)�;�;�;rzmultiprocessing.__init__r)
�globr?r��dirnamer�__file__r��escaperwr,)rMr��folder�pattern�files�moduless      r�get_module_namesz _TestImportStar.get_module_namess������������!9�:�:���'�,�,�t�{�{�6�2�2�F�;�;���	�	�'�"�"��K�K�U�K�K�K��;�;�7�;�;�;�����1�2�2�2����(�)�)�)��rc�b�|���}tjdkr@|�d��|�d��|�d��n1|�d��ts|�d��t
�|�d��|D]z}t
|��tj|}|�t|d��|��|j
D]+}|�t||��|�d|�����,�{dS)	Nr-zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z does not have attribute )r�r�rRrwr#r9rr�r�rr�)rMr�r(�mod�attrs     r�test_importz_TestImportStar.test_import�s@���'�'�)�)���<�7�"�"��N�N�7�8�8�8��N�N�=�>�>�>��N�N�>�?�?�?�?��N�N�>�?�?�?� �
C����A�B�B�B��=��N�N�9�:�:�:��		�		�D��t�����+�d�#�C��O�O�G�C��3�3�T�:�:�:���
�
������C��&�&�7:�s�s�D�D�A�����
�		�		rN)rWrXrYr�r�rZrrr}r}}s2������	�	�	�����rr}c�4�eZdZdZd�Zed���Zd�ZdS)�_TestLoggingr�c� �tj��}|�tj��|�|du��|�d��|�d��|�t��dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGr��debug�info�	LOG_LEVEL)rM�loggers  r�test_enable_loggingz _TestLogging.test_enable_logging�sx�� �+�-�-�������(�(�(�����d�*�+�+�+����/�0�0�0����O�$�$�$����	�"�"�"�"�"rc�z�tj��}|�|�����dSr)rr�r��getEffectiveLevel)r�rr�s   r�_test_levelz_TestLogging._test_level�s4�� �+�-�-���	�	�&�*�*�,�,�-�-�-�-�-rc��d}d}tj��}tj��}|j}tjd���\}}|�|��|�|j|f���}|�	��|�
||�����|���|�
��|�tj��|�|��|�|j|f���}|�	��|�
||�����|���|�
��|�|��|�t���dS)Nr��%Fr�r�)�level)rr��logging�	getLoggerr�r�r�r�r�r�rjr�r�r�NOTSETr�)	rM�LEVEL1�LEVEL2r��root_logger�
root_levelr�r�r�s	         r�
test_levelz_TestLogging.test_level�sm������ �+�-�-���'�)�)�� �&�
�(�-�U�;�;�;������������L�L�� 0��y�L�A�A��	���	�	�	����������/�/�/�	������	���	�	�	������'�'�'����V�$�$�$��L�L�� 0��y�L�A�A��	���	�	�	����������/�/�/�	������	���	�	�	����Z�(�(�(����i��(�(�(�(�(rN)rWrXrYrqr�r�r�r�rZrrr�r��sR������"�M�#�#�#��.�.��[�.�)�)�)�)�)rr�c�p�eZdZdZed���Zejee	d��d��d���Z
dS)�_TestPollEintrr�c�l�tjd��tj|tj��dSrE)rPr�r?rr
�SIGUSR1)r�r�s  r�_killerz_TestPollEintr._killer�s)���
�3����
���V�^�$�$�$�$�$rr��requires SIGUSR1c����dg��fd�}tj��}tjtj|��}	|�|j|f���}|���	|�tjd���}|���|�	��|�	��n#|�	��wxYw|�
�d��|�|jd��tjtj|��dS#tjtj|��wxYw)NFc���d�d<dS)NTrrZ)rR�
got_signals �r�recordz._TestPollEintr.test_poll_eintr.<locals>.record�s��� �J�q�M�M�Mrr�)r�r)
r?r�r
r�r�r�r�rPr�r�r�rjr�)rMr�r��
oldhandler�killerr�r�s      @r�test_poll_eintrz_TestPollEintr.test_poll_eintr�s%����W�
�	!�	!�	!�	!�	!��i�k�k���]�6�>�6�:�:�
�	6��\�\���S�F�\�C�C�F��L�L�N�N�N�
��L�L��
��L�>�>�����	�	�	����������
�
�
�
�����
�
�
�
�����O�O�J�q�M�*�*�*����Q�Z��+�+�+��M�&�.�*�5�5�5�5�5��F�M�&�.�*�5�5�5�5���s$�1D=�/A	C
�8D=�
C#�#9D=�=!EN)rWrXrYrqr�r�rCr�rr
r�rZrrr�r��sk������"�M��%�%��[�%��X������3�3�5G�H�H�6�6�I�H�6�6�6rr�c�B�eZdZejed��d���ZdS)�TestInvalidHandle�skipped on Windowsc�*�tj�d��}	|���n#tt
f$rYnwxYwd|_n#d|_wxYw|�tt
ftjjd��dS)Ni�M�r>)rr)�
Connectionr�rBr��_handler6rs  r�test_invalid_handlesz&TestInvalidHandle.test_invalid_handless����)�4�4�X�>�>��	 ��I�I�K�K�K�K���G�$�	�	�	��D�	����
 �D�L�L��4�D�L��������:�w�/�)�4�?��	E�	E�	E�	E�	Es&�6�A�A
�A�	A
�
A�	AN)rWrXrYrCrf�WIN32r�rZrrr�r�sB�������X�_�U�0�1�1�E�E�2�1�E�E�Err�c��eZdZd�Zd�ZdS)�	OtherTestc��Gd�dt��}|�tjtjj|��d��dS)Nc��eZdZd�Zd�ZdS)�FOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc��dS)N�something bogusrZ�rMr\s  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytes's��)�)rc��dSrrZ�rMrs  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytes)����rN)rWrXrYr�r�rZrr�_FakeConnectionr�&s2������
*�
*�
*�
�
�
�
�
rr��abc)r r6r�AuthenticationErrorr)�deliver_challenge�rMr�s  r�#test_deliver_challenge_auth_failurez-OtherTest.test_deliver_challenge_auth_failure%sk��	�	�	�	�	�f�	�	�	�
	
���/�=�)�4�F�)�/�+�+�V�	5�	5�	5�	5�	5rc��Gd�dt��}|�tjtjj|��d��dS)Nc� �eZdZd�Zd�Zd�ZdS)�EOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc��d|_dSr�)r�rws rrNzNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__1s
����
�
�
rc�x�|xjdz
c_|jdkrtjjS|jdkrdSdS)Nrbr�r�r)r�rr)�	CHALLENGEr�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytes3s>���
�
�a��
�
��:��?�?�*�5�?�?��Z�1�_�_�-�-��src��dSrrZr�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytes:r�rN)rWrXrYrNr�r�rZrrr�r�0sA������
�
�
�
�
�
�
�
�
�
�
rr�r�)r r6rr�r)�answer_challenger�s  r�"test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failure/sk��	�	�	�	�	�f�	�	�	�	
���/�=�)�4�E�)�/�+�+�V�	5�	5�	5�	5�	5rN)rWrXrYr�r�rZrrr�r�"s2������5�5�5�5�5�5�5�5rr�c�&�|xjdz
c_dSra)r!)�nss r�initializerr�Ds���G�G�q�L�G�G�G�Grc�&�eZdZd�Zd�Zd�Zd�ZdS)�TestInitializersc��tj��|_|j���|_d|j_dSr�)r�Manager�mgrr�r�r!rws rr�zTestInitializers.setUpIs4��"�*�,�,����(�$�$�&�&��������rc�j�|j���|j���dSr)r�r�r�rws rr�zTestInitializers.tearDownNs)�����������
�
�����rc�V�tj���}|�t|jd��|�t|jf��|�|jj	d��|�
��|���dSra)rr�SyncManagerr6�	TypeErrorr�r�r�rjr!r�r�)rMr�s  r�test_manager_initializerz)TestInitializers.test_manager_initializerRs����$�0�0�2�2�����)�Q�W�a�0�0�0�	����d�g�Z�(�(�(�������q�)�)�)�	�
�
����	�������rc�&�|�ttjd���tjdt|jf��}|���|���|�|jj	d��dS)Nrb)r�)
r6r�rr�r�r�rr�rjr!r$s  r�test_pool_initializerz&TestInitializers.test_pool_initializerZsr�����)�_�%9�q��I�I�I�� ��K�$�'��<�<��	���	�	�	�	������������q�)�)�)�)�)rN)rWrXrYr�r�r�r�rZrrr�r�GsP���������
������*�*�*�*�*rr�c�`�	|�d���}dS#tj$rYdSwxYw)NF)�block)r�r�r�)r~�items  r�_this_sub_processr�fsB��
��u�u�5�u�!�!������=�
�
�
����
���s��-�-c���tj��}tjt|f���}d|_|���|���dSr")rrr�r�r�r�r�)r�subProcs  r�
_test_processr�lsM���!�#�#�E��%�->�e�X�N�N�N�G��G�N��M�M�O�O�O��L�L�N�N�N�N�Nrc��||zSrrZr�s r�_afuncr�sr�rc��tjd���}|�tgd���}|���|���dS)Nr�r�)rbr�r�r�r|r�r�)rr�r�r�rr�)r�r's  r�pool_in_processr�vsM����!�,�,�,�D�����.�.�.�/�/�A��J�J�L�L�L��I�I�K�K�K�K�Krc�6�eZdZd�Zed���Zd�Zd�ZdS)�
_file_likec�"�||_d|_dSr)�	_delegate�_pid)rM�delegates  rrNz_file_like.__init__}s��!�����	�	�	rc�h�tj��}||jkr||_g|_|jSr)r?r�r��_cacher�s  r�cachez_file_like.cache�s0���i�k�k���$�)����D�I��D�K��{�rc�:�|j�|��dSr)r�r,r�s  rrz_file_like.write�s���
���$�����rc�x�|j�d�|j����g|_dS)Nr�)r�rr�r�r�rws r�flushz_file_like.flush�s1������R�W�W�T�Z�0�0�1�1�1�����rN)rWrXrYrN�propertyr�rr�rZrrr�r�|s\�������������X�� � � �����rr�c� �eZdZd�Zd�Zd�ZdS)�TestStdinBadfiledescriptorc��tjt���}|���|���dS�Nr�)rr�r�r�r�)rMrts  r�test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_process�s3���&�m�<�<�<���
�
�����	�	�����rc��tjt���}|���|���dSr)rr�r�r�r�r$s  r�test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_process�s3���#�?�;�;�;��	���	�	�	�	�������rc���tj��}t|�����d��t	j�fd����}����|���dksJ�dS)Nr9c�,������Sr)r�)�flikes�rrrz:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>�s���e�k�k�m�m�rr�)ryrzr�rrr�r�r')rM�siortr	s   @r�
test_flushingz(TestStdinBadfiledescriptor.test_flushing�st����k�m�m���3����
���E�����&�.C�.C�.C�.C�D�D�D��
���
�
�
��|�|�~�~��&�&�&�&�&�&rN)rWrXrYrrrrZrrrr�sA���������
���
'�'�'�'�'rrc�~�eZdZed���Zd
d�Zed���Zd
d�Zd�Zd�Z	d�Z
ed	���Zd
�Zd�Z
dS)�TestWaitc��td��D]T}|r(tjtj��dz��|�|tj��f���U|���dS)Nrr+)r'rPr�r�r�r?r�r)r�r��slowr*s    r�_child_test_waitzTestWait._child_test_wait�sk���r���	%�	%�A��
0��
�6�=�?�?�3�.�/�/�/�
�F�F�A�r�y�{�{�#�$�$�$�$�	���	�	�	�	�	rFc�"��ddlm}g}g�g}td��D]�}tjd���\}}tj|j||f���}d|_|���|�	��|�
|����
|��|�|j����|rs||��D]e}	|�
��}	|�
|	���-#t$r,|�|��|�	��Y�bwxYw|�s|���t#�fd�td	��D����}
|�||
��dS)
Nrr.r�Fr�r�Tc3�4�K�|]}�D]
}||jfV���dSrrh)rLr*r�rUs   �rr�z%TestWait.test_wait.<locals>.<genexpr>�s6�����G�G���G�G�A�1�a�e�*�G�G�G�G�G�G�Grr)�multiprocessing.connectionr/r'rr�r�rr�r�rr,r8r�r�r�rwr�r�rj)rMrr/�readers�messagesr*rr�r�r�r.rUs           @r�	test_waitzTestWait.test_wait�s����3�3�3�3�3�3��������q���	$�	$�A�"�'�u�5�5�5�D�A�q��'�t�/D�A�t�9�U�U�U�A��A�H�
�G�G�I�I�I�
�G�G�I�I�I��N�N�1�����L�L��O�O�O��O�O�A�F�#�#�#�#��	)��T�'�]�]�
)�
)��)��&�&�(�(�C�
�O�O�C�(�(�(�(��	 �����N�N�1�%�%�%��G�G�I�I�I�I�I�����	�	)�	�
�
�����G�G�G�G�e�B�i�i�G�G�G�G�G������8�,�,�,�,�,s�D�3D8�7D8c�L�tj��}|�|��td��D]W}|r(tjtj��dz��|�d|z�d�����X|���dS)Nrr+�%s
rd)	r[r�r'rPr�r�rarr)r�rrrr*s     r�_child_test_wait_socketz TestWait._child_test_wait_socket�s����M�O�O��	�	�	�'�����r���	4�	4�A��
0��
�6�=�?�?�3�.�/�/�/�
�I�I�v��z�)�)�'�2�2�3�3�3�3�	���	�	�	�	�	rc��ddlm}tjtjdf��}|���}g}g}i}td��D]i}tj	|j
||f���}	d|	_|	���|�
|	��|�|	j���jtd��D]3}|���\}
}|�
|
��g||
<�4|���|rl||��D]^}
|
�d��}|s*|�|
��|
����C||
�
|���_|�ld�d�td	��D�����d
��}
|���D]+}|�d�|��|
���,dS)Nrr.r�r�Tr�r�c3� K�|]	}d|zV��
dS)rNrZr�s  rr�z,TestWait.test_wait_socket.<locals>.<genexpr>�s&����9�9�!�6�A�:�9�9�9�9�9�9rrrdr)rr/r[r\rr�r]r'rr�rr�r�r,r8r�r0rr�rwrr0rj)rMrr/r�r�rrU�dicr*r�rr�r�r.�vs               r�test_wait_socketzTestWait.test_wait_socket�s���3�3�3�3�3�3�� �-�"4�a�!8�9�9���}�}�����������q���	$�	$�A��'�t�/K�.2�D�\�;�;�;�A��A�H�
�G�G�I�I�I��L�L��O�O�O��O�O�A�F�#�#�#�#��q���	�	�A��8�8�:�:�D�A�q��N�N�1�����C��F�F�	���	�	�	��	'��T�'�]�]�
'�
'���f�f�R�j�j���'��N�N�1�%�%�%��G�G�I�I�I�I���F�M�M�#�&�&�&�&��	'��7�7�9�9�u�R�y�y�9�9�9�9�9�@�@��I�I�������	4�	4�A����S�X�X�a�[�[�(�3�3�3�3�	4�	4rc�0�|�d��dSr,)rrws r�test_wait_slowzTestWait.test_wait_slow�s�����t�����rc�0�|�d��dSr,)rrws r�test_wait_socket_slowzTestWait.test_wait_socket_slow�s�����d�#�#�#�#�#rc�2�ddlm}d}tj��\}}t	j��}|||g|��}t	j��|z
}|�|g��|�||dz��|�||dz��|�	d��t	j��}|||gd��}t	j��|z
}|�||g��|�|d��dS)Nrr.r|r�rhrm皙�����?)
rr/rr�rPrQrjrr1r�)rMr/r.rfrgr�rmrs        r�test_wait_timeoutzTestWait.test_wait_timeouts��3�3�3�3�3�3����#�%�%���1��� � ���d�A�q�6�8�$�$���� � �5�(������b�!�!�!�����x�!�|�,�,�,����5�(�S�.�1�1�1�	���t������ � ���d�A�q�6�2������ � �5�(������q�c�"�"�"�����s�#�#�#�#�#rc�V�|���tj|��dSr)rBrPr�)r�rQ�periods   r�signal_and_sleepzTestWait.signal_and_sleeps%�����
�
�
��
�6�����rc�.�ddlm}d}d�}tjd��}tj��\}}tj|j||f���}|���|�|j	t��|�|�d�����tj��}|||j	|g|dz��}	tj��|z
}
|�|	|j	g��|�|
|dz��|�|
|dz
��|�d��tj��}|||j	|gd��}	tj��|z
}
|�||	��||j	|g����|�|
d	��|�d��tj��}|||j	|gd��}	tj��|z
}
|�||	��|||j	|g����|�|
d	��|���|���dS)
Nrr.r�c�&�t|d����S)Nc� �t|��Sr)r)r�s rrrz>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>!s��B�q�E�E�r)rJ)r�)r�s rrrz,TestWait.test_wait_integer.<locals>.<lambda>!s��F�1�/�/�:�:�:�rr�rmr�r�r$)rr/rrTr�r�r(r�r�r7rr�rArPrQrjrr1r�r�r�)rMr/r.�sorted_rQrfrgr�r�rmrs           r�test_wait_integerzTestWait.test_wait_integersk��3�3�3�3�3�3���:�:���'��*�*���#�%�%���1��#�4�+@�*-�x��
:�
:�
:��	
���	�	�	����a�j�#�.�.�.�������B��/�/�0�0�0��� � ���d�A�q�z�1�%�x�"�}�5�5���� � �5�(������q�z�l�+�+�+�����x�!�|�,�,�,����5�(�Q�,�/�/�/�	���t������ � ���d�A�q�z�1�%�r�*�*���� � �5�(����������w�w��
�A��'?�'?�@�@�@�����s�#�#�#�	���t������ � ���d�A�q�z�1�%�r�*�*���� � �5�(����������w�w��1�:�q�/A�'B�'B�C�C�C�����s�#�#�#�	���
�
�
�	�������rc�T�ddlm}tj��\}}t	j��}||gd���}t	j��|z
}|�|g��|�|d��|���|���dS)Nrr.r>r�rb)	rr/rr�rPrQrjrr)rMr/rfrgrTrms      r�test_neg_timeoutzTestWait.test_neg_timeoutHs���3�3�3�3�3�3��#�%�%���1��N�����d�A�3��#�#�#���N���q� ������b�!�!�!�����1����	���	�	�	�	���	�	�	�	�	rNr�)rWrXrYr�rrrrr r"r%r(r-r/rZrrr
r
�s�����������[��-�-�-�-�<����[��!4�!4�!4�!4�F���$�$�$�$�$�$�.����[��)�)�)�V	�	�	�	�	rr
c�v�eZdZejed��d���Zejed��d���ZdS)�TestInvalidFamilyr�c��|�t��5tj�d��ddd��dS#1swxYwYdS)Nz\\.\test�r6rBrr)r+rws r�test_invalid_familyz%TestInvalidFamily.test_invalid_familyYs���
�
�
�z�
*�
*�	=�	=��&�/�/��<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=�� A�A�Az skipped on non-Windows platformsc��|�t��5tj�d��ddd��dS#1swxYwYdS)Nz/var/test.piper3rws r�test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32^s���
�
�
�z�
*�
*�	B�	B��&�/�/�0@�A�A�A�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�	B�	Br5N)	rWrXrYrCrfr�r4r�r7rZrrr1r1Wso�������X�_�U�0�1�1�=�=�2�1�=��X��� B�C�C�B�B�D�C�B�B�Brr1c�@�eZdZed���Zed���Zd�ZdS)�	TestFlagsc�^�|�ttj����dSr)r�r�r��flags�r�rs  r�run_in_grandchildzTestFlags.run_in_grandchildhs$���	�	�%��	�"�"�#�#�#�#�#rc��ddl}tjd���\}}tj|j|f���}|���|���}|���|���|���ttj��|f}t|�
|����dS)NrFr�r�)�jsonrr�r�r=r�r�r�rr�r�r;�printr�)r�r?rr�r��grandchild_flagsr;s       r�run_in_childzTestFlags.run_in_childls��������#�5�1�1�1���1��#�3�+@��t�L�L�L��	���	�	�	��6�6�8�8��	������	���	�	�	�	���	�	�	��s�y�!�!�#3�4��
�d�j�j���� � � � � rc���ddl}d}tjtjdddd|g��}|�|�d����\}}|�||��dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()r@z-Sz-Or{rd)r?rB�check_outputr�r�r�rGrj)rMr?�progr�child_flagsrAs      r�
test_flagszTestFlags.test_flagsysv������+���&�
�^�T�4��t�T�:�<�<��(,�
�
�4�;�;�w�3G�3G�(H�(H�%��%�����&6�7�7�7�7�7rN)rWrXrYr�r=rBrGrZrrr9r9gsW�������$�$��[�$��
!�
!��[�
!�8�8�8�8�8rr9c�*�eZdZed���Zd�ZdS)�TestTimeoutsc��tjd��|�d��|���tj�|��}|�d��|���dS)Nrbr�r�)rPr�r�rrr)r/)r��childrrs    r�
_test_timeoutzTestTimeouts._test_timeout�sa���
�1�
�
�
�
�
�
�3����
���
�
�
��)�0�0��9�9���	�	�#�����
�
�����rc��tj��}	tjd��tjd���\}}tj�d���}tj|j||j	f���}|�
��|���|�|�
��d��|���|���}|�|�
��d��|���|���t|��tj|��dS#tj|��wxYw)	Nr+Tr��AF_INETr'r�r�r�)r[�getdefaulttimeout�setdefaulttimeoutrr�r)r+r�rLrr�rrjr�r0r#)rM�old_timeout�parentrKr�r�rs       rrzTestTimeouts.test_timeout�sB���.�0�0��	2��$�S�)�)�)�+�0��=�=�=�M�F�E��*�3�3�9�3�E�E�A��'�t�/A�.3�Q�Y�-?�A�A�A�A�
�G�G�I�I�I��K�K�M�M�M����V�[�[�]�]�C�0�0�0��L�L�N�N�N��8�8�:�:�D����T�Y�Y�[�[�#�.�.�.��J�J�L�L�L�
�G�G�I�I�I���O�O�O��$�[�1�1�1�1�1��F�$�[�1�1�1�1���s�EE0�0FN)rWrXrYr�rLrrZrrrIrI�s<����������[��2�2�2�2�2rrIc��eZdZd�ZdS)�TestNoForkBombc�8�tj��}tj�tj�t��d��}|dkrWtjj	�
||��\}}}|�|d��|�d|��dStjj	�
||��\}}}|�|���d��|�|d��dS)Nzmp_fork_bomb.pyr_rsRuntimeErrors123)rrQr?r�r�r�r�r!rr|�assert_python_failurerjr�r}r�)rMrSr(r=r�r�s      r�test_noforkbombzTestNoForkBomb.test_noforkbomb�s���
�
-�
/�
/���w�|�|�B�G�O�O�H�5�5�7H�I�I��
��<�<��<�5�K�K�D�RT�U�U�L�B��S����S�#�&�&�&��M�M�/�3�/�/�/�/�/��<�5�F�F�t�R�P�P�L�B��S����S�Z�Z�\�\�6�2�2�2����S�#�&�&�&�&�&rN)rWrXrYrWrZrrrTrT�s#������
'�
'�
'�
'�
'rrTc�*�eZdZed���Zd�ZdS)�TestForkAwareThreadLockc�B�|dkrXtj|j|dz
|f���}|���|���t|��n,|�ttj	����|���dS)Nrbr�)
rr�rKr�rr#r�r�r�_afterfork_registry)r�rxrr�s    rrKzTestForkAwareThreadLock.child�s���q�5�5��'�s�y��!��T�{�K�K�K�A�
�G�G�I�I�I��J�J�L�L�L���O�O�O�O��I�I�c�$�2�3�3�4�4�4��
�
�����rc��tjd��\}}tj��}t	tj��}tj|jd|f���}|���|�	��|�
��}t|��|�||��dS)NFr|r�)
rr�r�ForkAwareThreadLockr�r[r�rKr�rr�r#�assertLessEqual)rMrr�r��old_sizer��new_sizes       rrFz!TestForkAwareThreadLock.test_lock�s����#�E�*�*���1��$�&�&���t�/�0�0���#�4�:�Q��F�C�C�C��	���	�	�	�	���	�	�	��6�6�8�8���Q�������X�x�0�0�0�0�0rN)rWrXrYr�rKrFrZrrrYrY�s>������
����[��	1�	1�	1�	1�	1rrYc�6�eZdZd�Zd�Zed���Zd�ZdS)�TestCloseFdsc�H�tr%tj�����Stj�����}g}|dkr/|�|��t	j|��}|dk�/|D]}t	j|���|S)Nrj)r�r[�detachr,r?�dupr)rMr��to_closer's    r�get_high_socket_fdzTestCloseFds.get_high_socket_fd�s����	��=�?�?�)�)�+�+�+�����'�'�)�)�B��H��r�'�'�����#�#�#��V�B�Z�Z���r�'�'��
�
����������Irc��tr?tjtjtj|������dStj|��dS)N)r�)r�r[rN�SOCK_STREAMrr?)rMr�s  rrzTestCloseFds.close�sI���	��M�&�.�&�*<�R�H�H�H�N�N�P�P�P�P�P��H�R�L�L�L�L�Lrc��	tj|tjtj��}|���|�d��dS#t$r }|�|��Yd}~dSd}~wwxYwr)r[�fromfdrNrirr�r!)r�rr�rr�s     r�_test_closefdszTestCloseFds._test_closefds�s}��	��
�b�&�.�&�2D�E�E�A�
�G�G�I�I�I��I�I�d�O�O�O�O�O��	�	�	�	��I�I�a�L�L�L�L�L�L�L�L�L�����	���s�*A�
B�!A<�<Bc�b�tstjd���tj��\}}|���}	tj|j||f���}|���|�	��|�
��}t|��|�	|��|�	��|�	��nB#|�	|��|�	��|�	��wxYwtj��dkr|�
|d��dSd}|�|t��|�|jt"jkp
|j|k|��dS)Nzrequires fd picklingr�r_i6')r#rCrDrr�rgr�rlr�rr�r#rQrDr�r�r�r�r�winerror)rMr�r�r�r�r��WSAENOTSOCKs       r�test_closefdzTestCloseFds.test_closefd�sz���	<��#�$:�;�;�;�(�-�/�/����
�
$�
$�
&�
&��
	��'�t�/B�.4�b�\�;�;�;�A�
�G�G�I�I�I��L�L�N�N�N����
�
�A���O�O�O��J�J�r�N�N�N��L�L�N�N�N��L�L�N�N�N�N��
�J�J�r�N�N�N��L�L�N�N�N��L�L�N�N�N�N�����+�-�-��7�7��M�M�!�T�"�"�"�"�"��K��!�!�!�W�-�-�-��O�O�A�G�u�{�2�6��J�+�5�q�
:�
:�
:�
:�
:s
�A(C-�-?D,N)rWrXrYrgrr�rlrprZrrrbrb�s\���������$�������[��:�:�:�:�:rrbc��eZdZeejej��Zed���Z	e
jee
d��d��d���Zed���Ze
jee
d��d��d���ZdS)�TestIgnoreEINTRc��d�}tjtj|��|�d��|���}|�|��|�d|jz��dS)Nc��dSrrZ�r��frames  rr
z-TestIgnoreEINTR._test_ignore.<locals>.handler"rhr�ready�x)r
r�r�r�r��
CONN_MAX_SIZE)r�rr
r's    r�_test_ignorezTestIgnoreEINTR._test_ignore ss��	�	�	��
�f�n�g�.�.�.��	�	�'�����I�I�K�K���	�	�!��������s�0�0�1�1�1�1�1rr�r�c��tj��\}}	tj|j|f���}d|_|���|���|�|���d��tj
d��tj|j
tj��tj
d��|�d��|�|���d��tj
d��tj|j
tj��|�|���d|jz��tj
d��|���|���dS#|���wxYw)Nr�Trwr+i�rx)rr�r�rzr�r�rrjr�rPr�r?rr�r
r�r�r�ryr�rs    r�test_ignorezTestIgnoreEINTR.test_ignore*sd��*�/�1�1���j�	��'�t�/@�.8�]�<�<�<�A��A�H�
�G�G�I�I�I����������T�Y�Y�[�[�'�2�2�2��J�s�O�O�O��G�A�E�6�>�*�*�*��J�s�O�O�O��I�I�d�O�O�O����T�Y�Y�[�[�$�/�/�/��J�s�O�O�O��G�A�E�6�>�*�*�*����T�_�_�.�.��t�7I�0I�J�J�J��J�s�O�O�O�
�F�F�H�H�H��J�J�L�L�L�L�L��D�J�J�L�L�L�L���s�FF:�:Gc�>�d�}tjtj|��tj���5}|�|j��|���}|�d��ddd��dS#1swxYwYdS)Nc��dSrrZrus  rr
z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerCrhr�welcome)r
r�rr)r+r�rr0)r�rr
r�rfs     r�_test_ignore_listenerz%TestIgnoreEINTR._test_ignore_listenerAs���	�	�	��
�f�n�g�.�.�.�
�
'�
0�
0�
2�
2�	�a��I�I�a�i� � � ����
�
�A�
�F�F�9����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�AB�B�Bc��tj��\}}	tj|j|f���}d|_|���|���|���}tj	d��tj|jtj��tj	d��tj�|��}|�|���d��|���|���dS#|���wxYw)Nr�Tr+r)rr�r�r�r�r�rr�rPr�r?rr�r
r�r)r/rjr�)rMrr�r�rr2s      r�test_ignore_listenerz$TestIgnoreEINTR.test_ignore_listenerKs��*�/�1�1���j�	��'�t�/I�.8�]�<�<�<�A��A�H�
�G�G�I�I�I��������i�i�k�k�G��J�s�O�O�O��G�A�E�6�>�*�*�*��J�s�O�O�O�$�/�6�6�w�?�?�F����V�[�[�]�]�I�6�6�6�
�F�F�H�H�H��J�J�L�L�L�L�L��D�J�J�L�L�L�L���s�DD4�4E
N)rWrXrY�maxr�
PIPE_MAX_SIZE�
SOCK_MAX_SIZEryr�rzrCr�rr
r|r�r�rZrrrrrrs��������C��-�w�/D�E�E�M��2�2��[�2��X������3�3�5G�H�H���I�H��,����[���X������3�3�5G�H�H���I�H���rrrc�B�eZdZed���Zd�Zd�Zd�Zd�Zd�Z	dS)�TestStartMethodc�R�|�tj����dSr)r�rrQr<s  r�_check_contextzTestStartMethod._check_context_s#���	�	�/�2�4�4�5�5�5�5�5rc��|�d���\}}|�|j|f���}|���|���|���}|���|���|�||�����dS)NFr�r�)	r�r�r�r�rr�r�rjrQ)rMr4rr�r��child_methods      r�
check_contextzTestStartMethod.check_contextcs����x�x�u�x�%�%���1��K�K�t�2�!��K�>�>��	���	�	�	�	���	�	�	��v�v�x�x��	���	�	�	�	����������s�';�';�'=�'=�>�>�>�>�>rc��dD]�}	tj|��}n#t$rY�$wxYw|�|���|��|�|���|��|�t|jd��|�t|jd��|�|����dS)N�r_rHr�rH)	rr5rBrjrQrDr6�set_start_methodr�)rM�methodr4s   rrzTestStartMethod.test_contextms���5�		$�		$�F�
�%�1�&�9�9�����
�
�
���
�������S�1�1�3�3�V�<�<�<��M�M�#�/�/�+�+�S�1�1�1����j�#�*>��H�H�H����j�#�*>��E�E�E����s�#�#�#�#�		$�		$s��
(�(c�v�tjt��d}tj��}	dD�]<}	tj|d���n#t
$rY�'wxYw|�tj��|��tj��}|�|���|��|�t|��j
����|����|�|j
j
����|����|�t��|dz
}��>	tj|d���n#tj|d���wxYw|�|d��dS)Nrr�T��forcerb)r�set_forkserver_preload�PRELOADrQr�rBrjr5r�r�rW�lower�
startswithr�r�r)rMr��
old_methodr�r4s     r�test_set_getzTestStartMethod.test_set_getys����.�w�7�7�7���$�5�7�7�
�	E�9�
�
���#�4�V�4�H�H�H�H�H��!�����H������ � ��!A�!C�!C�V�L�L�L�%�1�3�3��� � ��!5�!5�!7�!7��@�@�@�����S�	�	� 2� 8� 8� :� :� E� E�f� M� M�N�N�N�����K�(�.�.�0�0�;�;�F�C�C�E�E�E��"�"�?�3�3�3���
���
�
�,�Z�t�D�D�D�D�D��O�,�Z�t�D�D�D�D�D��������q�)�)�)�)�)s/�F�A
�F�
A�F�A�DF�F c���tj��}tjdkr|�|dg��dS|�|ddgkp|ddgkp|gd�kp|gd�k��dS)Nr-rHr_r�)rHr_r�)r�get_all_start_methodsr�rRrjr�)rM�methodss  r�test_get_allzTestStartMethod.test_get_all�s���!�7�9�9���<�7�"�"����W�w�i�0�0�0�0�0��O�O�G���'8�8�G�#���'8�8�G�#�'F�'F�'F�F�G�$�'F�'F�'F�F�
H�
H�
H�
H�
Hrc�(�tj��dkr|�d��tj�tj�t��d��}tj	j
�|��\}}}|���}|���}|�
��dks|dkr5t|��t|��|�d��dSdS)Nr�z*test only relevant for 'forkserver' methodz
mp_preload.py�okr�z(failed spawning forkserver or grandchild)rrQr�r?r�r�r�r�r!rr|r}rGr�r@r)rMr(r=r�r�s     r�test_preload_resourcesz&TestStartMethod.test_preload_resources�s����+�-�-��=�=��M�M�F�G�G�G��w�|�|�B�G�O�O�H�5�5��G�G���|�1�B�B�4�H�H���C���j�j�l�l���j�j�l�l���:�:�<�<�4���3�"�9�9��#�J�J�J��#�J�J�J��I�I�@�A�A�A�A�A�$-�9rN)
rWrXrYr�r�r�rr�r�r�rZrrr�r�^s��������6�6��[�6�?�?�?�
$�
$�
$�*�*�*�,H�H�H�
B�
B�
B�
B�
Brr�rc�N�eZdZd�Zd�Zd�Zd�Zd�Zed���Z	d�Z
d�Zd	S)
�TestResourceTrackerc���d}tjD�]�}|�|���5|dkr
	ddd���-tj��\}}tjtjdd|�	||���g|gt
j
���}tj|��t|dd	�
��5}|�
������d��}|�
������d��}ddd��n#1swxYwYt!||��|���|���t'j��t*jz}	t'j��|	kr�t'jd��	t!||��nH#t0$r;}
|�|
jt4jt4jf��Yd}
~
n2d}
~
wwxYwt'j��|	k��t;d
|�d����|j����d��}|j���d�	|��}|� ||��|� |d|z��ddd��n#1swxYwY���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)�noopr@r{)r�r))�pass_fdsr�rT)r�rdrhzA 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'r�r?�piperBrCr�r�r�rDrr�rEr�rGr*r�r/rPrQrr�r�r�r�r��ENOENT�EINVALr�r�r�r�)
rMrr)rr�r�r��name1�name2rJr�r�r.s
             r�test_resource_trackerz)TestResourceTracker.test_resource_tracker�s�����<&�4�&	P�&	P�E����E��*�*�%
P�%
P��F�?�?��%
P�%
P�%
P�%
P�%
P�%
P�%
P��w�y�y���1��$�c�n�%)�4����a�u��1M�1M�&O�/0�c�,6�O�=�=�=���������!�T�4�0�0�0�B�A��J�J�L�L�/�/�1�1�8�8��A�A�E��J�J�L�L�/�/�1�1�8�8��A�A�E�B�B�B�B�B�B�B�B�B�B�B����B�B�B�B�!���.�.�.����
�
�
��������>�+�+�g�.B�B���n�&�&��1�1��J�r�N�N�N��(���6�6�6�6��"�����
�
�a�g���e�l�/K�L�L�L����������	����	�n�&�&��1�1�)�0�U�0�0�0�1�1�1��h�m�m�o�o�,�,�W�5�5������ � � �&�&,�f�!�'#�'#��� � ��h�/�/�/�� � ��&F��&N�O�O�O�K%
P�%
P�%
P�%
P�%
P�%
P�%
P�%
P�%
P�%
P�%
P����%
P�%
P�%
P�%
P��&	P�&	Psh�K#�BK#�=A3D<�0K#�<E�K#�E�BK#�G�K#�
H!�&1H�K#�H!�!B6K#�#K'	�*K'	c��ddlm}|j}|�@tj|t
j��tj|t
j���tj
��5tjd��|���ddd��n#1swxYwY|j}tj||��tjd��tjd��}tj
d���5}tjd	��|���}|���|���t)j|��}~t-j��|�|����|r�|�t5|��d
��|d}	|�t9|	jt<����|�dt?|	j ��v��n#|�t5|��d��ddd��dS#1swxYwYdS)Nr��_resource_tracker)r�r#rrHT)r��alwaysrbzresource_tracker: process died)!� multiprocessing.resource_trackerr�r�r?rr
rr�wait_processr+r,r-r�rPr�rr5rTrArBr@rArBrCr�rjr�r��
issubclass�category�UserWarningr��message)
rMr��
should_dier�r�r4�all_warnrQrE�the_warns
          r�check_resource_tracker_deathz0TestResourceTracker.check_resource_tracker_death�s���	G�F�F�F�F�F��$���?��G�C���(�(�(�� �����?�?�?�?�
�
$�
&�
&�	/�	/��!�(�+�+�+��,�,�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/� �$��
���V�����
�3�����)�'�2�2��
�
$�D�
1�
1�
1�	3�X��!�(�+�+�+��-�-�/�/�C��K�K�M�M�M��K�K�M�M�M���S�!�!�B���J�L�L�L����b�b�d�d�#�#�#��
3�� � ��X����2�2�2�#�A�;�����
�8�+<�k� J� J�K�K�K���� @�#&�x�'7�#8�#8�!9�:�:�:�:�� � ��X����2�2�2�%	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s%�#)B�B�B�<D=I�I
�
I
c�F�|�tjd��dSr()r�r
r�rws r�test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigints ���)�)�&�-��?�?�?�?�?rc�F�|�tjd��dSr()r�r
rrws r�test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigterms ���)�)�&�.�%�@�@�@�@�@rc�F�|�tjd��dSr,)r�r
rrws r�test_resource_tracker_sigkillz1TestResourceTracker.test_resource_tracker_sigkill!s ���)�)�&�.�$�?�?�?�?�?rc��ddlm}|���|jd|fv}||���z}|�|��dS)Nrr�)r�r�r�r��_check_aliver�)rr�r��reuseds    r�_is_resource_tracker_reusedz/TestResourceTracker._is_resource_tracker_reused%sh��F�F�F�F�F�F��(�(�*�*�*�#�'�D�#�;�6���#�0�0�2�2�2���	�	�&�����rc��ddlm}|���|j}t	jd���\}}t	j|j||f���}|���|�	��}|�
��|���|���|�|��dS)Nrr�Fr�r�)
r�r�r�r�rr�r�r�r�r�r�rr�)rMr�r�rr�r��is_resource_tracker_reuseds       r�test_resource_tracker_reusedz0TestResourceTracker.test_resource_tracker_reused/s���F�F�F�F�F�F��(�(�*�*�*��$���#�5�1�1�1���1��#�4�+K�*+�S��
3�
3�
3��	���	�	�	�%&�V�V�X�X�"�	
������	���	�	�	�	���	�	�	����2�3�3�3�3�3rc���d}ddt|��z
z}|�t��5tj||��ddd��dS#1swxYwYdS)Nrrfr�)r�r6rBr%�register)rMr)�too_long_name_resources   r�test_too_long_name_resourcez/TestResourceTracker.test_too_long_name_resourceAs��� ��!$��c�%�j�j�(8�!9��
�
�
�z�
*�
*�	E�	E��%�&<�e�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es�A�A�AN)rWrXrYr�r�r�r�r�r2r�r�r�rZrrr�r��s�������HP�HP�HP�T#3�#3�#3�J@�@�@�A�A�A�@�@�@�����\��4�4�4�$E�E�E�E�Err�c�Z�eZdZed���Zd�Zd�Zejj	d���Z
dS)�TestSimpleQueuec�&�|���	|�|�����|�|�����|���dS#|���wxYwr)r/r}r�r9r�s    r�_test_emptyzTestSimpleQueue._test_emptyLs~��������	&��I�I�e�k�k�m�m�$�$�$��I�I�e�k�k�m�m�$�$�$��#�#�%�%�%�%�%���#�#�%�%�%�%���s�AA:�:Bc���tj��}tj��}tj��}tj|j|||f���}d|_|���|�|�����|�	��|�
��|�|�����|�|�
��d��|�|�
��d��|�|�����|���dS)Nr�TF)r�SimpleQueuer�r�r�r�r�r�r�r9r/r�rjr�r�)rMrr�r�rts     r�
test_emptyzTestSimpleQueue.test_emptyVs,���+�-�-��)�/�1�1��-�3�5�5���&��#���*=�>�
�
�
������
�
����������
�
�&�&�&�������� � �"�"�"���������'�'�'���������d�+�+�+���������e�,�,�,�������
�
�&�&�&��	�	�����rc�|�tj��}|���|���dSr)rr�r�rMrs  rrFzTestSimpleQueue.test_closens.���+�-�-��
���
�
�
�
���
�
�
�
�
rc���tj��}|���|�|jj��|�|jj��dSr)rr�rr��_readerr"�_writerr�s  r�test_closedzTestSimpleQueue.test_closedusQ���+�-�-��
���
�
�
�����
�,�-�-�-�����
�,�-�-�-�-�-rN)rWrXrYr�r�r�rFr!r�cpython_onlyr�rZrrr�r�Jsl�������&�&��[�&����0���
�\��.�.���.�.�.rr�c��eZdZd�ZdS)�TestPoolNotLeakOnFailurec����d�g�G��fd�d��}|�td��5tj�dt
j�|������}|���|�	��ddd��n#1swxYwY|�
td��D������dS)	Nr�c�6��eZdZ�fd�Z�fd�Zd�Zd�Zd�ZdS)�RTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc�\��d|_d|_d|_��|��dS)NzFake Process)r(r�r�r,)rMr��forked_processess  �rrNz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__�s2���*��	� $��
�!��
� �'�'��-�-�-�-�-rc�J���dkrtd����dz�d|_dS)Nr�Manually induced OSErrorrbr�)r�r�)rM�will_fail_ins �rr�zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.start�s2����1�$�$�!�"<�=�=�=���!��&��
�
�
rc��d|_dS)N�stoppingr�rws rr�z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminate�s
��'��
�
�
rc�.�|jdkr	d|_dSdS)Nr��stoppedr�rws rr�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.join�s"���:��+�+�!*�D�J�J�J�,�+rc�.�|jdkp
|jdkS)Nr�r�r�rws rr�z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_alive�s���z�Y�.�J�$�*�
�2J�JrN)rWrXrYrNr�r�r�r�)r�r�s��r�FailingForkProcessr��sy�������
.�
.�
.�
.�
.�
'�
'�
'�
'�
'�
(�
(�
(�
+�
+�
+�
K�
K�
K�
K�
Krr�r�r|)r�)�contextc3�>K�|]}|���V��dSrrl)rLr"s  rr�zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>�s.����C�C�w�� � �"�"�C�C�C�C�C�Cr)r:r�rr�r�rCr��	MagicMockrr�r�r()rMr�r�r�r�s   @@r�test_release_unused_processesz6TestPoolNotLeakOnFailure.test_release_unused_processessY��������	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�0�
#�
#�G�-G�
H�
H�	�	��$�)�)�!�X�]�5L�5L�*�6M�6,�6,�)�-�-�A�
�G�G�I�I�I�
�F�F�H�H�H�		�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
	
����C�C�2B�C�C�C�C�C�	E�	E�	E�	E�	Es�A(B&�&B*�-B*N)rWrXrYr�rZrrr�r�}s(������$E�$E�$E�$E�$Err�c���eZdZdZejjZd�Zd�Z	e
d���ZeZd�Z
d�Ze
d���Zd�Ze
d	���Zd'd�Ze
d���Zd'd
�Ze
d���Zd(d�Zd�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd�Ze
d���Zd)d�Zd�Z e
d���Z!d�Z"e
d���Z#d�Z$e
d ���Z%d!�Z&e
d"���Z'd#�Z(e
d$���Z)d%�Z*d&S)*�TestSyncManagerTypesa}Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

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

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

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c�x�|���|_|j���d|_dSr)�
manager_classr^r�rtrws rr�zTestSyncManagerTypes.setUp�s4���)�)�+�+������������	�	�	rc��|j�K|j���r2|j���|j���|j���d|_d|_dSr)rtr�r�r�r^r�rws rr�zTestSyncManagerTypes.tearDown�si���9� �T�Y�%7�%7�%9�%9� ��I���!�!�!��I�N�N����������������	�	�	rc�,�tj��dSr)r�
reap_childrenrs rr�zTestSyncManagerTypes.setUpClass�s��������rc���t|j��tj��}d}t	tj����dkr�tj|��|dz}tj��|z
}|dkr?dtj	_
tjdtj���d|�d���dSt	tj����dk��dSdS)	NrJrbr�r�T�"multiprocessing.Manager still has � active children after � seconds)r#rtrPrQr�rr�r�r!r�environment_altered�
print_warning)rM�
start_timerTr�s    r�wait_proc_exitz#TestSyncManagerTypes.wait_proc_exit�s���	�T�Y�����^�%�%�
����/�1�3�3�4�4�q�8�8��J�q�M�M�M�
��F�A���!�!�J�.�B��S�y�y�37���0��%�'L�)8�)H�)J�)J�'L�'L�?A�'L�'L�'L�M�M�M����/�1�3�3�4�4�q�8�8�8�8�8�8rc���tj||f���|_d|j_|j���|���|�|jjd��dS)Nr�Tr)rr�rtr�r�r�rjr�)rM�workerrs   r�
run_workerzTestSyncManagerTypes.run_worker�sj��#�+�6���H�H�H��	���	���	�����������������+�Q�/�/�/�/�/rc��|���sJ�|���|���|�d��dS�NrO)rsr/rn�r�rs  rr�z TestSyncManagerTypes._test_event�sC���z�z�|�|�������
�
�
��	�	������������rc���|j���}|���|�|j|��|���rJ�|�d��dSr)r^r�r9r�r�rsr/�rMr7s  rr�zTestSyncManagerTypes.test_event�s`���L��� � ��	����������(�!�,�,�,��8�8�:�:����	���u�
�
�
�
�
rc�.�|���dSr�rArs  r�
_test_lockzTestSyncManagerTypes._test_lock�������
�
�
�
�
rr@c���t|j|����}|�|j|��|���|�t|j��dSr)r�r^r�rrBr6r	�rM�lnamer7s   rrFzTestSyncManagerTypes.test_lock�s\��(�G�D�L�%�(�(�*�*��������+�+�+�	�	�	�������,��	�2�2�2�2�2rc�V�|���|���dSr�rArBrs  r�_test_rlockz TestSyncManagerTypes._test_rlock� �����
�
�
����
�
�
�
�
rc�v�t|j|����}|�|j|��dSr)r�r^r�r
r	s   rrIzTestSyncManagerTypes.test_rlocks8��(�G�D�L�%�(�(�*�*������(�!�,�,�,�,�,rc�.�|���dSrrrs  rrRz$TestSyncManagerTypes._test_semaphorerrrTc��t|j|����}|�|j|��|���dSr)r�r^r�rRrB)rM�snamer7s   rrUz#TestSyncManagerTypes.test_semaphoresC��(�G�D�L�%�(�(�*�*������,�a�0�0�0�	�	�	�����rc�2�|�d���dS)NrX)r)rUrws rrYz+TestSyncManagerTypes.test_bounded_semaphores �����"4��5�5�5�5�5rc�V�|���|���dSrrrs  r�_test_conditionz$TestSyncManagerTypes._test_conditionrrc�n�|j���}|�|j|��dSr)r^rkr�rrs  r�test_conditionz#TestSyncManagerTypes.test_conditions2���L�"�"�$�$������,�a�0�0�0�0�0rc�H�|jdksJ�|���dSr{)r�rrs  r�
_test_barrierz"TestSyncManagerTypes._test_barrier!s&���{�a������	�	�����rc�p�|j�d��}|�|j|��dSr{)r^r�r�rrs  rr�z!TestSyncManagerTypes.test_barrier&s4���L� � ��#�#������*�A�.�.�.�.�.rc�>�|5	ddd��dS#1swxYwYdSrrZrs  r�
_test_poolzTestSyncManagerTypes._test_pool*sq���	�	��	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s���c�r�|j�d���}|�|j|��dS)Nr�r�)r^r�r�rrs  r�	test_poolzTestSyncManagerTypes.test_pool0s6���L�����*�*��������+�+�+�+�+rc�R�|���dksJ�|���sJ�|���rJ�|���dksJ�|���rJ�|���dksJ�|���sJ�dS�Nr�r|r�)r�r�r�r�rs  r�_test_queuez TestSyncManagerTypes._test_queue4s����y�y�{�{�a������x�x�z�z�����9�9�;�;�����w�w�y�y�A�~�~�~�~��9�9�;�;�����w�w�y�y�A�~�~�~�~��y�y�{�{�����rrc�$�t|j|��d��}|�d��|�d��|�|j|��|���sJ�|���rJ�dSr )r�r^r}r�r!r�r�)rM�qnamer7s   r�
test_queuezTestSyncManagerTypes.test_queue>s���(�G�D�L�%�(�(��+�+��	���a����	���a��������(�!�,�,�,��w�w�y�y�����6�6�8�8�����rc�0�|�d��dS)Nr	)r$rws r�test_joinable_queuez(TestSyncManagerTypes.test_joinable_queueFs������(�(�(�(�(rc�H�|ddksJ�|�d��dksJ�|�d��dksJ�|���|���|D]}�t	|��dksJ�|�d��dksJ�dS)Nrr|rb)r�r�r��reverser�rz)r�rr's   r�
_test_listzTestSyncManagerTypes._test_listIs����1�v��{�{�{�{��y�y��|�|�q� � � � ��y�y��|�|�q� � � � ����
�
�
����
�
�
��	�	�A���3�x�x�1�}�}�}�}��w�w�q�z�z�Q������rc���|j���}|�d��|�|j|��|rJ�|�t
|��d��dS)Nr|r)r^r�r,r�r)rjr�rs  rrozTestSyncManagerTypes.test_listUse���L������	�������������+�+�+���������Q����#�#�#�#�#rc���t|��dksJ�|ddksJ�|�d��dksJ�t|�����dgksJ�t|�����dgksJ�t|�����dgksJ�|���ddiksJ�|���dksJ�dS)Nrbr9r|)r9r|)r�r�r�rxr�r0r�popitemrs  r�
_test_dictzTestSyncManagerTypes._test_dict\s����3�x�x�1�}�}�}�}��5�z�Q������w�w�u�~�~��"�"�"�"��C�I�I�K�K� � �Z�L�0�0�0�0��C�H�H�J�J���E�7�*�*�*�*��C�J�J�L�L�!�!�a�S�(�(�(�(��x�x�z�z�e�Q�Z�'�'�'�'��{�{�}�}�
�*�*�*�*�*�*rc���|j���}d|d<|�|j|��|rJ�|�t|��d��dS)Nr|r9r)r^r�r�r-rjr�rs  rr�zTestSyncManagerTypes.test_dictgs_���L��������%��������+�+�+���������Q����#�#�#�#�#rc�~�|jdksJ�|���dksJ�|�d��dS)Nrbr�)rlr�r9rs  r�_test_valuez TestSyncManagerTypes._test_valuens9���y�A�~�~�~�~��w�w�y�y�A�~�~�~�~�����
�
�
�
�
rc��|j�dd��}|�|j|��|�|jd��|�|���d��dS)Nr*rbr�)r^r
r�r0rjrlr�rs  rr:zTestSyncManagerTypes.test_valuetsl���L���s�A�&�&������(�!�,�,�,������!�$�$�$���������!�$�$�$�$�$rc��|ddksJ�|ddksJ�t|��dksJ�t|��ddgksJ�dS)Nrrbr�)r�r�rs  r�_test_arrayz TestSyncManagerTypes._test_arrayzsX���1�v��{�{�{�{��1�v��{�{�{�{��3�x�x�1�}�}�}�}��C�y�y�Q��F�"�"�"�"�"�"rc�v�|j�dddg��}|�|j|��dS)Nr*rrb)r^rWr�r3rs  rrZzTestSyncManagerTypes.test_array�s:���L���s�Q��F�+�+������(�!�,�,�,�,�,rc�:�|jdksJ�|jdksJ�dSr�r�rs  r�_test_namespacez$TestSyncManagerTypes._test_namespace�s$���u��z�z�z�z��u��z�z�z�z�z�zrc��|j���}d|_d|_|�|j|��dSr�)r^r�r'r(r�r6rs  rr�z#TestSyncManagerTypes.test_namespace�s@���L�"�"�$�$������������,�a�0�0�0�0�0rNrK)rT)r)+rWrXrYr-rrr�r�r�r�r�r�r�r�r�r�r�rrFr
rIrRrUrYrrrr�rrr!r$r&r)ror-r�r0r:r3rZr6r�rZrrr�r��s���������*$�,�8�M����
���� � ��[� ��M����$0�0�0�����[���������[��3�3�3�3�����[��-�-�-�-�����[������
6�6�6�����[��1�1�1�����[��/�/�/�����[��
,�,�,�����[������)�)�)��	�	��[�	�$�$�$��+�+��[�+�$�$�$�����[��
%�%�%��#�#��[�#�-�-�-�����[��1�1�1�1�1rr�c��eZdZd�ZdS)�TestNamedResourcec�|�tj}|�tj|��t	|dd���5}|�t
jd����ddd��n#1swxYwYtj	j
�|��\}}}|�|d��dS)Nr�r�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�r8r�r�r�textwrap�dedentr!rr|r}rj)rMr�r�r=r�r�s      r� test_global_named_resource_spawnz2TestNamedResource.test_global_named_resource_spawn�s���
�!�����	�(�&�1�1�1�
�&�#��
0�
0�
0�	�A�
�G�G�H�O�
%�
�
�

�

�

�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��|�1�B�B�6�J�J���C��	
����c�"�"�"�"�"s�(A3�3A7�:A7N)rWrXrYr=rZrrr9r9�s#������#�#�#�#�#rr9c��eZdZd�ZdS)�MiscTestCasec�X�tj|ttjddg���dS)N�SUBDEBUGr�)�extra�not_exported)r�check__all__rr�rws r�test__all__zMiscTestCase.test__all__�s=����T�?�/�:Q�+5�|�*D�	F�	F�	F�	F�	F�	FrN)rWrXrYrErZrrr?r?�s(������F�F�F�F�Frr?c�:�eZdZed���Zed���ZdS)�	BaseMixinc��tjj���tj���f|_dSr)rr"�	_danglingrr��danglingrs rr�zBaseMixin.setUpClass�s6��'�/�9�>�>�@�@�!�+�0�0�2�2�4����rc���tj���ttjj��t|jd��z
}|r(dtj_tj	d|����d}ttj��t|jd��z
}|r(dtj_tj	d|����d}dS)NrT�Dangling processes: rb�Dangling threads: )r!rrEr9rr"rIrJr�r�r�)r�r]r_s   rr�zBaseMixin.tearDownClass�s���	
����!�!�!���/�9�:�:�S���a��=Q�=Q�Q�	��	F�/3�D�L�,��!�"D��"D�"D�E�E�E��	��i�)�*�*�S���a��-A�-A�A���	B�/3�D�L�,��!�"@�w�"@�"@�A�A�A����rN)rWrXrYr�r�r�rZrrrGrG�sH�������4�4��[�4�����[���rrGc��eZdZdZejZejZeej��Zeej	��Z	eej
��Z
eej��Zeej��Zeej
��Z
eej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��Zeej��ZdS)r�r]N)rWrXrYr�rr�r)r2r�r�r�r�r�r�rr	r@rHrTrXrkr�r�r
rWr5rVrZrrr�r��sz�������D��%�G� �+�J�"�l�?�#B�C�C�O�!�\�/�"@�A�A�N�"�l�?�#B�C�C�O�!�\�/�"@�A�A�N��<��,�-�-�D��<��,�-�-�D��L��.�/�/�E� �L��!>�?�?�M��<��,�-�-�D��L��.�/�/�E���_�6�7�7�I�#�|�O�$D�E�E����_�6�7�7�I��L��.�/�/�E��l�?�2�3�3�G��L��.�/�/�E��L��.�/�/�E��|�O�4�5�5�H��|�O�4�5�5�H�H�Hrr�c�,��eZdZdZejZeejd����Z	eejd����Z
eejd����Zeejd����Zeejd����Z
eejd����Zeejd����Zeejd	����Zeejd
����Zeejd����Zeejd����Zeejd
����Zeejd����Zeejd����Zed���Ze�fd���Ze�fd���Z�xZS)�ManagerMixinr^z
manager.Queuezmanager.JoinableQueuezmanager.Lockz
manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz
manager.Eventzmanager.Barrierz
manager.Valuez
manager.Arrayzmanager.listzmanager.dictzmanager.Namespacec�&�|jj|i|��Sr)r^r�)r�rRrSs   rr�zManagerMixin.Pool�s���s�{���.��.�.�.rc�x��t�����tj��|_dSr)r�r�rr�r^r�s �rr�zManagerMixin.setUpClasss-���
��������%�-�/�/����rc�Z��tj��}d}ttj����dkr�tj|��|dz}tj��|z
}|dkr>dtj_tj	dtj���d|�d���n$ttj����dk��tj��|j�
��d	krPdtj_tj	d
��tj	|j�����|j���|j���d|_t#�����dS)NrJrbr�r�Tr�r�r�rz5Shared objects which still exist at manager shutdown:)rPrQr�rr�r�r!rr�r�rBrCr^�_number_of_objects�_debug_infor�r�r�r�)r�r�rTr�r�s    �rr�zManagerMixin.tearDownClasss����
�^�%�%�
����/�1�3�3�4�4�q�8�8��J�q�M�M�M�
��F�A���!�!�J�.�B��S�y�y�37���0��%�'L�)8�)H�)J�)J�'L�'L�?A�'L�'L�'L�M�M�M���/�1�3�3�4�4�q�8�8�	�
�����;�)�)�+�+�q�0�0�04�D�L�,��!�#9�
:�
:�
:��!�#�+�"9�"9�";�";�<�<�<������������������
���������r)rWrXrYr�rr�r��operator�
attrgetterrr	r@rHrTrXrkr�r�r
rWr�r�r�r�r�r�r�rGrHs@rrPrP�s,��������D��%�G��H�(�X�(��9�9�:�:�E��H�0�X�0�1H�I�I�J�J�M��8�'�H�'��7�7�8�8�D��H�(�X�(��9�9�:�:�E���,��,�-@�A�A�B�B�I��x� 3�� 3�4N� O� O�P�P����,��,�-@�A�A�B�B�I��H�(�X�(��9�9�:�:�E��h�*�x�*�+<�=�=�>�>�G��H�(�X�(��9�9�:�:�E��H�(�X�(��9�9�:�:�E��8�'�H�'��7�7�8�8�D��8�'�H�'��7�7�8�8�D���,��,�-@�A�A�B�B�I��/�/��[�/��0�0�0�0��[�0�� � � � ��[� � � � � rrPc��eZdZdZejjZejjZeejj	��Z	eejj
��Z
eejj��Zeejj��Zeejj
��Z
eejj��Zeejj��Zeejj��Zeejj��Zeejj��Zeejj��Zeejj��Zeejj��Zeejj��Zeejj��ZdS)�ThreadsMixinr_N)rWrXrYr�r�dummyr�r)r2r�r�r�r�rr	r@rHrTrXrkr�r�r
rWrZrrrYrY(se�������D��#�+�G� �&�1�J�"�l�?�#8�#H�I�I�O�"�l�?�#8�#H�I�I�O��<��-�2�3�3�D��<��-�2�3�3�D��L��.�4�5�5�E� �L��!6�!D�E�E�M��<��-�2�3�3�D��L��.�4�5�5�E���_�2�<�=�=�I�#�|�O�$9�$J�K�K����_�2�<�=�=�I��L��.�4�5�5�E��l�?�0�8�9�9�G��L��.�4�5�5�E��L��.�4�5�5�E�E�ErrYc	�@��
��|d}t��}hd�}|���D�]L\}}t|t��s�t	|t
��r�|t
ur�;t
|j��|ksJ|j���|jD]�}d|���z|dd�z}||���dz}	Gd�d||	tj
��}
|dkrtjd	��|
��}
|x|
_
|
_||
_|
||<����t	|tj
��r.Gd
�d|t ��}
|x|
_
|
_||
_|
||<��Nddg�
dg��
��fd�}�
�fd�}||d
<||d<dS)NrW>r^r_r]�Withrb�Mixinc��eZdZdS��*install_tests_in_module_dict.<locals>.TempNr�rZrr�Tempr`Os�������Drrar^r�c��eZdZdSr_r�rZrrraz*install_tests_in_module_dict.<locals>.TempWs�������rc����tjt��tj���tjj����d<tj����d<tjd����d<	tj	�d���n%#t$rtj�dz���wxYwtj�d��r7	tj��}n"#t"$rtjd���wxYwt%��t'j��tj���t.��dS)	NrrbT)�
allow_noner�z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r"�_cleanuprIrr�rQr�rBrCrDr�rRr�rHr�rGr�get_temp_dirr�r�r�)rErJ�old_start_method�start_methods ���r�setUpModulez1install_tests_in_module_dict.<locals>.setUpModule`sz����.�w�7�7�7���(�(�*�*�*�%�-�7�<�<�>�>�����)�.�.�0�0����-�>�$�O�O�O����	C��,�\��F�F�F�F�F���	C�	C�	C��#�L�$A�%B�C�C�
C�	C�����<�"�"�7�+�+�	;�
;�&�,�.�.�����
;�
;�
;��'�):�;�;�;�
;����	 �!�!�!�������"�$�$�-�-�i�8�8�8�8�8s�B0�0"C�5D	�	D(c�f��d}tj���tj�dd���ttjj��t�d��z
}|r*d}dtj_tj	d|����d}ttj��t�d��z
}|r*d}dtj_tj	d|����d}|rtjd��tj
���dS)	NFrTr�rLrbrMrh)r!rrErr�r9r"rIr�r�r�rPr�r�_cleanup_tests)�
need_sleepr]r_rJrhs   ��r�tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModulevs����
�	
����!�!�!��(�)9�!�)<�D�I�I�I�I���/�9�:�:�S��!��=M�=M�M�	��	F��J�/3�D�L�,��!�"D��"D�"D�E�E�E��	��i�)�*�*�S��!��-=�-=�=���	B��J�/3�D�L�,��!�"@�w�"@�"@�A�A�A����	��J�s�O�O�O���+�+�-�-�-�-�-rrjrn)�globalsrxrr�r�r\r9rq�
capitalizerC�TestCaser�requires_hashdigestrWrYrXr )�remote_globsrirX�local_globs�	ALL_TYPESr(�base�type_�newnamer]rarjrnrJrhs `           @@r�install_tests_in_module_dictry@s?������j�)�J��)�)�K�3�3�3�I�!�'�'�)�)�&�&�
��d��$��%�%�	���d�L�)�)�	&��|�#�#���t�)�*�*�i�7�7�7��9K�7�7�7��+�	
-�	
-�� �5�#3�#3�#5�#5�5��Q�R�R��@��#�E�$4�$4�$6�$6��$@�A�������4���(9�����I�%�%�D�>�=�e�D�D�T�J�J�D�4;�;��
�� 1�",���(,��W�%�%�	
-���h�/�
0�
0�	&�
�
�
�
�
�t�V�
�
�
�04�4�D�M�D�-�(�D�O�!%�L�����d�|�H��v��9�9�9�9�9�9�9�,.�.�.�.�.�.�:#.�L���%3�L�!�"�"�"r�SemLockzSemLock not availablerez
Linux onlyc��eZdZd�ZdS)�SemLockTestsc��Gd�dtj��}dtj����}|ddd|d��}t�|��dS)Nc��eZdZdS)�3SemLockTests.test_semlock_subclass.<locals>.SemLockNr�rZrrrzr�rVrrzztest_semlock_subclass-rbrrF)r
rzr?r��
sem_unlink)rMrzr(rs    r�test_semlock_subclassz"SemLockTests.test_semlock_subclass�st��	�	�	�	�	�&�.�	�	�	�5��	���5�5���G�A�q�"�d�E�*�*���#�#�D�)�)�)�)�)rN)rWrXrYr�rZrrr|r|�s#������*�*�*�*�*rr|r�)�rC�
unittest.mockrr�r;rPryr�r�r?rBr�r
rXr[r�r�rBr�rVr�r�r@r+�test.supportr!�test.support.script_helperrrrrrrr	�
import_moduler
�*skip_if_broken_multiprocessing_synchronizer�rr�multiprocessing.dummy�multiprocessing.heap�multiprocessing.managersr]�multiprocessing.queuesrr�HAVE_SEND_HANDLEr#�ImportError�multiprocessing.sharedctypesr
rr�r�	HAS_SHMEMr�check_sanitizerrDrr r#r(r%r*r�r�r#rcr�r�r�r�r�r��
HAVE_GETVALUErRr�r/r4r@rr��ctypesr8r9r:r;r rGrIr\rtryr�r�r�r�r�r�r�r=rNr\r�r�r�r�r�r�r!rPrhr�r�r�r�r�rBr�r�r�rLrPrRrcr�r�rr�r�r�r�r�r�rr�r�r�r�r�r�rrr�r�r�r%r6rAr�rWrtr�r�r�rMrqr}r�r�r�r�r�r�r�r�r�r�r�rr
r1r9rIrTrYrbrrr�rfr�r�r�r�r9r?rGr�rPrYryrr|rZrr�<module>r�s���
��������������������	�	�	�	�����
�
�
�
�	�	�	�	�	�	�	�	�����
�
�
�
�����
�
�
�
�
�
�
�
���������
�
�
�
���������
�
�
�
�������������!�!�!�!�������'�'�'�'�'�'�&�&�&�&�&�&�"�"�"�"�"�"�&�&�&�&�&�&�)�)�)�)�)�)�(�(�(�(�(�(�/�=�.�/A�B�B��2��2�4�4�4�����!�!�!�!��������������������� � � � � � ��)�)�)�)�)�)��.�M�M�������M�M�M������8�8�8�8�8�8�8�8������������������-�-�-�-�-�-��I�I�������I�I�I�������M�M�M�M������
�F�F�F������7��4�(�(�(�H��(�
�F�
G�
G�G�������*�*�*��7�g���0�0�0�0�0�0�5�5�5�
�O�	�	���
��1�#2� �H�h���#0� �H�h���(���G�,�6��?�?�?�
�

���	 ��+�+�+�+�+�+�#�#�#�
��B�J�}�%�%�E�E����E�E�E�����=�
>��)�=�=�=�=�=�=�=�=�=�=�=�=�=���)�)�)��I�$(�(�E�(�H�z�z�z�)����
K�K�K�&0�0�0�0�0�F�0�0�0�"�����6����6
*�
*�
*� ��������I	8�I	8�I	8�I	8�I	8�<�I	8�I	8�I	8�` � � � � �/�)� � � �,Q7�Q7�Q7�Q7�Q7�l�Q7�Q7�Q7�n���$�$�$�@�@�@�@�@��@�@�@�J
���������03@�3@�3@�3@�3@�\�3@�3@�3@�le�e�e�e�e�\�e�e�e�P	5W�5W�5W�5W�5W��5W�5W�5W�@&�&�&�&�&��&�&�&�.���
6�6�6�6�6�F�6�6�6�r���������x1�x1�x1�x1�x1�<�x1�x1�x1�|C3�C3�C3�C3�C3��C3�C3�C3�LM3�M3�M3�M3�M3��M3�M3�M3�fY/�Y/�Y/�Y/�Y/�l�Y/�Y/�Y/�~�������$�$�$�
�
�
�$�$�$�$�$�F�$�$�$�%�$�$�$�$�:�$�$�$����f!�f!�f!�f!�f!��f!�f!�f!�P������&�&�&�&�&�L�&�&�&�PB �B �B �B �B �l�B �B �B �PI�H�H�H�H�H�H�H�H�H������V�������,�,�,�,�,�I�,�,�,�	�	�	�	�	��	�	�	�
���5�6��*�*�*�	���5�6�;��?�?�?�	���5�3�-��@�@�@�4>�4>�4>�4>�4>�\�4>�4>�4>�v
���������/�/�/�/�/�;�/�/�/����k�I��6�6�6�K�K�K�K�K�K�K�K�K�
���{�#�#�#��
�.�.�.�.�.��.�.�.�b$��#�E�*�*�22�22�22�22�22�,�22�22�+�*�22�p�5��9�9��G/�G/�G/�G/�G/�l�G/�G/�G/�R8�8�8�8�8�L�8�8�8�D.�.�.�.�.�,�.�.�.�`L�L�L�L�L��L�L�L�d���]�$J�K�K�#��#�E�*�*�@�@�@�@�@�|�@�@�+�*�L�K�@�Lb�b�b�b�b��b�b�b�P
�
�
�
�
�9�
�
�
�5)�5)�5)�5)�5)��5)�5)�5)�p���Y� H�I�I�#��#�E�*�*�@J�@J�@J�@J�@J��@J�@J�+�*�J�I�@J�Lt�t�t�t�t�L�t�t�t�v%�%�%�%�%�h�'�%�%�%�V+)�+)�+)�+)�+)�<�+)�+)�+)�J6�6�6�6�6�\�6�6�6�DE�E�E�E�E��)�E�E�E�&$��#�E�*�*�5�5�5�5�5��!�5�5�+�*�5�B���$��#�E�*�*�*�*�*�*�*�x�(�*�*�+�*�*�<
�
�
�������������������*'�'�'�'�'��!2�'�'�'�*k�k�k�k�k�x� �k�k�k�b
B�
B�
B�
B�
B��)�
B�
B�
B� 8�8�8�8�8��!�8�8�8�@2�2�2�2�2�8�$�2�2�2�D'�'�'�'�'�X�&�'�'�'�"1�1�1�1�1�h�/�1�1�1�><:�<:�<:�<:�<:�8�$�<:�<:�<:�DA�A�A�A�A�h�'�A�A�A�FEB�EB�EB�EB�EB�h�'�EB�EB�EB�P������(�=�?�?�_E�_E�_E�_E�_E�(�+�_E�_E�?�?�_E�D0.�0.�0.�0.�0.�h�'�0.�0.�0.�f&E�&E�&E�&E�&E�x�0�&E�&E�&E�R$��#�E�*�*�g1�g1�g1�g1�g1�8�,�g1�g1�+�*�g1�T#�#�#�#�#��)�#�#�#�:F�F�F�F�F�8�$�F�F�F����������26�6�6�6�6�Y�6�6�6�2: �: �: �: �: �9�: �: �: �z6�6�6�6�6�9�6�6�6�0T4�T4�T4�n���W�W�-�y�9�9�9�;R�S�S�������(�,�7�7�*�*�*�*�*�8�$�*�*�8�7�T�S�*�*�*sf�
C�C)�(C)�-
C8�8D�D�D�D�D�D"�"D,�+D,�1G�G�G�
G-�,G-