Your IP : 216.73.216.213


Current Path : /opt/alt/python312/lib64/python3.12/test/__pycache__/
Upload File :
Current File : //opt/alt/python312/lib64/python3.12/test/__pycache__/_test_multiprocessing.cpython-312.pyc

�

�#�ja��p�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$dd	lm%Z%e jLd
�Z'ejP�ddl)Z)ddl*Z+ddl,Z+ddl-Z+ddl.Z+ddl/Z+ddl0Z+ddl*m1Z1m2Z2ddl+m3Z3	dd
l+m4Z4e4jjZ6	ddl8m9Z9m:Z:dZ;	ddl+m<Z<dZ=	ddl>Z>ej~rej�d��dZAd�ZBd�ZCd�ZDe	j�dk(r	ddl+mFZFd�ZGe3j�ZIdZJdZKeKrd\ZLZMZNnd\ZLZMZNej�ZPdZQeRe'dd�ZSej�dk(ZUd�ZV	e	j�d �ZXd"d#gZY	dd$lZm[Z[m\Z\m]Z]m^Z^d%�Z`d&�ZaGd'�d(ej��ZcGd)�d*e_�ZdGd+�d,e_�Zed-�ZfGd.�d/�ZgGd0�d1ee�ZhGd2�d3e+j��ZjGd4�d5ee�Zkd6�Zld7�ZmGd8�d9ee�ZnGd:�d;ee�ZoGd<�d=ee�ZpGd>�d?ee�ZqGd@�dAee�ZrGdB�dCe_�ZsdD�ZtGdE�dFe_�ZuGdG�dHe_�ZvGdI�dJee�ZwGdK�dLee�ZxGdM�dNee�ZyGdO�dPee�Zzd�dQ�Z{dR�Z|dS�Z}dT�Z~GdU�dVe_�ZGdW�dXe��Z�dY�Z�GdZ�d[ee�Z�d\�Z�d]�Z�Gd^�d_ee�Z�Gd`�daee�Z�ddbl.m�Z�m�Z�m�Z�Gdc�dde_�Z�de�Z�Gdf�dge��Z�Gdh�die��Z�e��jdje��k�e��jdle�dm�n�e��jdoe�e��p�Gdq�dree�Z�e�j"�Z�ds�Z�Gdt�due��Z�e��jdve��k�Gdw�dxe��Z�e��jdv�dyZ�Gdz�d{ee�Z�e�j0d|�Gd}�d~ee��Z�eBd�Z�Gd��d�ee�Z�Gd��d�ee�Z�Gd��d�ee�Z�Gd��d�ee�Z�e�j>e6d��e�j0d|�Gd��d�ee���Z�Gd��d�ee�Z�Gd��d�e[�Z�Gd��d�ee�Z�e�j>e=d��e�j0d|�Gd��d�ee���Z�Gd��d�ee�Z�Gd��d�ej��Z�Gd��d�ee�Z�Gd��d�ee�Z�Gd��d�ej��Z�e�j0d|�Gd��d�ej���Z�e�j0d��e�j0d|�Gd��d�ej����Z�d��Z�e�j0d|�Gd��d�ej���Z�d��Z�d��Z�d��Z�d��Z�Gd��d�e_�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�e�jzej�dk(d��Gd��d�ej���Z�GdÄd�ej��Z�Gdńd�ej��Z�e�j0d|�GdDŽd�ej���Z�GdɄd�ej��Z�Gd˄d�ee�Z�Gd̈́d�ej��Z�Gdτd�e_�Z�Gdфd�eūZ�Gdӄd�eūZ�GdՄd�eūZ�	d�dׄZ�e�jze�e'dثd٫e�jzej�d�k7d۫Gd܄d�ej����Z�y#e7$rdZ6Y���wxYw#e7$rdZ;Y���wxYw#e7$rdZ=Y���wxYw#e7$rdZ>Y���wxYw#d!ZXY��ixYw#e7$re_Z[dxZ\xZ]Z^Y��kwxYw)��N)�support)�hashlib_helper)�
import_helper)�	os_helper)�
script_helper)�
socket_helper)�threading_helper)�warnings_helper�_multiprocessing)�wait�AuthenticationError)�util)�	reductionF)�Value�copyT)�
shared_memoryz?libasan has a pthread_create() dead lock related to thread+fork皙�����?c�$�|jd�S)N�latin)�encode)�ss �A/opt/alt/python312/lib64/python3.12/test/_test_multiprocessing.pyrr^s���8�8�G���c��t|tjj�r!|j	�|j�yy�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread��queues r�close_queuer$bs2���%��/�/�5�5�6�
���
�
����7rc�.�tj|�yr)r	r!)�processs r�join_processr'hs��� � ��)r�posix)�resource_trackerc�4�tj||�yr)r)�_CLEANUP_FUNCS)�name�rtypes  r�_resource_unlinkr.qs���'�'��.�t�4r)g=
ףp=�?gffffff�?gffffff�?)rrr�@�HAVE_BROKEN_SEM_GETVALUE�win32c�.�|�|dkrd}t|g|�S)N��r)�handle�timeouts  r�wait_for_handler7�s"����w��}������'�"�"r�SC_OPEN_MAX��__main__�$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc��d}	tjd�}|dk(s||k\ryt	j
d|z��#ttf$rYywxYw)zACheck that the system supports enough semaphores to run the test.r9�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_semaphoresrK�sl���I���
�
�-�.��
��{�e�y�(��
�
�
�>�@I�J�K�K��
�J�'����s�<�A�
Ac����fd�}|S)a�Returns a decorator: raises SkipTest when SM != spawn at test time.

    This can be useful to save overall Python test suite execution time.
    "spawn" is the universal mode available on all platforms so this limits the
    decorated test to only execute within test_multiprocessing_spawn.

    This would not be necessary if we refactored our test suite to split things
    into other test files when they are not start method specific to be rerun
    under all start methods.
    c�F���tj����fd��}|S)Nc�|��tj�x}dk7rtjd|�d������|i|��S)N�spawn�
start_method=z, not 'spawn'; )r�get_start_methodrGrH)�args�kwargs�start_method�reason�	test_items   ��r�spawn_check_wrapperzKonly_run_in_spawn_testsuite.<locals>.decorator.<locals>.spawn_check_wrapper�sG��� /� @� @� B�B��w�N��'�'�=�<�/����(Q�R�R��d�-�f�-�-r)�	functools�wraps)rVrWrUs` �r�	decoratorz.only_run_in_spawn_testsuite.<locals>.decorator�s&���	����	#�	.�
$�	.�
#�"r�)rUrZs` r�only_run_in_spawn_testsuiter\�s���#��rc�\�eZdZdZej
ejdk(d�d��Zy)�TestInternalDecoratorszBLogic within a test suite that could errantly skip tests? Test it!r1ztest requires that fork exists.c��tj�dk7rtjd��	t	d�d��}tjd��}	tjdd��|j�d	�tjd
d��|jtj�5}|�ddd�|jdtj��|jdt|j��tj|d��y#t
$r}|j
d|���Yd}~��d}~wwxYw#1swY��xYw#tj|d��wxYw)NrOz'only run in test_multiprocessing_spawn.ztesting this decoratorc��y�N�r[r[rr�return_four_if_spawnzUTestInternalDecorators.test_only_run_in_spawn_testsuite.<locals>.return_four_if_spawn�s��rz.expected decorated `def` not to raise; caught T��
allow_none��forcerb�forkrP)
rrQrGrHr\�	Exception�fail�set_start_method�assertEqual�assertRaises�assertIn�str�	exception)�selfrc�err�orig_start_method�ctxs     r� test_only_run_in_spawn_testsuitez7TestInternalDecorators.test_only_run_in_spawn_testsuite�s:���+�+�-��8��#�#�$M�N�N�	N�
(�)A�
B�
�C�
�
,�<�<��M��		L��,�,�W�D�A����1�3�Q�7��,�,�V�4�@��"�"�8�#4�#4�5��$�&�6��M�M�2�C��
�
�4F�G��M�M�/�3�s�}�}�+=�>��,�,�->�d�K���	N��I�I�F�s�e�L�M�M��	N��6�5��

�,�,�->�d�K�s=�D,�A$E#�:E�AE#�,	E�5E�E�E �E#�#E<N)	�__name__�
__module__�__qualname__�__doc__rG�skipIf�sys�platformrur[rrr^r^�s1��L��X�_�_�S�\�\�W�,�.O�P�L�Q�Lrr^c��eZdZd�Zd�Zy)�
TimingWrapperc� �||_d|_yr)�func�elapsed)rqr�s  r�__init__zTimingWrapper.__init__�s����	���rc���tj�}	|j|i|��tj�|z
|_S#tj�|z
|_wxYwr)�time�	monotonicr�r�)rqrR�kwds�ts    r�__call__zTimingWrapper.__call__�sM���N�N���	0��4�9�9�d�+�d�+��>�>�+�a�/�D�L��4�>�>�+�a�/�D�L�s�A�A"N�rvrwrxr�r�r[rrr~r~�s���0rr~c�J�eZdZUdZe�Zeeed<dZd�Z	d�Z
d�ZeZy)�BaseTestCase)�	processes�manager�threads�
START_METHODSNc�8�tr|j||d�yy�N�)�
CHECK_TIMINGS�assertAlmostEqual�rq�a�bs   r�assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEquals����"�"�1�a��+�rc�P�	||�}|j||�S#t$rYywxYwr)rl�NotImplementedError)rq�valuer�rR�ress     r�assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplementeds9��	0���+�C��#�#�E�3�/�/��#�	��	�s��	%�%c��td��)Nz#shouldn't try to pickle a test case)r�)rqrRs  r�
__reduce__zBaseTestCase.__reduce__s��!�"G�H�Hr)
rvrwrx�
ALLOWED_TYPES�setr�ro�__annotations__rTr�r�r��
__reduce_ex__r[rrr�r�s3��7�M�!�e�M�3�s�8�#��L�,�0�I��Mrr�c��	|j�S#t$rA	|jcYS#t$r%	|jcYcYS#t$rt�wxYwwxYwwxYwr)�	get_valuerE�_Semaphore__value�_valuer��rqs rr�r�sg��	*��~�~�����*�	*��)�)�)���	*�
*��{�{�"��!�
*�)�)�
*��	*��*�s9��	A�*�A�	A�A�A�A�A�A�Ac��eZdZd�Zy)�
DummyCallablec�J�t|t�sJ�|jd�y�N�)rr��put)rq�q�cs   rr�zDummyCallable.__call__0s���!�]�+�+�+�	���a�rN)rvrwrxr�r[rrr�r�/s��rr�c�2�eZdZdZd�Zd�Zejd�d��Ze	d��Z
d�Ze	d��Zd	�Z
e	d
��Zd�Ze	d��Ze	d
��Zd�Zej(ej,d�d��Ze	d��Ze	d��Ze	d��Zd�Zd�Zd�Zd�Zd�Ze	d��Z d�Z!e	d��Z"d�Z#e	d.d��Z$d�Z%ejd �d!��Z&d"�Z'e	d#��Z(d$�Z)e	d%��Z*d&�Z+e	ifd'��Z,d(�Z-d)�Z.e	d/d*��Z/d+�Z0d,�Z1d-�Z2y)0�_TestProcess�r�r�c��|jdk(r*|jdj|j��|j�}|j}|j|j
��|j|j�|j|t�|jt|�dkD�|j|jtj��|j|jd�y)Nr��test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrl�identrC�getpid�exitcode)rq�currentr�s   r�test_currentz_TestProcess.test_current9s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��&�&�(���/�/������(�(�*�+����G�N�N�*�+����g�u�-�����G��q�(�)��������	�	��4�����)�)�4�0rc�:�|jdk(r|jd|j���tjt	j
tj�t
jtj�t
jt	j
tj��g}|D]_}|j|�|j�}|j�|j�|j|jd��ay)Nr�ztest not appropriate for r)r�r�r{�
executablerC�fsencoder�FakePath�set_executable�Process�start�joinrlr�)rq�paths�path�ps    r�test_set_executablez _TestProcess.test_set_executableGs����9�9�	�!��M�M�5�d�i�i�[�A�B��N�N��K�K����'����s�~�~�.����r�{�{�3�>�>�:�;�	
���D�����%�����A�
�G�G�I�
�F�F�H����Q�Z�Z��+�r�cpuc	���dddgdf}ttf}tj||�}|D]�\}}|j	||��5|jd�}|j
|j|||f���}d|_|j�|j�}|j||�|j�t|�ddd���y#1swY��xYw)Nr�ro�r�)rR�	args_type��targetrRT)�list�tuple�	itertools�product�subTestrr��
_test_argsr�r��getrlr�r$)	rq�
args_cases�
args_types�
test_casesrRr�r�r��
child_argss	         r�test_args_argumentz_TestProcess.test_args_argumentWs�������T�*�
��E�]�
��&�&�z�:�>�
�)�O�D�)����4�9��=��J�J�q�M���L�L����i��D�	�>R�L�S��������	��U�U�W�
�� � ��T�2������A��>�=� *�=�=�s
�BC�C$	c�&�|j|�yr�r�)�clsr��args   rr�z_TestProcess._test_argsls
��	���c�
rc��|jdk(r*|jdj|j��|j|j��}|j|j|j�j�|j|jd��}|j|j�|j|jd��}|j|j�y)Nr�r��r�T�r�r�F)
r�r�r�r��_testrlr�r�r��assertFalse)rq�proc0�proc1�proc2s    r�test_daemon_argumentz!_TestProcess.test_daemon_argumentps����9�9�	�!��M�M�7�>�>�t�y�y�I�J����D�J�J��/��������t�';�';�'=�'D�'D�E����D�J�J�t��<��������%����D�J�J�u��=��������&rc�<�|j�}|j|�|j|�|j|j�|jdk7r@|jt	|j
��|j|j�yy)Nr�)r�r�r,r�r�r��pid)r�r�rRr�r�s     rr�z_TestProcess._test|sl���%�%�'��	���d��	���d��	���g�l�l���8�8�y� �
�E�E�%����(�)�
�E�E�'�+�+��!rc�p�|jdk(r*|jdj|j��|j|j	��|jd��\}}|j
|j|f��}|j�|j�|j�\}}|j||j�j�|j|tj��|j||j�j �y)Nr�r�F��duplexr�)r�r�r��assertIsNone�parent_process�Piper��_test_send_parent_processr�r��recvrlr�r�rCr�r,)rq�rconn�wconnr��
parent_pid�parent_names      r�test_parent_process_attributesz+_TestProcess.test_parent_process_attributes�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J����$�-�-�/�0��y�y��y�.���u��L�L�� >� >�e�X�L�N��	���	�	����"'�*�*�,��
�K�����T�%9�%9�%;�%?�%?�@�����R�Y�Y�[�1�����d�&:�&:�&<�&A�&A�Brc�r�ddlm}|j|�j|�jg�y)Nr�r�)�multiprocessing.processr��sendr�r,�r�r�r�s   rr�z&_TestProcess._test_send_parent_process�s(��:�
�
�
�N�$�(�(�.�*:�*?�*?�@�Arc�p�|jdk(r*|jdj|j��|jd��\}}|j	|j
|f��}|j
�|jtj��std��|j�}|j|d�|j�|j�|jtj��std��|j�}|j|d	�y)
Nr�r�Fr�r��r6z(Could not communicate with child process�alive�	not alive)r�r�r�r�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�rl�	terminater�)rqr�r�r��parent_process_statuss     r�test_parent_processz _TestProcess.test_parent_process�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J�
�y�y��y�.���u��L�L��7�7�u�i�
�
I��	���	��z�z�'�"6�"6�z�7� �!K�L�L� %�
�
������.��8�	���
�	�����z�z�'�"6�"6�z�7� �!K�L�L� %�
�
������.��<rc��|j|j|f��}|j�tjd�y)Nr�i,)r��_test_report_parent_statusr�r��sleep)r�r�r�s   rr	z,_TestProcess._test_create_grandchild_process�s0���K�K�s�=�=�U�I�K�N��	���	��
�
�3�rc��ddlm}|j|�j�rdnd�|�j	t
j��|j|�j�rd�yd�y)Nrrrrr)rr�rr�r�r�
SHORT_TIMEOUTrs   rrz'_TestProcess._test_report_parent_status�sZ��:�
�
�
�n�.�7�7�9�7�{�K�����g�&;�&;��<�
�
�
�n�.�7�7�9�7�K�{�Krc���|jd�}|j�}|ddf}ddd�}d}|j|j|||��}d|_|j�}|jd	k7r&|j|j|j�|j|j�d
�|j|jd�|j||j��|jt|j��tu�|j|jd�|j!�|j|jd�|j|j�d�|j#||j��|j|j%�|dd�|j|j%�|�|j|j%�|j&�|jd	k7rT|j|j%�|j�|j|j%�|j(�|j+�|j|jd�|j|j�d
�|j||j��t-|�y)Nr���gR���Q@)�hello�bye�SomeProcess)r�rRrSr,Tr�Fr)r�Eventr�r�r�r�r�rlr�r��assertNotIn�active_childrenr��typer�r�r�rnr�r,r�r�r$)rqr��erRrSr,r�r�s        r�test_processz_TestProcess.test_process�s.���J�J�q�M���J�J�L���1�a�y���D�)�����L�L��:�:�D��d�
�
������&�&�(���9�9�	�!����Q�Y�Y����8��������u�-�������4�(�����D�0�0�2�3�����T�1�1�3�4��<�=�������T�*�	���	�������T�*��������t�,��
�
�a��-�-�/�0��������$�q�r�(�+��������&�)��������!�&�&�)��9�9�	�!����Q�U�U�W�g�o�o�6����Q�U�U�W�a�e�e�,�	����������Q�'��������u�-�����D�0�0�2�3��A�rzneeds native_idc��|jdk(r*|jdj|j��tj�j
}|j
d�}|j|j|f��}|j�|j�}|j�t|�|j||�y)Nr�r�r�r�)r�r�r��	threading�main_thread�	native_idrr��"_test_process_mainthread_native_idr�r�r�r$�assertNotEqual)rq�current_mainthread_native_idr�r��child_mainthread_native_ids     r�!test_process_mainthread_native_idz._TestProcess.test_process_mainthread_native_id�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J�'0�'<�'<�'>�'H�'H�$��J�J�q�M���L�L�� G� G�q�d�L�S��	���	�%&�U�U�W�"�	�����A�����8�:T�Urc�b�tj�j}|j|�yr)r"r#r$r�)r�r��mainthread_native_ids   rr%z/_TestProcess._test_process_mainthread_native_id�s$��(�4�4�6�@�@��	���"�#rc�.�tjd�y)N�d�r�r�r�s r�_sleep_somez_TestProcess._sleep_some�s
���
�
�3�rc�.�tj|�yrr.)r��delays  r�_test_sleepz_TestProcess._test_sleeps���
�
�5�rc�"��|jdk(r*|jdj|j��|j|j���d�_�j
�|j�j�d�|j�|j��|j�jd�t�j�}|j|d�d�|j|jd�|j�j�d�|j|d�d�|j|jd�|j�j�d�t!j"d�|��t%t&d	�r��fd
�}t'j&t&j(|�}	t'j*d�|j|�d�t'j*d�t'j&t&j(|�n|j|�d�|j|jd�|j�j�d�|j-�|j���j��jS#t'j*d�t'j&t&j(|�wxYw)
Nr�r�r�Trr3rBr��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�r0r�r�rlr�rnrr�r~r�r�r�r�r�hasattr�signal�SIGALRMr5r)rq�methr�r9�old_handlerr�s     @r�
_kill_processz_TestProcess._kill_processs����9�9�	�!��M�M�7�>�>�t�y�y�I�J��L�L�� 0� 0�L�1�����	���	��������t�,��
�
�a��-�-�/�0�������T�*��Q�V�V�$������a��$�'��$�$�T�\�\�3�7��������t�,�����b��4�(��$�$�T�\�\�3�7��������t�,�	
�
�
�1�
��Q���6�7�#�
A� �-�-�����@�K�
;����R� �� � ����.����Q���
�
�f�n�n�k�:����T�V�T�*��$�$�T�\�\�3�7��������u�-�����D�0�0�2�3�	�����z�z������Q���
�
�f�n�n�k�:�s�,K�;Lc��|jtjj�}|j	|t
j�yr)r@rr�r
rlr<�SIGTERM�rqr�s  r�test_terminatez_TestProcess.test_terminate9s4���%�%�o�&=�&=�&G�&G�H������F�N�N�?�3rc��|jtjj�}tj
dk7r"|j
|tj�y|j
|tj�y�N�nt)
r@rr��killrCr,rlr<�SIGKILLrBrCs  r�	test_killz_TestProcess.test_kill=sU���%�%�o�&=�&=�&B�&B�C��
�7�7�d�?����X�����7����X�����7rc��	tj�}|jt	|�t
u�|j|dk\�y#t$rd}Y�BwxYwr�)r�	cpu_countr�r�r�int)rq�cpuss  r�test_cpu_countz_TestProcess.test_cpu_countDsR��	�"�,�,�.�D�	
����T�
�c�)�*������	�"��#�	��D�	�s�A�A�Ac��|jt|j��t�|j	�}|j|jd��}|j||j��	d|_|j�|j||j��|j�|j�|j||j��y#|j�wxYw)Nr[r�T)
rlrrr�rr�rrr�r�rnr�r�)rq�eventr�s   r�test_active_childrenz!_TestProcess.test_active_childrenLs�������d�2�2�4�5�t�<��
�
����L�L��
�
��L�4������D�0�0�2�3�	��A�H�
�G�G�I��M�M�!�T�1�1�3�4��I�I�K�	��������D�0�0�2�3��
�I�I�K�s�<7C4�4Dc���|j|�t|�dkrTtd�D]E}|j|j|||gzf��}|j�|j
��Gyy�Nrr�)rr��ranger��_test_recursionr�r�)r�r��id�ir�s     rrVz_TestProcess._test_recursion]sg��
�
�
�2���r�7�Q�;��1�X���K�K��.�.�e�R���V�_� ������	������rc�R�|jd��\}}|j|g�tjt�g}|j�r0|j
|j��|j�r�0gdgddgddgdgddgddgg}|j||�y)NFr�rr�)	r�rVr�r�DELTAr
�appendr�rl)rqr�r��result�expecteds     r�test_recursionz_TestProcess.test_recursionhs����y�y��y�.���u����U�B�'��
�
�5�����j�j�l��M�M�%�*�*�,�'��j�j�l�
��c��A���A���c��A���A����	
�����*rc�&�|jd�y)Ng$@r4�r�rQs  r�_test_sentinelz_TestProcess._test_sentinel|s��
�
�
�4�rc��|jdk(r*|jdj|j��|j�}|j	|j
|f��}|j
t�5|jddd�|j�|j|j�|j}|j|t�|jt|d���|j!�|j�|j#t|d���y#1swY��xYw)Nr�r�r�r3rr�)r�r�r�rr�rarmrF�sentinelr��
addCleanupr�r�rMr�r7r�r�)rqrQr�rcs    r�
test_sentinelz_TestProcess.test_sentinel�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��
�
����L�L�� 3� 3�5�(�L�C��
�
�
�z�
*�
�J�J�+�	���	���������:�:�����h��,������3�?�@�
�	�	��	���������!�<�=�+�
*�s�=
D8�8ENc�R�|�|j�tj|�yr)r�r{�exit)r��rcr�s   r�_test_closez_TestProcess._test_close�s���=�
�E�E�G�����rc��|jdk(r*|jdj|j��|j�}|j	|j
d|i��}d|_|j�|j|j�d�|jt�5|j�ddd�|jd�|j�|j|j�d�|j|jd�|j�|jt�5|j�ddd�|jt�5|j�ddd�|jt�5|j!�ddd�|j�t#j$|�}~t'j(�|j+|�d�t-|�y#1swY��^xYw#1swY��xYw#1swY��xYw#1swY��xYw)Nr�r�r�)r�rSTFr)r�r�r�rr�rir�r�rlr�rmrFr r�r�r�r
�weakref�ref�gc�collect�assertIsr$)rqr�r��wrs    r�
test_closez_TestProcess.test_close�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��J�J�L���L�L�� 0� 0�#�q��L�B�����	���	��������t�,�
�
�
�z�
*�
�G�G�I�+�	
���d��	�����������u�-�������Q�'�	���	�
�
�
�z�
*�
�J�J�L�+�
�
�
�z�
*�
�F�F�H�+�
�
�
�z�
*�
�K�K�M�+�	���	�
�[�[��^��
�
�
�
���
�
�b�d�D�!��A��++�
*��+�
*��
*�
*��
*�
*�s0�5H"�H/�>H;�,I�"H,�/H8�;I�I�walltimec���|jdk(r*|jdj|j��tj�}|dk(rdnd}t|�D�cgc]}|j
|jd����!}}|D]}|j��|D]
}t|��|D]}|j|jd�� t|�D�cgc]}|j
|j�	��� }}|D]}|j��tjd
�|D]}|j��|D]
}t|��t j"dk7rit$j&g}t(j*dk(r |j-t$j.�|D]}|j1|j|�� yycc}wcc}w)
Nr�r�rOr�r-)�{�G�z�?r�rr����MbP?rG�darwin)r�r�r�rrQrUr�r3r�r'rlr�r0r�rr
rCr,r<rBr{r|r[rIrn)rq�sm�NrX�procsr��	exitcodess       r�test_many_processesz _TestProcess.test_many_processes�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J�
�
-�
-�
/���w��A�C�� ��(�$�"�Q����T�%5�%5�G��D�"�	�$��A�
�G�G�I���A���O���A����Q�Z�Z��+�� ��(�$�"�Q����T�%5�%5��6�"�	�$��A�
�G�G�I���
�
�5���A�
�K�K�M���A���O��
�7�7�d�?� �.�.��)�I��|�|�x�'�� � �&�.�.��1����
�
�a�j�j�)�4��
��%$��$s�$$G�##Gc�z�t�}tj|�}|j�}|j	|||f��}~|j�|j
�tj�|j|�d�|j|j�d�t|�y)Nr�r�)
r�rkrlrr�r�r�rmrnrorlr�r$)rqr�rpr�r�s     r�test_lose_target_refz!_TestProcess.test_lose_target_ref�s����O��
�[�[��^���J�J�L���L�L���A��L�/��
�	���	�	����
�
�
���
�
�b�d�D�!��������!�$��A�rc�j�|jtj��|j�yr)r�r�fd_countr)rq�evtr�s   r�_test_child_fd_inflationz%_TestProcess._test_child_fd_inflation�s ��	���i� � �"�#����
rc�B�|jdk(r*|jdj|j��tj�}|dk(r |jdj|��d}|j�}|j
�}t|�D�cgc]!}|j|j||f����#}}|D]}|j��	t|�D�cgc]}|j���}}|jtt|��d|�|j�|D]}|j��t!|�ycc}wcc}w#|j�|D]}|j��t!|�wxYw)Nr�r�rhr�r�r�)r�r�r�rrQrrrUr�r�r�r�rlr�r�r�r$)	rqrwrxr�r�rXryr��	fd_countss	         r�test_child_fd_inflationz$_TestProcess.test_child_fd_inflation�sZ���9�9�	�!��M�M�7�>�>�t�y�y�I�J�
�
-�
-�
/��
��<�
�M�M�7�>�>�r�B�C�
���j�j�l���J�J�L�� ��(�$�"�Q����T�%B�%B�#�q���R�"�	�$��A�
�G�G�I��	�*/��(�3�(�Q�����(�I�3����S��Y��0�!�Y�?�
�G�G�I����������N��$��4��
�G�G�I����������N�s$�"&E �"
E*�/E%�'E*�%E*�*4Fc����fd�}�fd�}tj|��j�tj|d��j�y)Nc�P��tjd��j�y)N��?�r�rr��r�s�r�func1z2_TestProcess._test_wait_for_threads.<locals>.func1
s����J�J�s�O��G�G�Irc�P��tjd��j�y)N�)r�r�clearr�s�r�func2z2_TestProcess._test_wait_for_threads.<locals>.func2s����J�J�r�N��I�I�Krr�Tr�)r"�Threadr�)rqr�r�r�s `  r�_test_wait_for_threadsz#_TestProcess._test_wait_for_threadss?���	�	�	����&�,�,�.�����d�3�9�9�;rc�P�|jdk(r*|jdj|j��|j�}|j	|j
|f��}|j
�|j�|j|j��y)Nr�r�r�)
r�r�r�rr�r�r�r�r��is_set)rqr��procs   r�test_wait_for_threadsz"_TestProcess.test_wait_for_threadssu���9�9�	�!��M�M�7�>�>�t�y�y�I�J��j�j�l���|�|�4�#>�#>�c�V�|�L���
�
���	�	������
�
��%rc���|j�D]I\}}|dk(r%tj�}|j�n	|dk(sJ�d}t	t
|d��K|j
�y)Nr �remove)�items�io�StringIOr �setattrr{r�)rqr��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	��tj�dg}|dj�dD]�}|D]�}tt|�}tt||�	|j
�}|j|j|f��}|j�|j�|j|j��|j|jd�tt||�����y#tt||�wxYw)Nr��stdout�stderrr�)r�r�r �getattrr{r�rr�r�r�r�r�r�rlr�)rq�streamsr�r��
old_streamr�r�s       r�test_error_on_stdio_flush_1z(_TestProcess.test_error_on_stdio_flush_10s����;�;�=�$�'����
����/�K�!��$�S�+�6�
���[�&�1�	:��*�*�,�C��<�<�t�/N�/N�.1�V�(�5�D��J�J�L��I�I�K��O�O�C�J�J�L�1��$�$�T�]�]�A�6��C��j�9�"�0���C��j�9�s
�B	C5�5Dc	��dD]�}dD]�}tt|�}	|j�}|j|j|||if��}|j�|j
�|j|j��|j|jd�tt||�����y#tt||�wxYw)Nr�)r r�r�r)r�r{rr�r�r�r�r�r�rlr�r�)rqr�r�r�r�r�s      r�test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_2Cs���0�K�-��$�S�+�6�
�	:��*�*�,�C��<�<�t�/N�/N�.1�K��3H�-I�(�K�D��J�J�L��I�I�K��O�O�C�J�J�L�1��$�$�T�]�]�A�6��C��j�9�.�0���C��j�9�s�BB>�>Cc�N�tj|�|j�yrr�)rqr�r2s   r�_sleep_and_set_eventz!_TestProcess._sleep_and_set_eventTs���
�
�5�����	rc��|jdk(r*|jdj|j��tj�}|dk7r |jdj|��ddlm}|j�d}|j�}|j|j||f��}|j�|j}tj||�tj |dz�|j�}|j|j|f��}	|	j�|	j#�|j%|j'��|j)|	j*d�|j#�|j%|j'��|j-|j*d	�y)
Nr�r��
forkserverr)�_forkserverr�r�g@)r�)r�r�r�rrQ�multiprocessing.forkserverr��ensure_runningrr�r�r��_forkserver_pidrCrHr�rr�r�r�rlr�rn)
rq�signumrwr�r2r�r�r��evt2r�s
          r�check_forkserver_deathz#_TestProcess.check_forkserver_deathYsU���9�9�	�!��M�M�7�>�>�t�y�y�I�J�
�
-�
-�
/��
���
�M�M�7�>�>�r�B�C�:��"�"�$����j�j�l���|�|�4�#<�#<�C��<�|�P���
�
���)�)��
����V���
�
�5�3�;���z�z�|�����D�$=�$=�T�G��L��
���
�
�
�
��������
�&��������+��	�	������
�
��%��
�
�d�m�m�X�.rc�B�|jtj�yr)r�r<�SIGINTr�s r�test_forkserver_sigintz#_TestProcess.test_forkserver_sigints���#�#�F�M�M�2rc�j�tjdk7r |jtj�yyrF)rCr,r�r<rIr�s r�test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkill�s$��
�7�7�d�?��'�'����7�r)rN)r3)3rvrwrxr�r�r�r�requires_resourcer��classmethodr�r�r�r�r�rr	rr rG�
skipUnlessr"�_HAVE_THREAD_NATIVE_IDr)r%r0r3r@rDrJrOrRrVr^rarerirqr{r}r�r�r�r�r�r�r�r�r�r�r�r[rrr�r�5s��,�M�1�,� �W���u�%��&��(����
'�����
C��B��B�=�2����
�L��L�&�P�X����9�9�;L�M�V�N�V� �$��$���������1�f4�8�#�4�"����+�(����>� ����
�@�W���z�*�!5�+�!5�F������>�
<��
<�
&��@B�	��	�:�&:�"����$/�L3�8rr�c�$�eZdZd�Zd�Zd�Zd�Zy)�_UpperCaserc��tjj|�tj�\|_|_yr)rr�r�r��
child_conn�parent_connr�s rr�z_UpperCaser.__init__�s.�����(�(��.�,;�,@�,@�,B�)����)rc��|jj�t|jjd�D]+}|jj|j
���-|jj�yr)r�r �iterr�r�r�upper�rqrs  r�runz_UpperCaser.run�sW������� ��d�o�o�*�*�D�1�A��O�O� � �����+�2������rc��t|�tusJ�|jj|�|jj	�Sr)rror�rr�r�s  r�submitz_UpperCaser.submit�s;���A�w�#�~��~������a� ����$�$�&�&rc��|jjd�|jj�|jj�yr)r�rr r�r�s r�stopz_UpperCaser.stop�s8�������d�#������ ������rN)rvrwrxr�r�r�r�r[rrr�r��s��C� �'�
 rr�c�B�eZdZdZd�Zd�Zed��Zed��Zd�Z	y)�_TestSubclassingProcess�r�c�
�t�}d|_|j�|j|j	d�d�|j|j	d�d�|j�|j
�y)NTr�HELLO�world�WORLD)r�r�r�rlr�r�r�)rq�
uppercasers  r�test_subclassingz(_TestSubclassingProcess.test_subclassing�sg�� �]�
� �
����������*�*�7�3�W�=�����*�*�7�3�W�=��������rc�"�|jdk(r*|jdj|j��tj}|jtj|�|j|j|f��}|j�|j�t|d��5}|j�}|jd|�|jd|�|jd|�ddd�y#1swYyxYw)	Nr�r�r��utf-8��encoding�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)r�r�r�r�TESTFNrd�unlinkr��_test_stderr_flushr�r��open�readrn)rq�testfnr��frrs     r�test_stderr_flushz)_TestSubclassingProcess.test_stderr_flush�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��!�!�����	�(�(�&�1��|�|�4�#:�#:�&��|�K���
�
���	�	��
�&�7�
+�q��&�&�(�C��M�M�-�s�3��M�M�3�S�9��M�M�.�#�.�,�
+�
+�s
�5AD�Dc���tj|tjtjztjz�}t|ddd��t
_ddzy)N�wr�F�r��closefdr�r)rCr��O_WRONLY�O_CREAT�O_EXCLr{r�)r�r��fds   rr�z*_TestSubclassingProcess._test_stderr_flush�sA��
�W�W�V�R�[�[�2�:�:�5��	�	�A�
B���"�c�G�U�C��
�	�!�rc���tj|tjtjztjz�}t|ddd��t
_tj|�y)Nr�r�Fr�)rCr�r�r�r�r{r�rg)r�rUr�r�s    r�_test_sys_exitz&_TestSubclassingProcess._test_sys_exit�sF��
�W�W�V�R�[�[�2�:�:�5��	�	�A�
B���"�c�G�U�C��
�����rc��|jdk(r*|jdj|j��tj}|jtj|�gd�dfD]�}|j|j||f��}d|_	|j�t|�|j|jd�t|d�	�5}|j�}ddd�|jj!�t#|��t%j|���gd
�}|D]\}}|j'|��5|jt(j*|��}d|_	|j�t|�|j|j|�ddd���y#1swY��xYw#1swY��xYw)Nr�r��r�r�zignore thisr�Tr�r�r�)))Tr�)�Fr))�r�)rr)r[r�rR)r�r�r�rr�rdr�r�r�r�r�r'rlr�r�r��rstriprorCr�r{rg)	rqr�rUr�r��content�casesrRr]s	         r�
test_sys_exitz%_TestSubclassingProcess.test_sys_exit�sj���9�9�	�!��M�M�7�>�>�t�y�y�I�J��!�!�����	�(�(�&�1�
��
�F����D�$7�$7�v�v�>N��O�A��A�H�
�G�G�I���O����Q�Z�Z��+��f�w�/�1��&�&�(��0����W�^�^�-�s�6�{�;��I�I�f��
� ��$�N�D�(����4��(��L�L����t�L�<��������	��Q��� � ����X�6�)�(�$�0�/��)�(�s�F?�A G�?G	�G	N)
rvrwrxr�r�r�r�r�r�r�r[rrr�r��s>��"�M��/�"��������
&7rr�c�`�t|d�r|j�S|j�dk(S)N�emptyr)r;r��qsize)r�s r�queue_emptyr��s(���q�'���w�w�y���w�w�y�A�~�rc�`�t|d�r|j�S|j�|k(S)N�full)r;r�r�)r��maxsizes  r�
queue_fullr�s(���q�&���v�v�x���w�w�y�G�#�#rc��eZdZed��Zd�Zed��Zd�Zed��Zd�Z	d�Z
ed��Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zy)�
_TestQueuec��|j�td�D]}|j��|j�y)N�)rrUr�r�)r�r#�child_can_start�parent_can_continuerXs     r�	_test_putz_TestQueue._test_put
s1�������q��A��I�I�K�����!rc��d}|j|��}|j�}|j�}|j|j|||f��}d|_|j�|j
t|�d�|j
t||�d�|jd�|jdd�|jddd�|jd	d�|jd
dd�|jd�tjt�|j
t|�d�|j
t||�d�t|j�}t|j�}|jt j"|dd�|j%|j&d�|jt j"|ddd�|j%|j&d�|jt j"|d�|j%|j&d�|jt j"|ddt(�|j%|j&t(�|jt j"|ddt*�|j%|j&d�|jt j"|ddt,�
�|j%|j&t,�|j/�|j1�|j
t|�d�|j
t||�d�|j3�t5|�y)Nr�r�r�TFr�rr�rbr��rr)rrr�rr�r�rlr�r�r��
put_nowaitr�rrZr~rm�pyqueue�Fullr�r��TIMEOUT1�TIMEOUT2�TIMEOUT3r�rr�r$)rq�MAXSIZEr#rrr�r�r	s        r�test_putz_TestQueue.test_puts������
�
�7�
�+���*�*�,��"�j�j�l���|�|��>�>���*=�>��������
�
������U�+�T�2�����E�7�3�U�;�
�	�	�!��
�	�	�!�T��
�	�	�!�T�4� �
�	�	�!�U��
�	�	�!�U�D�!�
�����	
�
�
�5������U�+�U�3�����E�7�3�T�:��E�I�I�&��"�5�#3�#3�4�
����'�,�,��Q��6��$�$�S�[�[�!�4����'�,�,��Q��t�<��$�$�S�[�[�!�4����'�,�,�
�A�6��$�$�Z�%7�%7��;����'�,�,��Q��h�?��$�$�S�[�[�(�;����'�,�,��Q��x�@��$�$�S�[�[�!�4����'�,�,��Q��h��G��$�$�S�[�[�(�;������ � �"�����U�+�T�2�����E�7�3�U�;��	�	���E�rc���|j�|jd�|jd�|jd�|jd�|j�y)Nrr�rbr�)rr�r��r�r#rrs    r�	_test_getz_TestQueue._test_getLsF������
�	�	�!��
�	�	�!��
�	�	�!��
�	�	�!�����!rc��|j�}|j�}|j�}|j|j|||f��}d|_|j�|j
t|�d�|j�|j�tjt�|j
t|�d�|j
|jdd�d�|j
|jd�d�|j
|jd��d�|j
|j�d	�|j
t|�d�t|j�}t|j�}|j!t"j$|d�|j'|j(d
�|j!t"j$|dd�|j'|j(d
�|j!t"j$|�|j'|j(d
�|j!t"j$|dt*�|j'|j(t*�|j!t"j$|dt,�|j'|j(d
�|j!t"j$|t.��|j'|j(t.�|j1�t3|�y)Nr�TFrr�r�rrbr�r)rrr�rr�r�rlr�r�rr�rrZr��
get_nowaitr~rmr
�Emptyr�r�rr
rr�r$)rqr#rrr�r�rs       r�test_getz_TestQueue.test_getVs[���
�
����*�*�,��"�j�j�l���|�|��>�>���*=�>��������
�
������U�+�T�2������ � �"��
�
�5������U�+�U�3�	
������4��.��2�������4��!�,�������1��-�q�1�����)�)�+�Q�/�����U�+�T�2��E�I�I�&��"�5�#3�#3�4�
����'�-�-��e�4��$�$�S�[�[�!�4����'�-�-��e�T�:��$�$�S�[�[�!�4����'�-�-��4��$�$�Z�%7�%7��;����'�-�-��d�H�=��$�$�S�[�[�(�;����'�-�-��e�X�>��$�$�S�[�[�!�4����'�-�-��h��?��$�$�S�[�[�(�;��	�	���E�rc�H�tdd�D]}|j|��y)Nr:r�)rUr�)r�r#rXs   r�
_test_forkz_TestQueue._test_fork�s���r�2��A��I�I�a�L�rc���|j�}td�D]}|j|��tjt
�|j
|j|f��}d|_|j�td�D]"}|j|j�|��$|jtj|jd�|j�t!|�y)Nr:r�Tr�F)rrUr�r�rrZr�rr�r�rlr�rmr
rr�r$)rqr#rXr�s    r�	test_forkz_TestQueue.test_fork�s����
�
����r��A��I�I�a�L��	
�
�
�5��
�L�L����u�h�L�?�����	���	��r��A����U�Y�Y�[�!�,�����'�-�-����E�:�	�����E�rc�@�|j�}	|j|j�d�|jd�|j|j�d�|jd�|j|j�d�|j
�|j|j�d�|j
�|j|j�d�t|�y#t$r|j	d�Y��wxYw)Nrzqsize method not implementedr�r�r)rrlr�r�r�r�r�r$�rqr�s  r�
test_qsizez_TestQueue.test_qsize�s����J�J�L��	:����Q�W�W�Y��*�	
���a���������A�&�	���a���������A�&�	�����������A�&�	�����������A�&��A���#�	:��M�M�8�9�	:�s� D�D�Dc��t|jd�D]+}tjt�|j��-yr)r�r�r�rrZ�	task_done)r�r��objs   r�_test_task_donez_TestQueue._test_task_done�s,������t�$�C��J�J�u��
�K�K�M�%rc��|j�}td�D�cgc] }|j|j|f����"}}|D]}d|_|j��td�D]}|j
|��|j�|D]}|j
d��|D]}|j��t|�ycc}w)Nrbr�Tr:)	�
JoinableQueuerUr�r"r�r�r�r�r$)rqr#rX�workersr�s     r�test_task_donez_TestQueue.test_task_done�s����"�"�$��"�!�H�&�$�q��<�<�t�';�';�5�(�<�K�$�	�&��A��A�H�
�G�G�I���r��A��I�I�a�L��	�
�
���A��I�I�d�O���A�
�F�F�H���E���#&s�%Cc��tj�5d}t|dzdd��5}|jd�ddd�t	j
t
j��5	t|�ddd�ddd�y#1swY�NxYw#tj$r|jd�Y�CwxYw#1swY�HxYw#1swYyxYw)N�imported_by_an_imported_module�.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�
DirsOnSysPathrC�getcwd�
__import__r
rrj)rq�module_namer�s   r�test_no_import_lock_contentionz)_TestQueue.test_no_import_lock_contention�s���
�
�
�
!�:�K��k�E�)�3��A�Q������B��,�,�R�Y�Y�[�9�3��{�+�:�"�
!�A�A���}�}�3��I�I�2�3�3��:�9��"�
!�sW�C
�B�/C
�*B>�,B�7C
�B	�
C
�$B;�8B>�:B;�;B>�>C	�C
�
Cc��tj�}tj�}|j	t
j|jdd�tj�|z
}|j|d�t|�y)NT皙�����?r)
rrr�r�rmr
rr��assertGreaterEqualr$)rqr�r��deltas    r�test_timeoutz_TestQueue.test_timeout�sb���!�!�#����� �����'�-�-�����e�<���� �5�(��	
����u�-��A�rc���|jdk7r*|jdj|j��Gd�dt�}tj
j
�5|j�}|j|��|jd�|j|jt
j���t|�ddd�tj
j
�5|jd��}|j|��|jd�	|j|j�d�|j|jt
j���|j|j!��t|�ddd�y#1swY��xYw#t$rY�ywxYw#1swYyxYw)	Nr�r�c��eZdZd�Zy)�F_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec��t�r)rEr�s rr�zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__s��$�$rN�rvrwrxr�r[rr�NotSerializabler8s��
%rr;Trr�r)r�r�r��object�testr�captured_stderrrr�r�r�rr$rlr�r�r�)rqr;r�s   r�"test_queue_feeder_donot_stop_onexcz-_TestQueue.test_queue_feeder_donot_stop_onexc�sV���9�9��#��M�M�7�>�>�t�y�y�I�J�	%�f�	%��\�\�
)�
)�
+��
�
��A�
�E�E�/�#�$�
�E�E�$�K��O�O�A�E�E�'�*?�*?�E�@�A���N�,��\�\�
)�
)�
+��
�
�1�
�%�A�
�E�E�/�#�$�
�E�E�$�K�
�� � �����A�.�

�O�O�A�E�E�'�*?�*?�E�@�A��O�O�A�G�G�I�&���N�,�
+�,�
+��'�
��
��,�
+�s>�'A2F<�?:G�: G�AG�<G�	G�G�G�G�G c���|jdk7r*|jdj|j��Gd�dt��G�fd�dtj
j�}��}tjj�5|t	j���}|j|�|jd�|j|jtj�	��ddd�|j|j�|j|j �y#1swY�@xYw)
Nr�r�c��eZdZdZd�Zd�Zy)�K_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc� �d|_d|_y�NF)�reduce_was_called� on_queue_feeder_error_was_calledr�s rr�zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__#s��).��&�8=��5rc��d|_t��NT)rErEr�s rr�zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__'s��)-��&�$�$rN)rvrwrxryr�r�r[rrr;rB!s��,�
>�
%rr;c�&��eZdZdZe�fd��Zy)�E_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc�P��t|t�rt|��rd|_yyyrH)rrErF)rr!r;s  �r�_on_queue_feeder_errorz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_error-s)����q�.�1�"�3��8�;?�C�8�9�2rN)rvrwrxry�staticmethodrL)r;s�r�	SafeQueuerJ+s���C�
�
@��
@rrN)rtTr)r�r�r�r<rrrr=rr>�get_contextr�r�r�rrErF)rqrN�not_serializable_objr�r;s    @r�'test_queue_feeder_on_queue_feeder_errorz2_TestQueue.test_queue_feeder_on_queue_feeder_errors�����9�9��#��M�M�7�>�>�t�y�y�I�J�	%�f�	%�	@��.�.�4�4�	@� /�0��
�\�\�
)�
)�
+��o�9�9�;�<�A�
�E�E�&�'�
�E�E�$�K��O�O�A�E�E�'�*?�*?�E�@�A�
,�	
���,�>�>�?����,�M�M�N�,�
+�s
�A-E�E	c��tj�tj�fD]A}|j�|j	�|j|j
���Ctj�tj�fD]b}|jd�|j�|j	�|jtd�5|j
�ddd��dy#1swY�oxYw)N�foo�	is closed)
rrr$r r!r�r�r��assertRaisesRegex�OSErrorrs  r�"test_closed_queue_empty_exceptionsz-_TestQueue.test_closed_queue_empty_exceptionsAs���
!�&�&�(�/�*G�*G�*I�I�A�
�G�G�I�
�M�M�O��O�O�A�G�G�I�&�J�
!�&�&�(�/�*G�*G�*I�I�A�
�E�E�%�L�
�G�G�I�
�M�M�O��'�'���=����	�>�=�	J�>�=�s�C;�;D	c�l�tj�tj�fD]q}|j�|j	t
d�5|j
d�ddd�|j	t
d�5|j�ddd��sy#1swY�;xYw#1swY��xYw)NrTrS)rrr$r rUrFr�r�rs  r�$test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptionsRs~�� �&�&�(�/�*G�*G�*I�I�A�
�G�G�I��'�'�
�K�@����e��A��'�'�
�K�@�����A�@�	J�@�@��@�@�s�B�B*�B'	�*B3	N)rvrwrxr�rrrrrrrr"r&r0r5r?rQrWrYr[rrrrs����"��"�9�v�"��"�3�j�����8� ����
�,3�*	��@$O�L�"rrc�^�eZdZed
d��Zed��Zd�Zd�Zedd��Zd�Z	d�Z
d	�Zy)�	_TestLockNc�^�|j�|�|jt|��yyr)�acquirer[�repr)�lock�ls  r�_acquirez_TestLock._acquire_s%�������=�
�H�H�T�$�Z� �rc�n�|j�|j�tjd�y)N��?)r]r�r�r)r_rQs  r�_acquire_eventz_TestLock._acquire_eventes������
�	�	���
�
�3�rc�$�|jdk7r*|jdj|j��|j�}|j	dt|��|j
�|j	dt|��|j�d}g}tj|j||f|��}|j�tjd�|j	d|�d	�|d
�|j�tj|j|f|��}|j�tjd�|j	dt|��|j�d}tj�j!�}|j#|j||f|��}|j�|j%�|j	d
|�d	�|d
�|j�}|j'�}|j#|j(||fd��}|j�|j+�|j	dt|��|j-�y)Nr�r�z<Lock(owner=None)>z<Lock(owner=MainProcess)>�T1�r�rRr,rz<Lock(owner=MainProcess|�)>rz<Lock(owner=SomeOtherThread)>�P1z<Lock(owner=�P2z<Lock(owner=SomeOtherProcess)>)r�r�r��Lockrlr^r]�releaser"r�rar�r�rr�Managerr�r�r�rrdrr
)rqr_�tnamer`r��pnamer�rQs        r�test_repr_lockz_TestLock.test_repr_lockks���9�9��#��M�M�7�>�>�t�y�y�I�J��y�y�{�����-��T�
�;��������4�t�D�z�B������������D�M�M�#'��)�"'�
)��	
���	��
�
�3�����3�E�7�"�=�q��t�D��������D�M�M�#'�'�"'�
)��	
���	��
�
�3�����8�$�t�*�E��������#�#�%�*�*�,���L�L��
�
�#�Q�i�#�
�
%��	
���	�	�������<��w�b�1�1�Q�4�8��y�y�{���
�
����L�L�� 3� 3�#�U�m�"�
�
$��	
���	�
�
�
�����9�D��J�G�	���
rc�F�|j�}|j|j�d�|j|jd�d�|j|j�d�|j	t
tjf|j�y�NTF)rkrlr]rlrmrFr"�ThreadError�rqr_s  r�	test_lockz_TestLock.test_lock�sq���y�y�{����������.�������e�,�e�4���������.����:�y�'<�'<�=�t�|�|�Lrc���t|�D]}|j��|�|jt|��t	j
|�t|�D]}|j
��yr)rUr]r[r^r�rrl)r_r6r`�n�_s     r�_acquire_releasez_TestLock._acquire_release�sQ���q��A��L�L�N���=�
�H�H�T�$�Z� ��
�
�7���q��A��L�L�N�rc���|jdk7r*|jdj|j��|j�}|j	dt|��d}t
|�D]}|j��|j	d|�d�t|��t
|�D]}|j��gg}}t
|�D]S}|jtj|j|d||dzfd	|dz���
��|dj��U|D]}|j��t
|�D]!}|jd|dz�d
|dz�d�|��#tj|j|dfd�
�}|j�t!j"d�|j	dt|��t!j"d�d}t%j&�j)�}|j+|j|d|f|�
�}	|	j�|	j�|j	d|�d�|d�|j-�}
|j�}|j+|j.||
f��}	|	j�|
j1�|j	dt|��|	j�y)Nr�r�z<RLock(None, 0)>r�z<RLock(MainProcess, rhrr��TrgrBz<RLock(MainProcess|Tz, r2rfz!<RLock(SomeOtherThread, nonzero)>riz<RLock(z, 1)>rr�z"<RLock(SomeOtherProcess, nonzero)>)r�r�r��RLockrlr^rUr]rlr[r"r�ryr�r�rnr�rrrmr�r�rrdr)rqr_rwrxr�r`rX�t_ror�rQs           r�test_repr_rlockz_TestLock.test_repr_rlock�s����9�9��#��M�M�7�>�>�t�y�y�I�J��z�z�|�����+�T�$�Z�8�
���q��A��L�L�N�����/��s�"�5�t�D�z�B��q��A��L�L�N���2�1���q��A�
�H�H�Y�%�%�T�-B�-B�,0�#�q�!�A�#�+>�-.�q��s�e�9�6�
7�
�b�E�K�K�M�	�
�B��G�G�I���q��A��M�M�0��1���R��!��u�B�?��C��
���D�$9�$9�'+�S�k�(*�
-��	
���	��
�
�3�����<�d�4�j�I��
�
�3�����#�#�%�*�*�,���L�L�� 5� 5�#�S�!�n�#�
�
%��	
���	�	�������7�5�'��/��1��6��
�
����z�z�|���L�L�� 3� 3�#�U�m�
�
-��	���	�
�
�
�����=�t�D�z�J�	���rc���|j�}|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j	t
tf|j�yrH)r|rlr]rlrmrr8rts  r�
test_rlockz_TestLock.test_rlock�s����z�z�|����������.���������.���������.���������.���������.���������.����>�<�8�$�,�,�Grc�P�|j�5	ddd�y#1swYyxYwr�rkr�s r�test_lock_contextz_TestLock.test_lock_context�s��
�Y�Y�[���[�[�s��%rr�)rvrwrxrMrardrpruryr~r�r�r[rrr[r[]sY���!��!�
����
.�`M�����2�hH�rr[c�$�eZdZd�Zd�Zd�Zd�Zy)�_TestSemaphorec�Z�|jdt|�|j|j�d�|jdt|�|j|j�d�|jdt|�|j|jd�d�|jdt|�|j|j	�d�|jdt|�|j|j	�d�|jdt|�y)NrTr�rF)r�r�rlr]rl�rq�sems  r�_test_semaphorez_TestSemaphore._test_semaphore�s����'�'��9�c�:���������-��'�'��9�c�:���������-��'�'��9�c�:�������U�+�U�3��'�'��9�c�:���������-��'�'��9�c�:���������-��'�'��9�c�:rc�$�|jd�}|j|�|j|j�d�|j	dt
|�|j|j�d�|j	dt
|�y)Nrr�rb)�	Semaphorer�rlrlr�r�r�s  r�test_semaphorez_TestSemaphore.test_semaphore�sn���n�n�Q������S�!���������-��'�'��9�c�:���������-��'�'��9�c�:rc�H�|jd�}|j|�y�Nr)�BoundedSemaphorer�r�s  r�test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphores ���#�#�A�&�����S�!rc��|jdk7r*|jdj|j��|jd�}t	|j
�}|j
|d�d�|j|jd�|j
|dd�d�|j|jd�|j
|dt�d�|j|jd�|j
|dt�d�|j|jt�|j
|t��d�|j|jt�y)Nr�r�rFr3Tr)r�r�r�r�r~r]rlr�r�rr
r)rqr�r]s   rr5z_TestSemaphore.test_timeouts���9�9��#��M�M�7�>�>�t�y�y�I�J��n�n�Q�������,���������/��$�$�W�_�_�c�:�������-�u�5��$�$�W�_�_�c�:�������1�5�9��$�$�W�_�_�a�8������x�0�%�8��$�$�W�_�_�h�?������2�E�:��$�$�W�_�_�h�?rN)rvrwrxr�r�r�r5r[rrr�r��s��;�;�"�@rr�c���eZdZedd��Zd�Zd�Zd�Zd�Zd�Z	d�Z
ed	��Zejed
�d��Zed��Zejed
�d
��Zed��Zd�Zy)�_TestConditionNc��|j�|j�|j|�|j�|j�yr)r]rlr)r��cond�sleeping�wokenr6s     rr�z_TestCondition.f's5�����������	�	�'��
�
�
�����rc��tjtj�D]}	|�|k(rn�|j	||�y#t$rY�wxYwr)r�sleeping_retryrr�r�)rqr�r�rxs    r�assertReachesEventuallyz&_TestCondition.assertReachesEventually/sY���'�'��(=�(=�>�A�
��6�U�?��#�?�	
�'�'��t�4��'�
��
�s�
A	�		A�Ac�&�|jdk(rs	|jj�|jj�z
}|j	|d�|j	|j
j�d�yy#t$rYywxYw)Nr�r)r��_sleeping_countr��_woken_countrl�_wait_semaphorer�)rqr��sleeperss   r�check_invariantz_TestCondition.check_invariant9s����9�9��#�
� �0�0�:�:�<� �-�-�7�7�9�:��� � ��1�-�� � ��!5�!5�!?�!?�!A�1�E�$��'�
��
�s�A1B�	B�Bc�.��|j�}|jd�}|jd��|j|j||�f��}d|_|j�t
j|j||�f��}d|_|j�|j�|j�|j�fd�d�|j�|j�|j�|j�fd�d�|j�|j�|j�|j�fd�d�|j|�tj|�t|�y)	Nrr�Tc���t��Sr�r��r�s�r�<lambda>z,_TestCondition.test_notify.<locals>.<lambda>V�
���Y�u�-=rc���t��Srr�r�s�rr�z,_TestCondition.test_notify.<locals>.<lambda>^r�rr�c���t��Srr�r�s�rr�z,_TestCondition.test_notify.<locals>.<lambda>fr�rr)�	Conditionr�r�r�r�r�r"r�r]r��notifyrlr�r	r!r')rqr�r�r�r�r�s     @r�test_notifyz_TestCondition.test_notifyDs7����~�~����>�>�!�$�����q�!���L�L����d�H�e�-D�L�E�����	���	����D�F�F�$��%�1H�I�����	���	�	��������	
�$�$�%=�q�A�	
�������
�����	
�$�$�%=�q�A�	
�������
�����	
�$�$�%=�q�A�	
���T�"��$�$�Q�'��Q�rc��|j�}|jd�}|jd�}g}td�D]�}|j|j|||t
f��}d|_|j�|j|�tj|j|||t
f��}d|_|j�|j|���td�D]}|j��td�D]}|j��|jdt|�|j|�td�D]�}|j|j|||f��}d|_|j�|j|�tj|j|||f��}d|_|j�|j|���td�D]}|j��tj t"�|jdt|�|j�|j%�|j'�td�D]}|j��|jdt|�|j|�|D]}t)j*|��y)Nrr�r�Tr)r�r�rUr�r�rr�r�r[r"r�r]r�r�r�r�rrZ�
notify_allrlr	r!)	rqr�r�r�r%rXr�r�r�s	         r�test_notify_allz_TestCondition.test_notify_allnsF���~�~����>�>�!�$�����q�!�����q��A����D�F�F�#'��5�(�"C��E�A��A�H�
�G�G�I��N�N�1��� � ����'+�X�u�h�&G�I�A��A�H�
�G�G�I��N�N�1����q��A�������q��A��M�M�O���'�'��9�e�<�	
���T�"��q��A����D�F�F�$��%�1H��I�A��A�H�
�G�G�I��N�N�1��� � ����d�H�e�5L�M�A��A�H�
�G�G�I��N�N�1����q��A������	
�
�
�5���'�'��9�e�<�	
�������������q��A��M�M�O���'�'��9�e�<�	
���T�"��A��(�(��+�rc�^��|j�}|jd�}|jd��g}td�D]�}|j|j||�f��}d|_|j
�|j|�tj|j||�f��}d|_|j
�|j|���td�D]}|j��tjt�|jdt��|j�|j!d��|j#�|j%�fd�d�|j�|j!d	��|j#�|j%�fd
�d�|j�|j!d��|j#�|jdt��|j'|�|D]}t)j*|��y)Nrr�r�Trr)rwc���t��Srr�r�s�rr�z._TestCondition.test_notify_n.<locals>.<lambda>�r�rrbc���t��Srr�r�s�rr�z._TestCondition.test_notify_n.<locals>.<lambda>�r�r)r�r�rUr�r�r�r�r[r"r�r]r�rrZr�r�r�rlr�r�r	r!)	rqr�r�r%rXr�r�r�r�s	        @r�
test_notify_nz_TestCondition.test_notify_n�s�����~�~����>�>�!�$�����q�!�����q��A����D�F�F�$��%�1H��I�A��A�H�
�G�G�I��N�N�1��� � ����d�H�e�5L�M�A��A�H�
�G�G�I��N�N�1����q��A������	
�
�
�5���'�'��9�e�<�	
�������a�������	
�$�$�%=�q�A�	
�������a��������$�$�%=�q�A�	
�������a��������'�'��9�e�<�	
���T�"��A��(�(��+�rc�
�|j�}t|j�}|j�|t�}|j�|j
|d�|j|jt�yrD)	r�r~rr]rrlrlr�r�)rqr�rr�s    rr5z_TestCondition.test_timeout�s[���~�~����T�Y�Y�'�������8�n����������e�$��$�$�T�\�\�8�<rc����|5d�_|j�|j�fd��}|r�jdk7rtjd�ddd�y#1swYyxYw)Nrc�"���jdk(Sra�r���states�rr�z0_TestCondition._test_waitfor_f.<locals>.<lambda>��
���E�K�K��Nrrbr�)r�r��wait_forr{rg)r�r�r�r\s  ` r�_test_waitfor_fz_TestCondition._test_waitfor_f�sH���
��E�K��K�K�M��]�]�#:�;�F��U�[�[�A�-�������T�T�s�AA�A(zneeds sharedctypesc�v��|j�}|jdd��|j|j|�f��}d|_|j�|5|j
�fd��}|j|�|j�jd�ddd�td�D]G}tjd�|5�xjd	z
c_	|j�ddd��It|�|j|jd�y#1swY��xYw#1swY��xYw)
NrXrBr�Tc�"���jdk(S�Nrr�r�s�rr�z-_TestCondition.test_waitfor.<locals>.<lambda>r�rrrbrtr�)r�rr�r�r�r�r�r�rlr�rUr�rr�r'r�)rqr�r�r\rXr�s     @r�test_waitforz_TestCondition.test_waitfor�s�����~�~����
�
�3��#���L�L�� 4� 4�D�%�=�L�I�����	���	�
��]�]�#:�;�F��O�O�F�#����U�[�[�!�,��
�q��A��J�J�t������q� �����
����	�Q��������Q�'��T����s�AD#�&D/�#D,�/D8	c���|j�|5d}tj�}|j�fd�|��}tj�|z
}|s|tz
|krd|_ddd�y#1swYyxYw)Nrc�"���jdk(Srar�r�s�rr�z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r�rrT)rlr�r�r��	CLOCK_RESr�)r�r�r��successr�r]�dtr\s  `     r�_test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_fsd������
�
��H����!�B��]�]�#:�H�]�M�F����!�B�&�B��x�)�3��:� $��
�
�T�T�s�AA6�6A?c�j�|j�}|jdd�}|jdd�}|jd�}|j|j||||f��}d|_|j
�|j|jtj���td�D]G}tjd�|5|xjd	z
c_|j�ddd��It!|�|j|j�y#1swY�zxYw)
NrXrFr�Trr�rtr�)r�rr�r�r�r�r�r�r]rrrUr�rr�r�r')rqr�r�r�r�r�rXs       r�test_waitfor_timeoutz#_TestCondition.test_waitfor_timeouts����~�~����
�
�3��"���*�*�S�%�(���n�n�Q����L�L�� <� <�#�U�G�S�9�
�
;�����	���	�������G�,@�,@��A�B��q��A��J�J�u������q� �����
����	�Q������
�
�&���s�&D)�)D2	c���|5|j�ddd�tjd�|�%tj|t
j�yy#1swY�FxYwr�)r�r�rrCrHr<r�)r�r�r�s   r�_test_wait_resultz _TestCondition._test_wait_result7sB��
�
�H�H�J���
�
�1�
��?��G�G�C����'���Q�s�A�A"c�J�t|t�r(tjdk7rt	j
�}nd}|j
�}|5|j|jd��|j|jd��|j|j||f��}|j�|j|jd��|�!|jt|jd�|j�ddd�y#1swYyxYw)Nr1rrr��<)r�ProcessesMixinr{r|rCr�r�r�rr�r�r�r�rm�KeyboardInterruptr�)rqr�r�r�s    r�test_wait_resultz_TestCondition.test_wait_result?s����d�N�+�����0G��)�)�+�C��C��N�N���
����Q�V�V�A�Y�'����Q�V�V�C�[�)����D�$:�$:�!�S���J�A�
�G�G�I��O�O�A�F�F�2�J�'����!�!�"3�Q�V�V�R�@�
�F�F�H��Q�Q�s
�
CD�D"r)rvrwrxr�r�r�r�r�r�r�r5r�rGr��HAS_SHAREDCTYPESr�r�r�r�r�r[rrr�r�%s�������5�	�(�TC,�J5,�n=������X���)�+?�@�(�A�(�.�%��%��X���)�+?�@�'�A�'�.�(��(�rr�c�*�eZdZed��Zd�Zdd�Zy)�
_TestEventc�V�tjt�|j�yr)r�rr
r�r`s  r�_test_eventz_TestEvent._test_eventVs���
�
�8��
�	�	�rc�|�|j�}t|j�}|j|j	�d�|j|d�d�|j|jd�|j|t�d�|j|jt�|j�|j|j	�d�|j|�d�|j|jd�|j|t�d�|j|jd�|j�|j|j|f��}d|_|j�|j|�d�|j�y)NFr3Tr�)rr~rrlr�r�r�rr�r�r�r�r�r�r�)rqrQrr�s    r�
test_eventz_TestEvent.test_event[sF���
�
����U�Z�Z�(��	
��������/�	
����c��E�*��$�$�T�\�\�3�7�����h���/��$�$�T�\�\�8�<�
�	�	��	
��������.�������&��$�$�T�\�\�3�7�����h���.��$�$�T�\�\�3�7�	���
�
�L�L�� 0� 0��x�L�@�����	���	�������&�	���rNc���|j�}|jdk(rr|jt|�d�|j	�|jt|�d�|j�|jt|�d�y|jdk(rG|jt|�d�|j	�|jt|�d�yy)Nr�z<Event at .* unset>z<Event at .* set>r�z(<EventProxy object, typeid 'Event' at .*)rr��assertRegexr^r�r�)rqrQs  r�	test_reprz_TestEvent.test_repr~s����
�
����9�9��#����T�%�[�*@�A��I�I�K����T�%�[�*>�?��K�K�M����T�%�[�*@�A�
�Y�Y�)�
#����T�%�[�*U�V��I�I�K����T�%�[�*U�V�$r)�returnN)rvrwrxr�r�r�r�r[rrr�r�Ts ������!�FWrr�c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�
_DummyListc���tjjtjd��}tj
�}|j
||f�d|jd<y)NrXr)r�heap�
BufferWrapper�struct�calcsizerk�__setstate__�
_lengthbuf)rq�wrapperr_s   rr�z_DummyList.__init__�sO��!�&�&�4�4�V�_�_�S�5I�J���#�#�%�����7�D�/�*������rc�~�|\|_|_|jj�jd�|_y)NrX)�_wrapper�_lock�create_memoryview�castr�)rqr�s  rr�z_DummyList.__setstate__�s/��&+�#����
��-�-�9�9�;�@�@��E��rc�2�|j|jfSr)r�r�r�s r�__getstate__z_DummyList.__getstate__�s���
�
�t�z�z�*�*rc�t�|j5|jdxxdz
cc<ddd�y#1swYyxYw�Nrr��r�r�)rqrxs  rr[z_DummyList.append�s'��
�Z�Z��O�O�A��!�#���Z�Z�s�.�7c�d�|j5|jdcddd�S#1swYyxYwr�r�r�s r�__len__z_DummyList.__len__�s��
�Z�Z��?�?�1�%��Z�Z�s�&�/N)rvrwrxr�r�r�r[r�r[rrr�r��s���F�+�$�&rr�c�.�tjd�y)Nrtr.r[rr�_waitr��s���J�J�t�rc�6�eZdZdZd	d�Zd�Zd�Zd�Zd�Zd�Z	y)
�Bunchz
    A bunch of threads.
    c���||_||_||_|j�|_|j�|_|j
�|_|s|jj�g}t|�D]F}|j|j��}d|_|j�|j|��Hd�}	tj ||	|�|_y)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        r�Tc�2�|D]}|j��yr)r�)r�r�s  r�finalizez Bunch.__init__.<locals>.finalize�s��������rN)r�rRrw�	DummyList�started�finishedr�	_can_exitr�rUr��taskr�r�r[rkr��
_finalizer)
rq�	namespacer�rRrw�wait_before_exitr�rXr�r�s
          rr�zBunch.__init__�s��������	���� �*�*�,���!�+�+�-��
�"���*�����N�N��� ����q��A��!�!����!�3�A��A�H�
�G�G�I��N�N�1��	�	�"�*�*�4��7�C��rc���tj�}|jj|�	|j|j
�|jj|�|jjd�|jj�sJ�y#|jj|�|jjd�|jj�sJ�wxYw)N�)
rCr�r�r[r�rRr�r�rr��rqr�s  rr�z
Bunch.task�s����i�i�k�������C� �	+��D�F�F�D�I�I���M�M� � ��%��N�N����#��>�>�(�(�*�*�*��
�M�M� � ��%��N�N����#��>�>�(�(�*�*�*�s�B�AC1c��t|j�|jkr.t�t|j�|jkr�-yyr)r�r�rwr�r�s r�wait_for_startedzBunch.wait_for_started�s3���$�,�,��$�&�&�(��G��$�,�,��$�&�&�(rc��t|j�|jkr.t�t|j�|jkr�-yyr)r�r�rwr�r�s r�wait_for_finishedzBunch.wait_for_finished�s3���$�-�-� �4�6�6�)��G��$�-�-� �4�6�6�)rc�8�|jj�yr)r�r�r�s r�	do_finishzBunch.do_finish�s�������rc�$�|j�yr)r�r�s rr zBunch.close�s�����rNr�)
rvrwrxryr�r�rrrr r[rrr�r��s&���D�8+����rr�c��eZdZd�Zd�Zy)�
AppendTruec��||_yr)r!)rqr!s  rr�zAppendTrue.__init__�s	����rc�:�|jjd�yrH)r!r[r�s rr�zAppendTrue.__call__�s��������rNr�r[rrr
r
�s���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�Zy)�_TestBarrierz$
    Tests for Barrier objects.
    r�g>@c�\�|j|j|j��|_y)Nr)�Barrierrx�defaultTimeout�barrierr�s r�setUpz_TestBarrier.setUp�s ���|�|�D�F�F�D�4G�4G�|�H��rc�F�|jj�d|_yr)r�abortr�s r�tearDownz_TestBarrier.tearDown�s����������rc��|jdk(rgS|jdk(r|jj�St�S)Nr�r�)r�r�r�r�r�s rr�z_TestBarrier.DummyList�s:���9�9�	�!��I�
�Y�Y�)�
#��<�<�$�$�&�&��<�rc��t||||jdz
�}	||�|j�|j�y#|j�wxYwr�)r�rxrr )rqr�rRr�s    r�run_threadsz_TestBarrier.run_threadssE���$��4������*��	�
�t�H�
���!�
�G�G�I��A�G�G�I�s�A�Ac��|j}||jk(sJ�t|�D]y}|djd�t	|d�||zk(sJ�|j�|djd�t	|d�|dz|zk(sJ�|j��{	|jdk(sJ�	|jrJ�y#t$rY�wxYw)NrTr�)	�partiesrxrUr[r�r�	n_waitingr��broken)r�r�resultsrw�mrXs      r�	multipassz_TestBarrier.multipasss����O�O���C�E�E�z��z��q��A��A�J���d�#��w�q�z�?�a�!�e�+�+�+��L�L�N��A�J���d�#��w�q�z�?�q�1�u��k�1�1�1��L�L�N�
�	��$�$��)�)�)��>�>�!�!�>��#�	��	�s�&C�	C�Cc��|j�|j�g}|j|j|j||f�y)z;
        Test that a barrier is passed in lockstep
        N)r�rr r)rq�passesrs   r�test_barrierz_TestBarrier.test_barriers;���>�>�#�T�^�^�%5�6��������$�,�,���)H�Irc�$�|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        r:)r#r�s r�test_barrier_10z_TestBarrier.test_barrier_10&s��� � ��$�$rc�F�|j�}|j|�yr)rr�)r�rr#r�s    r�_test_wait_return_fz _TestBarrier._test_wait_return_f,s���l�l�n��
�	�	�#�rc�6�|j�}|j|j|j|f�t	|j
�D�cgc]}|j
���}}|j|jd�d�t|�ycc}w)z9
        test the return value from barrier.wait
        rr�N)
rrr'rrUrxr�rl�countr$)rqr#rXrs    r�test_wait_returnz_TestBarrier.test_wait_return1sv���
�
�������1�1�D�L�L�%�3H�I�(-�d�f�f�
�6�
�1�5�9�9�;�
��6�������q�)�1�-��E���7s�Bc�L�|j�t|�dk7rt�yr�)rr�r8)r�rrs   r�_test_action_fz_TestBarrier._test_action_f;s"�������w�<�1����rc���|j�}|j|jt|���}|j	|j
||f�|j
t|�d�y)z,
        Test the 'action' callback
        )r�r�N)r�rrxr
rr,rlr�)rqrrs   r�test_actionz_TestBarrier.test_actionAsZ���.�.�"���,�,�t�v�v�j��.A�,�B������,�,�w��.@�A�����W��q�)rc� �	|j�}||jdzk(rt�|j�|jd�y#tj
$r|jd�Yyt$r|j
�YywxYw�NrT)rrxr8r[r"�BrokenBarrierErrorr)r�r�results1�results2rXs     r�
_test_abort_fz_TestBarrier._test_abort_fJsn��		�����A��C�E�E�1�H�}�"�"��L�L�N��O�O�D�!���+�+�	"��O�O�D�!��	��M�M�O�	�s�A	A�$B
�2B
�B
c�f�|j�}|j�}|j|j|j||f�|j	t|�d�|j	t|�|jdz
�|j|jj�y)zK
        Test that an abort will put the barrier in a broken state
        rr�N)	r�rr4rrlr�rxr�r)rqr2r3s   r�
test_abortz_TestBarrier.test_abortWs����>�>�#���>�>�#������+�+��,�,��(�;�	=�����X���*�����X�����q��1�������+�+�,rc���|j�}||jdzk(r_|j|jdz
kr2tjd�|j|jdz
kr�2|j�n"	|j�|j
d�|j�|j
d�y#tj$r|j
d�Y�HwxYw)Nrr�ruT)	rrxrr�r�resetr[r"r1)r�rr2r3�results3rXs      r�
_test_reset_fz_TestBarrier._test_reset_fcs����L�L�N������q��=��#�#�c�e�e�A�g�-��
�
�5�!��#�#�c�e�e�A�g�-��M�M�O�
&���������%�	����������	�/�/�
&�����%�
&�s�!C�$C-�,C-c��|j�}|j�}|j�}|j|j|j|||f�|j	t|�d�|j	t|�|jdz
�|j	t|�|j�y)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rr�N)r�rr:rrlr�rx)rqr2r3r9s    r�
test_resetz_TestBarrier.test_resetus����>�>�#���>�>�#���>�>�#������+�+��,�,��(�H�E�	G�����X���*�����X�����q��1�����X�����/rc���	|j�}||jdzk(rt�|j�|jd�|j�|jdzk(r|j�|j�|j�|jd�y#tj
$r|jd�Y��t$r|j
�Y��wxYwr0)rrxr8r[r"r1rr8)r�r�barrier2r2r3r9rXs       r�_test_abort_and_reset_fz$_TestBarrier._test_abort_and_reset_f�s���		�����A��C�E�E�1�H�}�"�"��L�L�N��O�O�D�!��=�=�?�c�e�e�Q�h�&��M�M�O��
�
�������������+�+�	"��O�O�D�!��	��M�M�O�	�s�A	B-�-$C.�C.�-C.c��|j�}|j�}|j�}|j|j�}|j|j|j
||||f�|j
t|�d�|j
t|�|jdz
�|j
t|�|j�y)zF
        Test that a barrier can be reset after being broken.
        rr�N)r�rrxrr?rrlr�)rqr2r3r9r>s     r�test_abort_and_resetz!_TestBarrier.test_abort_and_reset�s����>�>�#���>�>�#���>�>�#���<�<����'������5�5��,�,��(�H�h�O�	Q�����X���*�����X�����q��1�����X�����/rc���|j�}||jdzk(rtjd�	|jd�y#tj
$r|j
d�YywxYw)Nrrcr�T)rrxr�rr"r1r[�r�rrrXs    r�_test_timeout_fz_TestBarrier._test_timeout_f�sY���L�L�N������q��=��J�J�s�O�	!��L�L�����+�+�	!��N�N�4� �	!�s�A�$A2�1A2c���|j�}|j|j|j|f�|j	t|�|jj�y)z$
        Test wait(timeout)
        N)r�rrDrrlr�r)rqrs  rr5z_TestBarrier.test_timeout�sM���.�.�"������-�-����g�/F�G�����W��t�|�|�';�';�<rc��|j|j�}||jdzk(rtjd�	|j�y#t
j$r|jd�YywxYw)NrrcT)rrrxr�rr"r1r[rCs    r�_test_default_timeout_fz$_TestBarrier._test_default_timeout_f�s_���L�L��+�+�,������q��=��J�J�s�O�	!��L�L�N���+�+�	!��N�N�4� �	!�s�A�$A<�;A<c���|j|jd��}|j�}|j|j||f�|jt
|�|j�y)z4
        Test the barrier's default timeout
        r�rN)rrxr�rrGrlr�r)rqrrs   r�test_default_timeoutz!_TestBarrier.test_default_timeout�sY���,�,�t�v�v�s�,�3���.�.�"������5�5���7I�J�����W��w���7rc�f�|jd�}|j�|j�yr�)rr)rqr�s  r�test_single_threadz_TestBarrier.test_single_thread�s!���L�L��O��	����	���rc��t|�D].}|j�|5|j|�ddd��0y#1swY�;xYwr)rUrr)r�rr"�connr_rXs      r�_test_thousand_fz_TestBarrier._test_thousand_f�s4���v��A��L�L�N���	�	�!�������s	�>�A	c�6�|jdk(r*|jdj|j��d}|j�}|j	d�\}}t|j�D]X}|j|j|j|||f��}|j�|j|j��Zt|�D]<}t|j�D]"}|j|j�|��$�>y)Nr�r���Fr�)r�r�r�rkr�rUrxr�rNrr�rdr�rlr�)rqr"r_rMr��jr�rXs        r�
test_thousandz_TestBarrier.test_thousand�s����9�9�	�!��M�M�7�>�>�t�y�y�I�J����y�y�{���9�9�U�+���j��t�v�v��A����D�$9�$9�!%���v�z�4� H��J�A�
�G�G�I��O�O�A�F�F�#�	��v��A��4�6�6�]��� � �����a�0�#�rNr�)rvrwrxryrxrrrr�rr�r r#r%r'r*r,r.r4r6r:r<r?rArDr5rGrIrKrNrRr[rrrr�s���	
�A��N�I�� ���"��"� J�%����������
*��
��
�
-�����"0�����*
0��!��!�=��!��!�8��
����1rrc	�f�eZdZdZddddded�ed�fgZd	�Zed
��Zdd�Z	d�Z
d
�Zy)�
_TestValuer�)rXi�i�^)�dg
@g�)�hi�����)r���r��x�yc�4�ts|jd�yy�Nz%requires multiprocessing.sharedctypes�r�r�r�s rrz_TestValue.setUp������M�M�A�B� rc�T�t||j�D]\}}|d|_�yr�)�zip�codes_valuesr�)r��values�sv�cvs    rr�z_TestValue._test�s(���&�#�"2�"2�3�F�B���!�u�B�H�4rc	�h�|r2|jD���cgc]\}}}|j||���}}}}n1|jD���cgc]\}}}|j||���}}}}t||j�D]$\}}|j	|j
|d��&|j
|j|f��}d|_|j�|j�t||j�D]$\}}|j	|j
|d��&ycc}}}wcc}}}w)Nr�r�Tr)rb�RawValuerrarlr�r�r�r�r�r�)	rq�raw�coder�rxrcrdrer�s	         r�
test_valuez_TestValue.test_value	s���,0�,=�,=�?�,=�.�$��q��m�m�D�%�0�,=�
�?�-1�,=�,=�?�,=�.�$��q��j�j��u�-�,=�
�?��&�$�"3�"3�4�F�B�����R�X�X�r�!�u�-�5��|�|�4�:�:�V�I�|�>������
�
���	�	���&�$�"3�"3�4�F�B�����R�X�X�r�!�u�-�5��?��?s�D&�D-c�(�|jd��y�NT)rh)rjr�s r�
test_rawvaluez_TestValue.test_rawvalue	s�����D��!rc���|jdd�}|j�}|j�}|jddd��}|j�}|j�}|j�}|jdd|��}|j�}	|j�}
|j	||	�|jddd��}|jt
|d��|jt
|d��|jt|jddd��|jdd�}|jt
|d��|jt
|d��y)NrXr��r_F�get_lock�get_obj�navalue)
rrprqrkrlr�r;rmrErg)
rq�val1�lock1�obj1�val2�lock2�obj2r_�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�3������y�1�2����.�$�*�*�c�1�9��M��}�}�S�!�$�������z�2�3������y�1�2rNr�)rvrwrxr�rrbrr�r�rjrmr~r[rrrTrT�sW��"�M�	����	�e�C�j�%��*�%�
�L�C�����
.�&"�3rrTc��eZdZdZed��Zejedud�d	d��Z	ejedud�d��Z
ejedud�d��Zejedud�d��Zy)
�
_TestArrayr�c�^�tdt|��D]}||xx||dz
z
cc<�yr�)rUr�)r��seqrXs   rr�z_TestArray.f8	s-���q�#�c�(�#�A���F�c�!�A�#�h��F�$rNzrequires _ctypesc��gd�}|r|jd|�}n|jd|�}|jt|�t|��|j|d|d�|jt	|dd�t	|dd��tj
dgd��x|dd|dd|jt	|dd�|�|j
|�|j|j|f�	�}d
|_|j�|j�|jt	|dd�|�y)N)
i�iri�i5���i$i�i�i?rXr�rr)r�rr�rbrbr�r�T)�RawArray�Arrayrlr�r��arrayr�r�r�r�r�)rqrhr��arrr�s     r�
test_arrayz_TestArray.test_array=	s��@����-�-��S�)�C��*�*�S�#�&�C�����S��3�s�8�,�����Q���Q��(�����c�!�A�h���c�!�A�h��8�#�k�k�#�|�<�<��A�a��3�q��8�����c�!�f��s�+����s���L�L����c�V�L�4�����	���	�	��������c�!�f��s�+rc	�8�d}td�D]�}|jd|�}|jt|�|�|jt	|�dg|z�td�|dd|jt	|�t	td���~��y)Nr:r�rXr)rUr�rlr�r�)rq�sizerxr�s    r�test_array_from_sizez_TestArray.test_array_from_sizeV	s�����
�q��A��*�*�S�$�'�C����S��X�t�,����T�#�Y���d�
�3��2�Y�C��F����T�#�Y��U�2�Y��8��
rc�(�|jd��yrl)r�r�s r�
test_rawarrayz_TestArray.test_rawarraye	s�����D��!rc��|jdttd���}|j�}|j	�}|jdttd��d��}|j�}|j	�}|j�}|jdttd��|��}|j�}	|j	�}
|j
||	�|jdtd�d��}|jt|d��|jt|d��|jt|jdtd�d��|jdtd��}|jt|d��|jt|d��y)NrXr:roFrprq�notalock)r�r�rUrprqrkrlr�r;rmrEr�)
rq�arr1rtru�arr2rwrxr_�arr3rzr{r|r}s
             r�test_getobj_getlock_objz"_TestArray.test_getobj_getlock_obji	sX���z�z�#�t�E�"�I��/���
�
����|�|�~���z�z�#�t�E�"�I��T�z�:���
�
����|�|�~���y�y�{���z�z�#�t�E�"�I��T�z�:���
�
����|�|�~������u�%��z�z�#�u�R�y�u�z�5�������z�2�3������y�1�2����.��*�*�c�5��9�:�	�	G��}�}�S�%��)�,�������z�2�3������y�1�2rr�)
rvrwrxr�r�r�rGrzr=r�r�r�r�r[rrr�r�4	s���"�M������X�_�_�U�d�]�$6�7�,�8�,�0�X�_�_�U�d�]�$6�7��8���X�_�_�U�d�]�$6�7�"�8�"��X�_�_�U�d�]�$6�7�3�8�3rr�c�@�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)�_TestContainers�r�c��|jttd���}|j|ddttd���|j�}|j|ddg�|jttd���|j|ddttd���|j|dd�|j|ddgd��|dz}|j|ddgd��|j|ddgzgd��|j|ddttd���||g}|j|�}|j|D�cgc]}|dd��	c}gd�gd�g�|j|g�}|j	d	�|j|d
ddgd��ycc}w)Nr:r�r)rr�rb)
rr�rr�rbrr�rr�rbr)rr�rr�rbrr�rr�rbr�r)
rr�rr�rbr�rrr��	rr)rr�rr�rbr�rrr�r�r)r�rUrl�extendr[)rqr�r�rUr�elementr�s       r�	test_listz_TestContainers.test_list�	s~���I�I�d�5��9�o�&������1��t�E�"�I��/��I�I�K������1��r�"�	����e�A�h�� �����1��t�E�!�H�~�.�����1��q�!�����1�R��'�*�	�Q�������1��=�>�����a��V��%I�J�����1��t�E�"�I��/�
��F���I�I�a�L�����'(�)�q�G�W�Q�Z�q�)�
+�-K�L�	�

�I�I�q�c�N��	���������1��a��"I�J��

*s�&F>c�F�|jttd���}t|�}|jt|�ttd���|jt|�g�t|�}d|d<|jt	|�d�y)Nr:r-r)r�rUr�rl�next)rqr��its   r�test_list_iterz_TestContainers.test_list_iter�	sw���I�I�d�5��9�o�&��
�!�W������b��4��b�	�?�3�����b��2�&�
�!�W����!������b��3�'rc
��|jtd�D�cgc]}|jtd����c}�}|j|D�cgc]}|dd��	c}gd�gdz�d|dd<|j|dddgd��tdd�D]}|j||ddgd���|j|dj�d�|jt	|d�d�tddd�D] }|jt	||�d��"~|j�}|j|�~ycc}wcc}w)	Nr�)rr�r�7rrB)rr�r�r�r)r�rUrl�popr�r[)rq�_ir��innerrXr�s      r�test_list_proxy_in_listz'_TestContainers.test_list_proxy_in_list�	s*���I�I�U�1�X�>�X�r�t�y�y��q��*�X�>�?������2��u�%��(��2�Y�K�!�O�D���!��R������1��a��*�-��q�!��A����Q�q�T�!�W�i�0��	
����1�����Q�'�����Q�q�T��A�&��q�!�Q��A����S��1��Y��*� �
��I�I�K��	�����
��#?��2s�!E�Ec
�B�|j�}ttdd��}|D]}t|�||<�|j	|j�td�|D���|j	t
|j��|�|j	t
|j��|D�cgc]
}t|���c}�|j	t
|j��|D�cgc]}|t|�f��c}�ycc}wcc}w)N�A�Fc3�6K�|]}|t|�f���y�wr)�chr��.0rXs  r�	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>�	s����'E�W���C��F��W�s�)
�dictr�rUr�rlr�sorted�keysrcr�)rqrU�indicesrXs    r�	test_dictz_TestContainers.test_dict�	s����I�I�K���u�R��}�%���A��q�6�A�a�D���������4�'E�W�'E�#E�F���������)�7�3��������
�+�g�-F�g��c�!�f�g�-F�G��������	�*�'�,J�'�Q�a��Q��[�'�,J�K��.G��,Js�;D
�;D
c�f�|j�}ttdd��}|D]}t|�||<�t	|�}|jt|�|�|jt|�g�t	|�}|j
�|jtt|�y)Nr�r�)
r�r�rUr�r�rlr�rmr8r�)rqrUr�rXr�s     r�test_dict_iterz_TestContainers.test_dict_iter�	s����I�I�K���u�R��}�%���A��q�6�A�a�D��
�!�W������b��7�+�����b��2�&�
�!�W��	���	����,��b�1rc��|jdd��}|jdd��}|j||��}|j|dd�|j|d	dd�d
|d	d<|j|dd
�|j|d	dd
�d|d	d<|j|dd�|j|d	dd�~~|j|d
dd�d|d	d<|j|d	dd�|d
}|d	}d|d<|j|dd�|j|d	dd�|j�|jt|�d�|j|dd�|j|dd�|j	||g�}d|dd<|j|dd�|j|ddd�~~|j|ddd�|j	ddg|g�}|j|dt�|j|dddd�y)Nrrb)�ferrets�hamstersr:r�)�water�feed)�pets�suppliesr�r�r��blanketsrr�r��rr�r��marmots�X�crBr�)r�rlr�r�r�r�)rqr�r�rUr`�outers      r�test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nested�	sf���y�y��Q�y�/���9�9�2�A�9�.���I�I�4�(�I�3������'�*�B�/�����:��w�/��4�$%��*�
�j�!�����*�-�q�1�����:��z�2�A�6�!"��*�
�g������'�*�A�.�����:��w�/��3�������6��9�-�q�1�$&��*�
�j�!�����:��z�2�B�7���y���Z�=����������'�*�A�.�����:��w�/��3�	���	�����Q���#�����'�*�A�.�����j�)�1�-��I�I�t�X�&�'����!��Y������i��!�,�����1��i��!�,�������1��i��!�,��	�	�B��8�Q�-�(�����e�A�h��-�����r��2��v�.��2rc��|j�}|j|j��|djd�|j	|dj�d�|j
�}|j�|d<|djd�|j	|dj�d�y)Nr�{��)r�r[rr�rlr�r�r�s   r�test_nested_queuez!_TestContainers.test_nested_queue
s����I�I�K��	��������	�!�����
�����1�����S�)��I�I�K���z�z�|��!��	�!�����
�����1�����S�)rc�F�|j�}d|_d|_d|_|j	|j|jfd�|`|j	t|�d�|j
t|d��|j
t|d��y)N�Bob�Builder�hidden)r�r�zNamespace(name='Bob')r,�job)�	Namespacer,r��_hiddenrlror�r;)rqrws  r�test_namespacez_TestContainers.test_namespace
s����N�N�����������	����!�&�&�!�%�%��*<�=�
�E�����Q��!8�9������6�*�+����G�A�u�-�-�.rN)rvrwrxr�r�r�r�r�r�r�r�r�r[rrr�r��	s2�� �M�K�>(��(L�2�,3�\*�	/rr�c�f�|�tj|�||zS|j|�||zSr)r�rr)rZrrQs   r�sqrr�&
s5���}��
�
�4��
�Q�3�J�	�
�
�4���Q�3�Jrc��||zSrr[)rZr[s  r�mulr�-
����Q�3�Jrc�H�tj|�tddz��)NrZi)r�rrFr4s r�raise_large_valuerrorr�0
s���J�J�t��
�S�7�]�
#�#rc��|Srr[�rZs r�identityr�4
s���Hrc��eZdZdZd�Zd�Zy)�
CountedObjectrc�V�|xjdz
c_tj|�Sr�)�n_instancesr<�__new__r/s rr�zCountedObject.__new__:
s�����1����~�~�c�"�"rc�@�t|�xjdzc_yr�)rr�r�s r�__del__zCountedObject.__del__>
s���T�
���!�#�rN)rvrwrxr�r�r�r[rrr�r�7
s���K�#�$rr�c��eZdZy)�SayWhenErrorN�rvrwrxr[rrr�r�A
s�rr�c#�tK�|dk(rtd��t|�D]}||k(rtd��|���y�w)NrBzSomebody said when)r�rU)�total�whenrXs   r�exception_throwing_generatorr�C
s?�����r�z��/�0�0�
�5�\����9��3�4�4����s�68c����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�N��t�|��|jd�|_yra)�super�
setUpClass�Pool�pool�r��	__class__s �rr�z_TestPool.setUpClassN
s���
�����8�8�A�;��rc���|jj�|jj�d|_t�|��yr)r�r
r�r��
tearDownClassr�s �rr�z_TestPool.tearDownClassS
s2������������
�
�����
���rc���|jj}|j|td�td��|j|tdddi�td���y)N)r�r�r[rZr�r�)r��applyrlr�)rq�papplys  r�
test_applyz_TestPool.test_applyZ
sK�������������T�*�C��F�3������R�#�a��1�3��8�<rc
��|jj}|j|tt	td���t	ttt	td�����|j|tt	td��d��t	ttt	td�����y)Nr:r-r���	chunksize)r��maprlr�r�rU)rq�pmaps  r�test_mapz_TestPool.test_map_
s|���y�y�}�}������c�4��b�	�?�3�T�#�c�4��b�	�?�:S�5T�U�����c�4��c�
�#3�r�B��c�#�t�E�#�J�'7�8�9�	;rc
���|jj}ttt	d�t	ddd���}|j|t|�ttjt|���ttt	d�t	ddd���}|j|t|d��ttjt|���y)Nr:r�rBr-r�r�r�)r��starmapr�rarUrlr�r�)rq�psmap�tupless   r�test_starmapz_TestPool.test_starmape
s����	�	�!�!���c�%��)�U�1�R��_�5�6������s�F�+��i�/�/��V�<�=�	?��c�%��*�e�B�r�2�&6�7�8������s�F�b�9��i�/�/��V�<�=�	?rc
��tttd�tddd���}|j|jjt|�j�ttjt|���y)Nr-r�rB)
r�rarUrlr��
starmap_asyncr�r�r�r�)rqrs  r�test_starmap_asyncz_TestPool.test_starmap_asyncn
s_���c�%��*�e�B�r�2�&6�7�8��������0�0��f�=�A�A�C��i�/�/��V�<�=�	?rc
��|j|jjtt	td���j
�t	ttt	td�����y�Nr:)rlr��	map_asyncr�r�rUr�r�r�s r�test_map_asyncz_TestPool.test_map_asyncs
sK��������,�,�S�$�u�R�y�/�B�F�F�H��c�#�t�E�"�I��7�8�	:rc�<�|jdk(r|jj�ng}|jj	t
dg|j|j��j�|jdt|��|jdg|d�|jj	t
dg|j|j��j�|jdt|��|j|dt�y)Nr��1)�callback�error_callbackr�rr�r)r�r�r�r�rrMr[rrlr�r�rF)rq�	call_argss  r�test_map_async_callbacksz"_TestPool.test_map_async_callbacksw
s���+/�9�9�	�+A�D�L�L�%�%�'�r�	��	�	���C�#��%.�%5�%5�+4�+;�+;�	�	=�=A�T�V�����C�	�N�+����!��i��l�+��	�	���C�#��%.�%5�%5�+4�+;�+;�	�	=�=A�T�V�����C�	�N�+����i��l�J�7rc�:�|jdk(r*|jdj|j��Gd�dt�}|j	t
�5|jjt|�gdz�ddd�y#1swYyxYw)Nr�r�c��eZdZd�Zy)�*_TestPool.test_map_unplicklable.<locals>.Ac��td��)Nz
cannot pickler7r�s rr�z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__�
s
��"�?�3�3rNr:r[rr�Ar�
s��
4rrr:)	r�r�r�r<rmr8r�r�r�)rqrs  r�test_map_unplicklablez_TestPool.test_map_unplicklable�
sl���9�9�	�!��M�M�7�>�>�t�y�y�I�J�	4��	4��
�
�|�
,��I�I�M�M�#���u�R�x�(�-�
,�
,�s�*B�Bc���	|jjtgd��jt��y#t
j$r|jd�YywxYw)Nr�r�rz2pool.map_async with chunksize stalled on null list)r�rr�r�rr�TimeoutErrorrjr�s r�test_map_chunksizez_TestPool.test_map_chunksize�
sS��	L��I�I����R�1��5�9�9�(�9�K���+�+�	L��I�I�J�K�	L�s�69�$A �A c���|jdk(r*|jdj|j��|jt�5|j
j
ttdd�d�ddd�|jt�5|j
j
ttdd�d�ddd�|jt�5|j
j
ttdd�d�ddd�Gd�d�}|jt�5|j
j
t|�d�ddd�|jt�5|j
j
t|�d�ddd�y#1swY��/xYw#1swY��xYw#1swY��xYw#1swY�sxYw#1swYyxYw)	Nr�r�r�rBr:r�c��eZdZd�Zd�Zd�Zy)�E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec��|Srr[r�s r�__iter__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__�
s���rc��t�r)r�r�s r�__next__zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__�
s��"�"rc��yr�r[r�s rr�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__�
s��rN)rvrwrxrrr�r[rr�SpecialIterabler�
s��
�
#�
rr!)	r�r�r�rmr�r�r�r�r�)rqr!s  r�"test_map_handle_iterable_exceptionz,_TestPool.test_map_handle_iterable_exception�
sK���9�9�	�!��M�M�7�>�>�t�y�y�I�J��
�
�|�
,��I�I�M�M�#�;�A�r�B�A�F�-��
�
�|�
,��I�I�M�M�#�;�A�r�B�A�F�-��
�
�|�
,��I�I�M�M�#�;�B��B�A�F�-�	�	��
�
�|�
,��I�I�M�M�#��0�!�4�-�
�
�
�|�
,��I�I�M�M�#��0�!�4�-�
,�%-�
,��-�
,��-�
,��-�
,��
,�
,�s<�,F(�,F5�!,G�4'G
�8'G�(F2�5F>�G
�
G�G"c���|jjtdtf�}t	|j
�}|j
|�d�|j|jt�y)Nr�1)	r��apply_asyncr�rr~r�rlr�r�)rqr�r�s   r�
test_asyncz_TestPool.test_async�
sP���i�i�#�#�C�!�X��8���C�G�G�$��������#��$�$�S�[�[�(�;rc�V�|jd�}	|jdk(rtj�nd}|j	t
dttjz|f�}t|j�}|jtj|t��|j|jt�|�|j!�|j#�|j%�y#�|j!�|j#�|j%�wxYw)Nr�r�rr)r�r�r"rr%r�r
rrr~r�rmrrr�r�r�r
r�)rqr�rQr�r�s     r�test_async_timeoutz_TestPool.test_async_timeout�
s����I�I�a�L��
	�)-���i�)?�I�O�O�%�T�E��-�-��a��G�4I�4I�)I�5�%Q�R�C�����(�C����o�:�:�C���R��(�(����h�?�� ��	�	��
�K�K�M�
�F�F�H��� ��	�	��
�K�K�M�
�F�F�H�s�B.C4�44D(c
���|jjttt	d���}|jt|�tt
ttt	d�����|jjttt	d���}t	d�D] }|jt|�||z��"|jt|j�|jjttt	d��d��}t	d�D] }|jt|�||z��"|jt|j�y�Nr:rPr-r�)r��imapr�r�rUrlr�r�rm�
StopIterationr�rqr�rXs   r�	test_imapz_TestPool.test_imap�
s���
�Y�Y�^�^�C��e�B�i��
1������b��4��C��e�B�i��(A�#B�C�
�Y�Y�^�^�C��e�B�i��
1���r��A����T�"�X�q��s�+�����-����5�
�Y�Y�^�^�C��e�D�k�!2�c�^�
B���t��A����T�"�X�q��s�+�����-����5rc�x�|jdk(r*|jdj|j��|jj	t
t
dd�d�}|jt|j�|jj	t
t
dd�d�}|jt|j�|jj	t
t
dd�d�}td�D] }|jt|�||z��"|jt|j�|jj	t
t
dd�d	�}td
�D] }|jt|�||z��"|jt|j�|jj	t
t
dd�d�}td�D] }|jt|�||z��"|jt|j�y)Nr�r�r�rBr:r�r�rrrrb)
r�r�r�r�r+r�r�rmr�rrUrlr�r-s   r�#test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exception�
s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��Y�Y�^�^�C�!=�a��!D�a�
H�����,����4�
�Y�Y�^�^�C�!=�a��!D�a�
H�����,����4�
�Y�Y�^�^�C�!=�b�!�!D�a�
H���q��A����T�"�X�q��s�+�����,����4��Y�Y�^�^�C�!=�b�!�!D�a�
H���q��A����T�"�X�q��s�+�����,����4�
�Y�Y�^�^�C�!=�b�!�!D�a�
H���q��A����T�"�X�q��s�+�����,����4rc
���|jjttt	d���}|jt
|�ttttt	d�����|jjttt	d��d��}|jt
|�ttttt	d�����yr*)r��imap_unorderedr�r�rUrlr�r�)rqr�s  r�test_imap_unorderedz_TestPool.test_imap_unordered�
s���
�Y�Y�
%�
%�c�4��b�	�?�
;��������T�#�c�4��b�	�?�*C�%D�E�
�Y�Y�
%�
%�c�4��d��+<��
%�
L��������T�#�c�4��d��3D�*E�%F�Grc
��|jdk(r*|jdj|j��|jj	t
t
dd�d�}|jt|j�|jj	t
t
dd�d�}|jt|j�|jj	t
t
dd�d�}ttt
ttd����}|jt�5td�D]0}t|�}|j||�|j|��2	ddd�|jj	t
t
dd�d	�}ttt
ttd����}|jt�5td�D]0}t|�}|j||�|j|��2	ddd�y#1swY��xYw#1swYyxYw)
Nr�r�r�rBr:r�r�rr)r�r�r�r�r2r�r�rmr�rr�r�rUr�rnr�)rqr��expected_valuesrXr�s     r�-test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exception�
s����9�9�	�!��M�M�7�>�>�t�y�y�I�J��Y�Y�
%�
%�c�&B�1�b�&I�&'�)��	
���,����4�
�Y�Y�
%�
%�c�&B�1�b�&I�&'�)��	
���,����4�
�Y�Y�
%�
%�c�&B�2�q�&I�&'�)���s�3��U�2�Y��8�9��
�
�
�|�
,��2�Y���R����
�
�e�_�5��&�&�u�-��-��Y�Y�
%�
%�c�&B�2�q�&I�&'�)���s�3��U�2�Y��8�9��
�
�
�|�
,��2�Y���R����
�
�e�_�5��&�&�u�-��-�
,�-�
,��-�
,�s�;?H7�.?I�7I�Ic���|jdk(rtnt}|j||jd�|j||jd�|jdk7rX|j	d�}	|jdt
|j��|j�|j�yy#|j�|j�wxYw)Nr�rBrr�)
r��RemoteErrorrFrmr�rlr��_poolr r�)rq�expected_errorr�s   r�test_make_poolz_TestPool.test_make_pools���)-���i�)?�+�)�	�	
���.�$�)�)�R�8����.�$�)�)�Q�7��9�9�	�!��	�	�!��A�
�� � ��C����L�1����	�����
"��
���	�����s�7%B>�>"C c�P�tj}|jdk(rd}|jd�}t	d�D�cgc]}|��}}|jtj|d��}t
jd�|j�|j�ycc}w)Nr�r�r�i'r�r2)
rrr�r�rUrr�rr
r�)rq�
sleep_timer�rXrRr\s      rrDz_TestPool.test_terminate$s���)�)�
��9�9�	�!��J��I�I�a�L��$)�&�M�2�M�q�
�M��2����T�Z�Z����;���
�
�3��	���
�	�����	3s�	B#c���|jd�}|j|jtg�g�|jt	|jtg��g�|jt	|j
tg��g�|j|jtg�j�g�|j�|j�yr�)r�rlr�r�r�r+r2rr�r r��rqr�s  r�test_empty_iterablez_TestPool.test_empty_iterable5s����I�I�a�L��������s�B���,�����a�f�f�S�"�o�.��3�����a�.�.�s�B�7�8�"�=�������S�"�-�1�1�3�R�8�	���	�	���rc��|jdk(r�ttd��}|D�cgc]
}t|���}}|j	d�5}|jt|�}|j
|j�|�ddd�j�|jt|j
t|�yycc}w#1swY�FxYw)Nr�r:r)r�r�rUr�r�rrlr�r�rmrF)rq�LrXr]r��rs      r�test_contextz_TestPool.test_contextAs����9�9��#��U�2�Y��A�()�*��1��A���H�*����1����K�K��Q�'��� � �����(�3��
�F�F�H����j�!�+�+�s�A�>�$��*���s�C�
7C	�	Cc��td��)Nr�r7r/s r�_test_tracebackz_TestPool._test_tracebackKs
���3��rc���|jdk(�r|jd�5}	|j|j�|j	d�ddd�j
�|jt�t�|j|jd�|j}|jt|�tjj�|j!d|j"�t$j&j)�5}	|�yy#t
$r}|}Yd}~��d}~wwxYw#1swY��xYw#t$r't+j,t+j.��YnwxYw	ddd�n#1swYnxYw|j!dj1��|jd�5}	|j3t4t7dd�d�|j	d�n#t
$r}|}Yd}~nd}~wwxYw|jt|�t8�|j|jd�ddd�n#1swYnxYw|j
���O)Nr�r�zexpected RuntimeError)r�z&raise RuntimeError(123) # some commentrBzexpected SayWhenError)r�r�r�rFrjrir�rorr8rlrR�	__cause__rr��RemoteTracebackrn�tbr=rr>r{�
excepthook�exc_info�getvaluer�r�r�r�)rqr�r�exc�cause�f1s      r�test_tracebackz_TestPool.test_tracebackOs����9�9��#����1���7��G�G�D�0�0�1��I�I�5�6�
�
�F�F�H��M�M�$�s�)�\�2����S�X�X�v�.��M�M�E��M�M�$�u�+��';�';�'K�'K�L��M�M�B�E�H�H�M����-�-�/�2�4��I��#$��!���C�������"$�4��N�N�C�L�L�N�3�4��3�	0�/�/��

�M�M�B��+�+�-�
)����1���7��E�E�#�;�A�r�B�A�F��I�I�5�6��!���C�����
�
�d�3�i��6��
�
�c�m�m�T�2�����
�F�F�H�s��D:�D"�D:�F�E�"	D7�+D2�-D:�2D7�7D:�:E�-E6�3F�5E6�6F�F�I�!G5�#I�5	H
�>H�I�H
�
>I�Ic��td��)NrSr7r/s r�_test_wrapped_exceptionz!_TestPool._test_wrapped_exceptionus
���5�!�!rc��|jd�5}|jt�5|j|j�ddd�ddd�j�y#1swY�"xYw#1swY�&xYwr�)r�rmr8r�rSr�r?s  r�test_wrapped_exceptionz _TestPool.test_wrapped_exceptionysU��
�Y�Y�q�\�Q��"�"�<�0�����4�4�5�1��	
����1�0���\�s"�A1�A%�A1�%A.	�*A1�1A:c�,�tj�}|jt�5|j	d�5}	|jtddg�tjd�|j�|j�	ddd�ddd�|jtj�|z
d�y#tjd�|j�|j�wxYw#1swY�sxYw#1swY�wxYw)Nrrr�r�g�������?)r�r�rmrFr�r�r�rr r��
assertGreater)rq�t_startr�s   r�test_map_no_failfastz_TestPool.test_map_no_failfast�s����.�.�"��
�
�
�z�
*����1�����E�E�/�!�Q��8��J�J�s�O��G�G�I��F�F�H�
�+�	
���4�>�>�+�g�5�s�;���J�J�s�O��G�G�I��F�F�H��
���+�
*�s9�D
�C>�C�5C>�D
�7C;�;C>�>D	�D
�
Dc��td�D�cgc]}t���}}|D�cgc]}tj|���}}|jjt|�~tj�tjt�|jtd�|D��dh�|jtjd�ycc}wcc}w)Nr:c3�*K�|]}|����
y�wrr[)r�rps  rr�z3_TestPool.test_release_task_refs.<locals>.<genexpr>�s����1�D�b�R�T�D�s�r)rUr�rkrlr�r�r�rmrnr�rrZrlr�r�)rqrX�objs�o�refss     r�test_release_task_refsz _TestPool.test_release_task_refs�s���*/�r��3��A�
����3�(,�-��1����A����-��	�	�
�
�h��%��
�
�
���
�
�5������1�D�1�1�D�6�:�	
����2�2�A�6��4��-s
�C�Cc�:�|jdk(r|jd�|jd�}|5	ddd�|jt�5|5	ddd�ddd�|j�y#1swY�DxYw#1swY�.xYw#1swY�2xYw)Nr��test not applicable to managerr�)r�r�r�rmrFr��rqr�s  r�
test_enterz_TestPool.test_enter�sw���9�9�	�!��M�M�:�;��y�y��|��
���
�
�
�z�
*����+�	
�	�	���T�����+�
*�s/�A9�B�B�B�9B�B	�
B�Bc�p�|jdk(r|jd�|jd�}|j�|j	�t
jj|_tjdtf�5d}tj�ddd�y#1swYyxYw)Nr�rar�z%unclosed running multiprocessing pool)r�r�r�r
r�rr��RUN�_stater
�check_warnings�ResourceWarningr�
gc_collectrbs  r�test_resource_warningz_TestPool.test_resource_warning�s����9�9�	�!��M�M�:�;��y�y��|�������	�	��&�*�*�.�.���
�
+�
+�8�/�J�L��D���� �L�L�L�s�B,�,B5)"rvrwrxr�r�r�r�r�rrr	rrrr"r&r(r.r0r3r6r;rDr@rDrFrQrSrUrYr_rcrj�
__classcell__�r�s@rr�r�L
s��������� �� �=�
;�?�?�
:�8�)�L�5�4<��6�5�4H�".�H
��"
�?�� �� �$�L�"��"��<�(
7�� !rr�c��td��)N�key)�KeyErrorr[rr�raisingrp�s��
�5�/�rc��d�S)Nc��y)N�*r[r[rrr�z%unpickleable_result.<locals>.<lambda>�s��2rr[r[rr�unpickleable_resultrt�s���rc��eZdZdZd�Zd�Zy)�_TestPoolWorkerErrorsr�c�H��tjd�}dg��fd�}|jt|��}|j	t
|j�|j�d�|j�dt
�|j�|j�y)Nrc���|�d<yr�r[�rN�
scratchpads �r�errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�s����J�q�Mr�r
r)rr�r%rprmror�r�r�r r�)rqr�r{r�rzs    @r�test_async_error_callbackz/_TestPoolWorkerErrors.test_async_error_callback�s}���� � ��#���V�
�	 ��m�m�G�G�m�<�����(�C�G�G�,����
�1�
�&����j��m�X�6�	���	�	���rc����ddlm}tjd�}t	d�D]�}dg��fd�}|jt|��}|j||j��d}|j|�|j�d|�|j|j�|j|j���|j�|j�y)Nr)�MaybeEncodingErrorrr�c���|�d<yr�r[rys �rr{z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback�s��� #�
�1�
rr|)�multiprocessing.poolrrr�rUr%rtrmr�r�r��assertIsNotNonerNr�r r�)rqrr��	iterationr{r��wrappedrzs       @r�test_unpickleable_resultz._TestPoolWorkerErrors.test_unpickleable_result�s����;�� � ��#���r��I���J�
$��-�-� 3�G�-�L�C����0�#�'�'�:� ��m�G��O�O�G�$��!�!�*�Q�-�1C�D�� � ����-�� � ����/�#�	
���	�	���rN)rvrwrxr�r}r�r[rrrvrv�s��#�M�
�rrvc�(�eZdZdZd�Zd�Zd�Zd�Zy)�_TestPoolWorkerLifetimer�c��tjdd��}|jdt|j��|jD�cgc]}|j
��}}g}t
d�D](}|j|jt|f���*t|�D].\}}|j|j�t|���0|j�d}|rYtd�|jD��s=|dz}tjt �|rtd�|jD��s�=|jD�cgc]}|j
��}	}|j#d|�|j#d|	�|j%t'|�t'|	��|j)�|j+�ycc}wcc}w)Nr�r:��maxtasksperchildr-�2c3�<K�|]}|j����y�wr�r�)r�r�s  rr�zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>s����#B�'�Q�A�J�J�L�'���r�)rr�rlr�r9r�rUr[r%r��	enumerater��_repopulate_pool�allr�rrZrr&r�r r�)
rqr�r��origworkerpidsrrXrQr��	countdown�finalworkerpidss
          r�test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetime�sk��� � ��R�8������C����L�)�)*���1��A�!�%�%���1����s��A��N�N�1�=�=��q�e�4�5��"�'�*�H�Q�����S�W�W�Y��A��/�+�	
�����	���#B�!�'�'�#B� B���N�I��J�J�u����#B�!�'�'�#B� B�+,�'�'�2�'�Q�1�5�5�'��2�����~�.������/����F�>�2�F�?�4K�L�	���	�	�����12��"3s�G
�Gc�\�tjdd��}g}td�D])}|j|j	t
|df���+|j
�|j�t|�D].\}}|j|j�t|���0y)Nr�r�r�rg333333�?)rr�rUr[r%r�r r�r�rlr�)rqr�rrXrQr�s      r�%test_pool_worker_lifetime_early_closez=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closes���
� � ��Q�7�����q��A��N�N�1�=�=��q�#�h�7�8��	���	�	����!�'�*�H�Q�����S�W�W�Y��A��/�+rc��dD]7}|jt�5tjd|��ddd��9y#1swY�DxYw)N)rrBr��12r�r�)rmrFrr�)rqr�s  r�"test_pool_maxtasksperchild_invalidz:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalids9��'�E��"�"�:�.��$�$�Q��?�/�.�(�.�.�s	�>�A	c��d}tjjjd|�\}}}|j	|d�y)Na�if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        �-cr)r=rr�assert_python_okrl�rq�cmdrh�outrrs     r�>test_worker_finalization_via_atexit_handler_of_multiprocessingzV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessing#s=�����|�|�1�1�B�B�4��M���C������Q�rN)rvrwrxr�r�r�r�r�r[rrr�r��s��#�M��:0�@�
 rr�)�BaseManager�	BaseProxyr8c��eZdZd�Zd�Zd�Zy)�FooBarc��y)N�f()r[r�s rr�zFooBar.f<s��rc��t�r)rFr�s r�gzFooBar.g>s���rc��y)N�_h()r[r�s r�_hz	FooBar._h@s��rN)rvrwrxr�r�r�r[rrr�r�;s����rr�c#�:K�td�D]	}||z���y�wr)rU)rXs r�bazr�Cs����
�2�Y����c�	��s�c��eZdZdZd�Zd�Zy)�
IteratorProxy)rc��|Srr[r�s rrzIteratorProxy.__iter__Is���rc�$�|jd�S)Nr)�_callmethodr�s rrzIteratorProxy.__next__Ks�����
�+�+rN)rvrwrx�	_exposed_rrr[rrr�r�Gs���I��,rr�c��eZdZy)�	MyManagerNr�r[rrr�r�Ns��rr��Foo)�callable�Bar)r�r�)r��exposedr�)r��	proxytypec�(�eZdZdZd�Zd�Zd�Zd�Zy)�_TestMyManagerr�c���tt��}|j�|j|�|j	�|j|jjdtjf�y�N)�shutdown_timeoutr)
r��SHUTDOWN_TIMEOUTr��common�shutdownrn�_processr�r<rB�rqr�s  r�test_mymanagerz_TestMyManager.test_mymanagerZsU���-=�>���
�
�����G������
	
�
�
�g�&�&�/�/�!�f�n�n�_�1E�Frc���tt��}|5|j|�ddd�|j|jj
dtjf�y#1swY�AxYwr�)r�r�r�rnr�r�r<rBr�s  r�test_mymanager_contextz%_TestMyManager.test_mymanager_contextesP���-=�>��
��K�K�� ��
	
�
�
�g�&�&�/�/�!�f�n�n�_�1E�F��W�s�A%�%A.c���tt��}|j�|5|j|�ddd�|j	|j
jd�y#1swY�0xYwr�)r�r�r�r�rlr�r�r�s  r�!test_mymanager_context_prestartedz0_TestMyManager.test_mymanager_context_prestartednsN���-=�>���
�
��
��K�K�� ������)�)�2�2�A�6��W�s�A$�$A-c��|j�}|j�}|j�}dD�cgc]}t||�s�|��}}dD�cgc]}t||�s�|��}}|j	|ddg�|j	|ddg�|j	|j�d�|j
t|j�|j	|jd�d�|j
t|jd�|j	|j�d�|j	|j�d�|j	|jd�d�|j	|jd�d�|j	t|�td�D�cgc]}||z��	c}�ycc}wcc}wcc}w)N)r�r�r�r�r�r�r�r�r:)r�r�r�r;rlr�rmrFr�r�r8r�r�rU)	rqr�rS�barr�r,�foo_methods�bar_methodsrXs	         rr�z_TestMyManager.commonusy���k�k�m���k�k�m���k�k�m��(8�O�(8��G�C��<N�t�(8��O�(8�O�(8��G�C��<N�t�(8��O�����s�C�j�1�����s�D�k�2��������%�(����*�c�e�e�,��������-�u�5����+�s����=��������%�(��������6�*��������-�u�5��������.��7�����c��%��)�$<�)�Q�Q�q�S�)�$<�=��!P��O��%=s�G�G�G�#G�7G
N)rvrwrxr�r�r�r�r�r[rrr�r�Vs�� �M�	G�G�7�>rr�c��tSr)�_queuer[rr�	get_queuer��s���Mrc��eZdZdZy)�QueueManagerz$manager class used by server processN�rvrwrxryr[rrr�r��s��.rr�r�c��eZdZdZy)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNr�r[rrr�r��s��Jrr��	xmlrpclibc�8�eZdZdZgd�ZeddZed��Zd�Zy)�_TestRemoteManagerr�)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNc��t||tt��}|j�|j	�}|jt
|j��y)N��addressr��
serializerr�)r��
SERIALIZERr��connectr�r�r�rc�r�r�r�r�r#s     r�_putterz_TestRemoteManager._putter�sE����W��-�/��	�����!�!�#��
�	�	�%��
�
�#�$rc��tjd�}ttjdf|t
t��}|j�|j|j�|j|j|j|f��}d|_
|j�t|j|t
t��}|j�|j!�}|j#|j%�|j&�|j)t*|j,t.j0�~y)N� rr�r�T)rC�urandomr�r�HOSTr�r�r�rdr�r�r�r�r�r�r�r�rlr�r\rmrir�r�r)rqr�r�r��manager2r#s      r�test_remotez_TestRemoteManager.test_remote�s����*�*�R�.���"�'�'��+�W��-�/��	�
�
������(�(�)��L�L����G�O�O�W�3M�L�N�����	���	� ��O�O�W��-�/��	�����"�"�$���������d�k�k�2�	
���)�U�Y�Y��
�
�;�
r)	rvrwrxr�rcr\r�r�r�r[rrr�r��s0�� �M��F�
�A�Y�F��%��%�rr��sha256c�"�eZdZed��Zd�Zy)�_TestManagerRestartc��t||tt��}|j�|j	�}|jd�y)Nr�r�)r�r�r�r�r�r�r�s     rr�z_TestManagerRestart._putter�s<����W��-�/��	�����!�!�#��
�	�	�-� rc��tjd�}ttjdf|t
t��}	|j�}|j}|jj�|j�|j|j|j|f��}|j�|j�|j�}|j!|j#�d�~t%|d�r|j'�	t||t
t��}	|j�|j)|j&�y#t%|d�r|j'�wwxYw#t*$r�}|j,t,j.k7r�t1j2d�t||t
t��}t%|d�r |j)|j&�Yd}~yYd}~yd}~wwxYw)Nr�rr�r�r�r�rc)rCr�r�rr�r�r��
get_serverr��listenerr r�r�r�r�r�rlr�r;r�rdrV�errno�
EADDRINUSEr�r)rqr�r��srvr�addrr�r#rs        r�test_rapid_restartz&_TestManagerRestart.test_rapid_restart�s����*�*�R�.���"�'�'��+�W�!�4D�F��	#��%�%�'�D��<�<�D�
�M�M���!��M�M�O����D�L�L�����7Q��R�A�
�G�G�I�
�F�F�H��%�%�'�E����U�Y�Y�[�-�8���w�
�+�� � �"���'�j�-�/��
	2��M�M�O��O�O�G�,�,�-���w�
�+�� � �"�,���
	2��w�w�%�*�*�*��
�J�J�s�O�"��g�*�!1�3�G��w�
�+����� 0� 0�1�1�,��
	2�s%�CE�3+F�E>�	H
�
A1H�H
N)rvrwrxr�r�r�r[rrr�r��s���!��!�'2rr��c	��eZdZdZed��Zd�Zd�Zd�Zd�Z	ed��Z
edd��Zejed	�d
��Zejed	�ej ej$dk(d�ej ed
kd�ejeed�d�d�����Zed��Zejed	�ej ej$dk(d�d���Zd�Zy)�_TestConnectionr�c��t|jt�D]}|j|��|j	�yr)r��
recv_bytes�SENTINEL�
send_bytesr )r�rM�msgs   r�_echoz_TestConnection._echo
s,�������2�C��O�O�C� �3��
�
�rc��|j�\}}|j|j|f��}d|_|j	�gd�}td�}|dz}t
jdttd���}|jdk(r-|jt|j��t�|j|j|�d�|j|j�|�|j|j!|�d�|j|j#�|�|jdk(�r�t
jdd	gdz�}t|�d	gdt%|�z
zz}	|j|j!|�d�|j|j'|�t%|�|j(z�|jt|�|	�t
jdd	gdz�}d	gd
zt|�zd	gdt%|�z
zz}	|j|j!|�d�|j|j'|d
|j(z�t%|�|j(z�|jt|�|	�t+td��}|j|j!|�d�	|j'|�}
|j-d
|
z�t5|j6�}|j|�d�|j9|j:d	�|j|d�d�|j9|j:d	�|j|t<�d�|j9|j:t<�|jd�t?j@d�|j|t<�d�|j9|j:d	�|j|j�d�td�dz}
|j!|
�|j|j#�|
�|j!tB�|jE�|jdk(rx|j|jFd�|j|jHd�|jKtL|j�|jKtL|j"�|jO�y#t.j0$r(}|j|j2|f�Yd}~��hd}~wwxYw)Nr�T)r�r�Nr�r:rXrbr�rr�rz(                                        zexpected BufferTooShort, got %sFrBr�Xi)(r�r�r�r�r�rr�r�rUr�rlr�filenorMrr�r�r�r��recv_bytes_into�itemsize�	bytearrayrjr�BufferTooShortrRr~r
r�r�rr�rr�r �readable�writablerm�EOFErrorr�)rqrMr�r�r�r��longmsgr��bufferr]r�rr
�really_big_msgs              r�test_connectionz_TestConnection.test_connection
s2���9�9�;���j��L�L��
�
�*��L�?�����	���	����M�"����(���k�k�#�t�E�!�H�~�.���9�9��#����T�$�+�+�-�0�#�6�������3���.��������c�*��������-�t�4�������*�C�0��9�9��#��[�[��q�c�"�f�-�F��C�y�A�3�"�s�3�x�-�#8�8�H����T�_�_�S�1�4�8����T�1�1�&�9� ��X����7�
9����T�&�\�8�4��[�[��q�c�"�f�-�F��s�Q�w��c��*�a�S�F�S��X�4E�-F�F�H����T�_�_�S�1�4�8����T�1�1�&�!�f�o�o�:M�N� ��X����7�
9����T�&�\�8�4��u�X��/�F����T�_�_�W�5�t�<�
C��*�*�6�2���	�	�;�c�A�B��T�Y�Y�'��������'��$�$�T�\�\�1�5�����b��5�)��$�$�T�\�\�1�5�����h���/��$�$�T�\�\�8�<��	�	�$���
�
�2������h���.��$�$�T�\�\�1�5��������d�+��s��'7�8������'�������*�N�;�����!������9�9��#����T�]�]�D�1����T�]�]�D�1����h��	�	�2����h����8�	�����K#�1�1�
5�� � ����'��4�4��
5�s�4U�V�V�Vc�r�|jd��\}}|j|jd�d�|j|j�d�|jdk(r�|j|j
d�|j|jd�|j|j
d�|j|jd�|jt|jd�|jt|j�|jt|j�yy)NFr�r�r�Tr)
r�rlrr�r�rrrmrVr
)rq�reader�writers   r�test_duplex_falsez!_TestConnection.test_duplex_falsee
s������%��0����������Q���.���������*��9�9��#����V�_�_�d�3����V�_�_�e�4����V�_�_�e�4����V�_�_�d�3����g�v�{�{�A�6����g�v�{�{�3����g�v�{�{�3�$rc��|j�\}}|j|j|f��}d|_|j	�|j�t
d�}|j|�|j|j�|�|jt�|j�|j�y)Nr�Tr)r�r�r�r�r�r rr�rlr�r�r�)rqrMr�r�r�s     r�test_spawn_closez _TestConnection.test_spawn_closer
s��� �9�9�;���j��L�L��
�
�*��L�?�����	���	������G�n�������������*�C�0�����!��
�
��	���rc�2�|jdk7r*|jdj|j��td�}|j	�\}}|j|�|j
|j�|�|j|d�|j
|j�|dd�|j|dd�|j
|j�|dd�|j|d�|j
|j�td	��|j|dd
�|j
|j�td	��|jt|j
|d�|jt|j
|dd�|jt|j
|dd
�|jt|j
|d�|jt|j
|dd�y)Nr�r��abcdefghijklmnopqrstuvwxyzr�rr���r�r��r�rBrb)
r�r�r�rr�r�rlr�rmrF)rqr�r�r�s    r�test_sendbytesz_TestConnection.test_sendbytes�
s����9�9��#��M�M�7�>�>�t�y�y�I�J��0�1���y�y�{���1�	���S����������-�	���S�!����������Q�R��1�	���S�!�Q����������Q�s��4�	���S�"����������r��3�	���S�"�a� ���������r��3����*�a�l�l�C��<����*�a�l�l�C��Q�?����*�a�l�l�C��Q�?����*�a�l�l�C��<����*�a�l�l�C��B�?rc��	tj|�y#t$r(}|jtjk(rYd}~y�d}~wwxYwrr)rC�fstatrVr��EBADF)r�r�rs   r�_is_fd_assignedz_TestConnection._is_fd_assigned�
s?��	��H�H�R�L����	��w�w�%�+�+�%����	�s��	A	�A�A�A	c�j�|rGtdd�D]8}|j|�r�tj|j	�|��:tj|�}tr$tj|tj�}tj||�tj|�y)Nrr9)rUrrC�dup2rr�recv_handle�msvcrt�open_osfhandler�r+r )r�rM�data�create_dummy_fdsrXr�s      r�_writefdz_TestConnection._writefd�
s{����1�c�]���*�*�1�-��G�G�D�K�K�M�1�-�#��
"�
"�4�
(����&�&�r�2�;�;�7�B�
����T��
����r�$test needs multiprocessing.reductionc���|jdk7r|jd�|jd��\}}|j|j|df��}d|_|j
�|jtjtj�ttjd�5}|j�}trtj|�}tj |||j"�ddd�|j%�ttjd�5}|j'|j)�d�ddd�y#1swY�]xYw#1swYyxYw)	Nr��only makes sense with processesTr�sfoor��wb�rb)r�r�r�r�r%r�r�rdrr�r�r�rr!�
get_osfhandler�send_handler�r�rlr�)rqrMr�r�r�r�s      r�test_fd_transferz _TestConnection.test_fd_transfer�
s
���9�9��#��M�M�;�<��9�9�D�9�1���j��L�L��
�
�Z��4H�L�I�����	���	����	�(�(�)�*:�*:�;�
�)�"�"�D�
)�Q�����B���)�)�"�-���!�!�$��A�E�E�2�	*�
	
����
�)�"�"�D�
)�Q����Q�V�V�X�v�.�*�
)�
*�
)��*�
)�s�4A
E�3!E)�E&�)E2r1�*test semantics don't make sense on Windowsr9z)largest assignable fd number is too smallrztest needs os.dup2()c��|jdk7r|jd�|jd��\}}|j|j|ddf��}d|_|j
�|jtjtj�ttjd�5}|j�}tdt�D]}|j|�r�n|j!d	�t#j$|�	t'j(|||j*�t#j,|�	ddd�|j/�ttjd
�5}|j1|j3�d�ddd�y#t#j,|�wxYw#1swY�wxYw#1swYyxYw)Nr�r(Tr�sbarr�r)r9z2could not find an unassigned large file descriptorr*)r�r�r�r�r%r�r�rdrr�r�r�rrU�MAXFDrrjrCrrr,r�r r�rlr�)rqrMr�r�r�r��newfds       r�test_large_fd_transferz&_TestConnection.test_large_fd_transfer�
s\���9�9��#��M�M�;�<��9�9�D�9�1���j��L�L��
�
�Z���4N�L�O�����	���	����	�(�(�)�*:�*:�;�
�)�"�"�D�
)�Q�����B��s�E�*���+�+�E�2��+��	�	�N�O��G�G�B���
 ��%�%�d�E�1�5�5�9������*�	
����
�)�"�"�D�
)�Q����Q�V�V�X�v�.�*�
)��������*�
)��*�
)�s6�55G�+*G�!F)�7G�?!G�)G�G�G�Gc�L�tj|j�d�y)N�)rCr+r�rqrMs  r�_send_data_without_fdz%_TestConnection._send_data_without_fd�
s��
��������&rzdoesn't make sense on Windowsc�B�|jdk7r|jd�|jd��\}}|j|j|f��}d|_|j
�|jttj|�|j�y)Nr�r(Tr�r�)r�r�r�r�r6r�r�rmr8rr r��rqrMr�r�s    r�test_missing_fd_transferz(_TestConnection.test_missing_fd_transfer�
s}��
�9�9��#��M�M�;�<��9�9�D�9�1���j��L�L�� :� :�*��L�O�����	���	����,�	�(=�(=�t�D�	���rc�~�|j�\}}|5|5|jd�|j|j�d�|jdk(r6|j|j�|j|j�ddd�ddd�|jdk(rw|j|j�|j|j�|jt|j�|jt|j�yy#1swY��xYw#1swY��xYw�N�r�)
r�rrlr�r�r��closedr�rmrVr�s   rrDz_TestConnection.test_contexts����y�y�{���1�
��
�F�F�4�L����Q�V�V�X�t�,��y�y�K�'�� � ����*�� � ����*��Q��9�9��#��O�O�A�H�H�%��O�O�A�H�H�%����g�q�v�v�.����g�q�v�v�.�	$����Q�Q�s#�D3�A7D'�D3�'D0	�,D3�3D<Nr�)rvrwrxr�r�r�rrrrrr%rGr��
HAS_REDUCTIONr-rzr{r|r0r;rCr2r6r9rDr[rrr�r�
sc��,�M�����
M�^4��*@�@�����	��	��X����(N�O�/�P�/�$�X����(N�O��X�_�_�S�\�\�W�,�A�C��X�_�_�U�c�\�@�B��X�����V�,�/�1�/�1�B�C�P�/�4�'��'��X����(N�O��X�_�_�S�\�\�W�,�.M�N��O�P��/rr�c�h�eZdZdZd�Zd�Zd�Zeje	jd�d��Zy)�
_TestListenerr�c��|jjD]o}|jj|��}|j|j�|jt|jj|j|��qy)N��family)�
connection�families�Listenerrdr rmrVr�)rqrCr`s   r�test_multiple_bindz _TestListener.test_multiple_bindsb���o�o�.�.�F����(�(��(�7�A��O�O�A�G�G�$����g�t���'?�'?��i�i��
1�/rc���|jj�5}|jj|j�5}|j	�5}|jd�|j
|j�d�ddd�ddd�ddd�|jdk(r!|jtj�yy#1swY�JxYw#1swY�NxYw#1swY�RxYwr;�rDrF�Clientr��acceptrrlr�r�rmrV)rqr`r�rUs    rrDz_TestListener.test_context s���
�_�_�
%�
%�
'�1����'�'��	�	�2�a��X�X�Z�1��F�F�4�L��$�$�Q�V�V�X�t�4� �3�(��9�9��#����g�q�x�x�0�$�	 �Z��3�2��(�
'�s;�&C%�C�2C
�C�C%�
C�C�C"	�C%�%C.c�N��d�}�fd�}d}�jj|��5}tj||j|f��}|j�	|j
�5}�j|j�d�ddd�|j�	ddd��jdk(r/�jt�5j
�ddd�yy#1swY�axYw#|j�wxYw#1swY�ixYw#1swYyxYw)Nc��td��)NzConnection took too long...r7r�s rr9z1_TestListener.test_empty_authkey.<locals>.handler,s���<�=�=rc�b���jj||��}|jd�y)N�r�r<)rDrJr)r�r��clientrqs   �rr�z-_TestListener.test_empty_authkey.<locals>.run/s(����_�_�+�+�D�'�+�B�F��K�K��rrrOr�r<r�)
rDrFr"r�r�r�rKrlr�r�r�rmrV)rqr9r�rnr��threadrUs`      r�test_empty_authkeyz _TestListener.test_empty_authkey*s����	>�	���
�_�_�
%�
%�c�
%�
2�h��%�%�S��8H�8H�#�7N�O�F��L�L�N�
��_�_�&�!��$�$�Q�V�V�X�t�4�'����
�3��9�9��#��"�"�7�+����!�,�+�$�'�&�����
��3�
2��,�+�sG�4D�C:�-!C.�C:�D�D�.C7	�3C:�:D�D�D�D$z"test needs abstract socket supportc���|jjd�5}|jj|j�5}|j	�5}|jd�|j
|j�d�ddd�ddd�ddd�|jdk(r!|jtj�yy#1swY�JxYw#1swY�NxYw#1swY�RxYw)Nz
somethingr<r�rI)rqr�rPrUs    r�test_abstract_socketz"_TestListener.test_abstract_socketBs����_�_�
%�
%�m�
4�����'�'��(8�(8�9�V��_�_�&�!��K�K��%��$�$�Q�V�V�X�t�4�'�:�5��9�9��#����g�x���7�$�	'�&��:�9��5�
4�s;�&C&�C�2C�C�
C&�C�C�C#	�C&�&C/N)rvrwrxr�rGrDrRrGr�r�abstract_sockets_supportedrTr[rrr@r@sB��"�M�1�1�"�0�X����8�8�=�?�8�?�8rr@c�2�eZdZdZed��Zd�Zd�Zd�Zy)�_TestListenerClientr�c�|�|jj|�}|jd�|j�y)Nr)rDrJrr )r�r�rMs   rr�z_TestListenerClient._testSs+���~�~�$�$�W�-���	�	�'���
�
�rc��|jjD]�}|jj|��}|j|j|j
f��}d|_|j�|j�}|j|j�d�|j�|j���y)NrBr�Tr)
rDrErFr�r�r�r�r�rKrlr�r�r )rqrCr`r�rMs     r�test_listener_clientz(_TestListenerClient.test_listener_clientYs����o�o�.�.�F����(�(��(�7�A����D�J�J�a�i�i�\��B�A��A�H�
�G�G�I��8�8�:�D����T�Y�Y�[�'�2�
�F�F�H�
�G�G�I�/rc��|jj�}|j|j|jf��}d|_|j
�tjd�|j�}|j|j�d�|j�|j�|j�y)Nr�Tr�r)rDrFr�r�r�r�r�r�rrKrlr�r r�)rqr`r�rMs    r�test_issue14725z#_TestListenerClient.test_issue14725ds����O�O�$�$�&���L�L��
�
�!�)�)��L�>�����	���	��
�
�1�
�
�x�x�z���������g�.��
�
��	����	���	rc��|jjD]�}|jj|��}|jj|j�}|j�}|j
d�|j|jd��|j�|j�|j���y)NrB�hellor�)
rDrErFrJr�rKr�r�r
r )rq�famr`r�r�s     r�test_issue16955z#_TestListenerClient.test_issue16955ts����?�?�+�+�C����(�(��(�4�A����&�&�q�y�y�1�A����
�A�
�L�L��"��O�O�A�F�F�1�I�&�
�G�G�I�
�G�G�I�
�G�G�I�,rN)	rvrwrxr�r�r�rZr\r`r[rrrWrWOs(��,�M�����
	�� 	rrWc�X�eZdZdZd�Zed��Zd�Zed��Zd�Z	ed��Z
d�Zy	)
�	_TestPollr�c��|j�\}}|j|j�d�|jd�|j|j�d�|j|j�d�y)NFrT)r�rlr
r�r�s   r�test_empty_stringz_TestPoll.test_empty_string�s_���y�y�{���1��������5�)�	���S���������4�(��������4�(rc�~�|D](}tjd�|j|��*|j�y�Nr)r�rr�r )r�rM�stringsrs    r�_child_stringsz_TestPoll._child_strings�s.���A��J�J�s�O��O�O�A���	
�
�
�rc�D�d}|j�\}}|j|j||f��}|j�|D]G}t	d�D]}|jd�s�n|j
�}|j||��I|j�y)N)r^r�a�brsbyerslopr���rt)	r�r�rhr�rUr
r�rlr�)rqrgr�r�r�rrXrZs        r�test_stringsz_TestPoll.test_strings�s���G���y�y�{���1��L�L�� 3� 3�1�g�,�L�G��	���	��A��3�Z���6�6�$�<�� �����A����Q��"��	
���rc�&�|jd�yr�)r
)r�rCs  r�_child_boundariesz_TestPoll._child_boundaries�s��	
���q�	rc�j�|jd�\}}|j|j|f��}|j�t	j
d�ddg}|D]}|j
|��|j�|j�|j|j�|�y)NFr�rsfirstssecond)r�r�ror�r�rr�r r�rnr�)rqrCr�r�rBr!s      r�test_boundariesz_TestPoll.test_boundaries�s����y�y�����1��L�L�� 6� 6�a�T�L�B��	���	��
�
�1�
�
�y�!���C�
�L�L����	���	�	�����
�
�a�l�l�n�a�(rc�j�|jd�|jd�|jd�y)Nrjrk�cd)r�)r�r�s  r�_child_dont_mergez_TestPoll._child_dont_merge�s&��	���T��	���T��	���U�rc�4�|j�\}}|j|jd�d�|j|jd�d�|j|j|f��}|j�|j|j
�d�|j|jd�d�|j|jd�d�|j|j
�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|j
�d	�|j�y)
Nr3Frr�rjrcTrkrs)r�rlr
r�rtr�r�r�)rqr�r�r�s    r�test_dont_mergez_TestPoll.test_dont_merge�s'���y�y�{���1���������e�,���������e�,��L�L�� 6� 6�a�T�L�B��	���	���������.���������d�+���������d�+���������.���������d�+���������d�+���������d�+���������/�	���rN)rvrwrxr�rdr�rhrmrorqrtrvr[rrrbrbsW��,�M�)�����
�����
)�����
rrbr&c�\�eZdZdZed��Zed��Zed��Zd�Zed��Z	d�Z
y)	�_TestPicklingConnectionsr�c�P�ddlm}|jtj��y)Nr)�resource_sharerr)rrzr�rr)r�rzs  rr�z&_TestPicklingConnections.tearDownClass�s��3����W�%9�%9��:rc�2�|D]z}|jj|��}|j|j�|j	�}|j|�|j�|j��|t
jtjdf�}|j|j��|j	�\}}|j|�|j�|j�|j�y)NrBr)rDrFrr�rKr �socket�
create_serverrr��getsocknamer�)r�rMrEr_r`�new_connr�s       r�	_listenerz"_TestPicklingConnections._listener�s����C����'�'�s�'�3�A��I�I�a�i�i� ��x�x�z�H��I�I�h���N�N��
�G�G�I�
�
� � �-�"4�"4�a�!8�9���	�	�!�-�-�/�"�������$��	�	�(������	���	��	�	�rc���t|jd�D]O\}}|jj|�}|j	|j��|j
��Q|j�\}}tj�}|j|�|j|j��|j
�|j
�yr)
r�r�rDrJrr�r r|r��sendall)r�rMr�r�rPs     r�_remotez _TestPicklingConnections._remote�s���"�4�9�9�d�3�N�W�c��^�^�*�*�7�3�F��K�K��	�	��$��L�L�N�4�
�y�y�{������������w�����s�y�y�{�#������
�
�rc��|jj}|j�\}}|j|j||f��}d|_|j
�|j�|j�\}}|j|j|f��}d|_|j
�|j�|D]w}d|zjd�}	|j�}
|j|
|	f�|j�}|j|j�|	j���y|jd�td�}	|j�}
|j|
|	f�|j�}g}	|jd�}
|
sn|j|
��&dj!|�}|j||	j��|j�|jd�|j�|j�|j!�|j!�y)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr-r)rDrEr�r�r�r�r�r r�rr�rrlr�rr[r�)rqrE�lconn�lconn0�lpr��rconn0�rpr_r�r�r�bufrs              r�
test_picklingz&_TestPicklingConnections.test_pickling�s����?�?�+�+���	�	��
��v�
�\�\����v�x�6H�\�
I����	�
���
������	�	��
��v�
�\�\����V�I�\�
>����	�
���
������C�3�c�9�A�A�'�J�C��j�j�l�G��J�J���~�&��z�z�|�H����X�]�]�_�c�i�i�k�:��	�
�
�4���:�;���*�*�,��
�
�
�G�S�>�"��:�:�<������
�
�c�"�A����J�J�q�M�	�
�h�h�s�m������c�i�i�k�*�����
�
�
�4��
���
�
���
�
���	�
���	rc���|j�}|jd�|j�|j�}|j�}|j|dz�|j�y)N�all is wellr)r�rr )r�rMr�rCr�s     r�child_accessz%_TestPicklingConnections.child_access,sQ���I�I�K��	���}��	���	��I�I�K���f�f�h���	�	�#�a�%���
�
�rc��|j�\}}|j|j|f��}d|_|j	�|j�|jd��\}}|j
|�|j�|j|j�d�|j�|jd��\}}|j
|�|j�|j
d�|j�|j|j�d�|j�y)Nr�TFr�r��foobar�foobarfoobar)
r�r�r�r�r�r rrlr�r�)rqrMr�r�rCr�s      r�test_accessz$_TestPicklingConnections.test_access8s��� �9�9�;���j��L�L�� 1� 1��
�L�F�����	���	������y�y��y�&���1��	�	�!��	���	��������=�1�	���	��y�y��y�&���1��	�	�!��	���	�	���x��	���	��������j�1�	���rN)rvrwrxr�r�r�r�r�r�r�r�r[rrrxrx�sb��#�M��;��;�����$����,�\�	��	�rrxc�8��eZdZdZ�fd�Z�fd�Zd�Zd�Z�xZS)�	_TestHeapr�c����t�|��tjjj
|_tjj�tjj_yr)r�rrr�r��_heap�old_heap�Heap�rqr�s �rrz_TestHeap.setUp]sH���
��
��'�,�,�:�:�@�@��
�3B�3G�3G�3L�3L�3N����*�*�0rc�t��|jtjj_t
�|��yr)r�rr�r�r�r�rr�s �rrz_TestHeap.tearDowncs&���37�=�=����*�*�0�
���rc
���d}d}g}tjjj}d|_t|�D]{}t
tjdd�dz�}tjj|�}|j|�t|�|kDrtj|�}||=~�}|j5g}d}	d}
t|jj��D]G}|D]@\}}
}|j|j j#|�|
|||
z
df�|	||
z
z
}	�B�I|j$j'�D]I\}}|D]?\}
}|j|j j#|�|
|||
z
df�|
||
z
z
}
�A�K|j)|	|
zt+d�|j D���|j-�tt|�dz
�D]p}||dd	\}}
}||dzdd	\}}}||k7r<|j)||j |j.�|j)|d��_|j)||��r	ddd�tj0|�|r|j3�|r�|j)|j4|j6�|j)t|j8�d�|j)t|j �d�|j)t|j$�d|j$�|j)t|j�d�y#1swY��xYw)
N�r�rr�rP�free�occupiedc3�4K�|]}|j���y�wr�r�)r��arenas  rr�z&_TestHeap.test_heap.<locals>.<genexpr>�s���� F�������s�r�)rr�r�r��_DISCARD_FREE_SPACE_LARGER_THANrUrM�random�lognormvariater[r��	randranger�r��_len_to_seqrc�_arenas�index�_allocated_blocksr�rl�sum�sortr��shuffler��_n_frees�
_n_mallocs�_pending_free_blocks)rq�
iterations�	maxblocks�blocksr�rXr�r�r�r�r�rBr�r�r��arena_blocks�narena�nstart�nstops                   r�	test_heapz_TestHeap.test_heapgs���
��	����#�#�1�1�7�7��/0��,��z�"�A��v�,�,�Q��2�T�9�:�D��$�$�2�2�4�8�A��M�M�!���6�{�Y�&��$�$�Y�/���1�I��#��Z�Z��C��D��H��$�*�*�1�1�3�4��*+�&�E�5�$��J�J���� 2� 2�5� 9�5�$� $�U�
�F� 4�5��T�%�Z�(�D�+,�5�(,�'=�'=�'C�'C�'E�#��|�#/�K�E�4��J�J���� 2� 2�5� 9�5�$� $�U�
�J� 8�9���e��,�H�$0�(F�
���T�H�_� � F���� F�F�
H�
�H�H�J��3�s�8�A�:�&��'*�1�v�b�q�z�$���t�*-�a��c�(�2�A�,�'�����F�?��$�$�T�4�<�<��+>�+C�+C�D��$�$�V�Q�/��$�$�T�6�2�'�-�D	���v����J�J�L��	
���������8�����T�6�6�7��;�����T�\�\�*�A�.�����T�3�3�4�a��9O�9O�P�����T�-�-�.��2�U�Z�s
�F#M#�#M,c���tj�s3tj�|jtj�tj
�}|jtjg|���tjd�td�D]N}tjjd�}tjjd�}||_||_�Py)Nr:r�r�)rm�	isenabled�enablerd�disable�
get_threshold�
set_thresholdrUrr�r��buddy)rq�
thresholdsrXr�r�s     r�test_free_from_gcz_TestHeap.test_free_from_gc�s����|�|�~��I�I�K��O�O�B�J�J�'��%�%�'�
������(�(�6�:�6�
������t��A��$�$�2�2�1�5�A��$�$�2�2�1�5�A��A�G��A�G�r)	rvrwrxr�rrr�r�rkrls@rr�r�Ys���"�M�O��>3�@rr�c�"�eZdZdefdefdefgZy)�_FoorZr[�zN)rvrwrxr=r>r?�_fields_r[rrr�r��s��	�e��	�h��	�j��
�Hrr�c�:�eZdZdZd�Zed��Zdd�Zd�Zd�Z	y)	�_TestSharedCTypesr�c�4�ts|jd�yyr]r^r�s rrz_TestSharedCTypes.setUp�r_rc�L�|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_tt	|��D]}||xxdzcc<�yr�)r�rZr[rUr�)r�rZr[r�rSr��stringrXs        r�_doublez_TestSharedCTypes._double�sp��	���1���	���1���	���1�������
������
���������s�3�x��A���F�a�K�F�!rc	�h�tdd|��}ttd|��}ttd|��}ttdd|��}|j	dtt
d	��|��}|j	d
d|��}td�|_|j|j||||||f�
�}d|_|j�|j�|j|jd�|j|jd�|j|jd�|j|j d�|j|j"d�t
d	�D]}	|j||	|	dz��|j|jtd��y)NrXrrogUUUUUU�?rXr�rrUr:r�r�rr�T�gUUUUUU�?rYr�@�
hellohello)rr>r?r�r�r�rUrr�r�r�r�r�r�rlr�rZr[)
rqr_rZr[r�rSr�r�r�rXs
          r�test_sharedctypesz#_TestSharedCTypes.test_sharedctypes�sV���#�q�t�$���(�G�$�/���*�g�D�1���D�!�Q�T�*���j�j��d�5��9�o�D�j�9�����C��$��/���W�~����L�L����A�q�!�S�#�v�3N�L�O�����	���	�	����������"�%����q�w�w��0�������'�*��������"����s�u�u�c�*��r��A��"�"�3�q�6�1�Q�3�/��������u�\�':�;rc�(�|jd��y)NTro)r�r�s r�test_synchronizez"_TestSharedCTypes.test_synchronize�s�����D��)rc��tddd�}t|�}d|_d|_d|_|j|jd�|j
|jd�|j|jd�y)Nrr/rXr)r�rrZr[r�rlr�)rqrSr�s   r�	test_copyz_TestSharedCTypes.test_copy�sj���1�c�7�#���3�i������������������"����s�u�u�c�*��������(rNr�)
rvrwrxr�rr�r�r�r�r�r[rrr�r��s0��"�M�C�����<�.*�)rr�z&requires multiprocessing.shared_memoryc��eZdZdZed��Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
ejej"dk7d�d
��Zejej"dk7d�d��Zd�Zd�Zd�Zd�Zd�Zy)�_TestSharedMemoryr�c��t|t�rtj|�}n|}||jdt|�|j
�yr)rror�SharedMemoryr�r�r )�shmem_name_or_obj�binary_data�	local_smss   r�!_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_writesC���'��-�%�2�2�3D�E�I�)�I�+6�	�
�
�'�s�;�'�(����rc�B�|ttj��zSr)rorCr�)rq�prefixs  r�
_new_shm_namez_TestSharedMemory._new_shm_names����B�I�I�K�(�(�(rc��|jd�}tj|dd��}|j|j�|jt�5tj|dzdd��ddd�tjrM|j}	|dz|_|jt�5|j	�ddd�||_yy#1swY�gxYw#1swY�xYw#||_wxYw)N�test01_nullT���creater�zaF)	r�rr�rdr�rmrF�
_USE_POSIX�_name)rq�	name_tsmb�sms�	orig_names    r�*test_shared_memory_name_with_embedded_nullz<_TestSharedMemory.test_shared_memory_name_with_embedded_nulls����&�&�}�5�	��(�(��4�c�J������
�
�#�
�
�
�z�
*��&�&�y�5�'8��S�Q�+��#�#��	�	�I�
&�%��-��	��&�&�z�2��J�J�L�3�&��	�$�+�
*��3�2��&��	�s0�C�C4�:C(�C4�C%�(C1�-C4�4	C=c��
�|jd�}tj|dd��}|j|j�|j|j|�|j|jd�|jt|j�|j�|j|jt|��|jt|j�t|��d|jd<|j|jdd�tj|�}|j|jdd�|j�tj|d|jz��}|j|jd|jz�|j�|jt �5tjdd	��ddd�|jt �5tjd
��ddd�t"j$j'd�5}tj(}|jd
�|jd�g}|D�cgc]}||z��	}}||_tjdd��}	|j|	j�|j|	j,|d�||_tjdd��}
|j|
j�|j|
j,|d�ddd�tj.r�|jd�}tj|dd��}|jt0�5	|j|jd�tj|�}
|
j	�|
j�|j�|j	�	ddd�|jt2�5tj|dd��}ddd�tj.rWGd�dtj�}||�}|j|j|j�|j�|jt0�5tjd�}|j	�ddd�|j�y#1swY��xYw#1swY���xYwcc}w#1swY���xYw#|j	�wxYw#1swY��<xYw#1swY��xYw#1swY�uxYw)N�test01_tsmbTr�r�rsrr�r����F�r��,multiprocessing.shared_memory._make_filename�	test01_fn�	test02_fnr��test01_dblunlinkr�c�>�eZdZejej
zZy)�O_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rvrwrxrCr��O_RDWR�_flagsr[rr�OptionalAttachSharedMemoryr��s�����b�i�i�/�rr��test01_notthere)r�rr�rdr�rlr,r3r�r�r�rnror �
assertLessrmrFrG�mock�patch�_SHM_NAME_PREFIX�side_effectr�r��FileNotFoundError�FileExistsError)rqr�r��also_sms�same_sms�mock_make_filename�NAME_PREFIX�namesr,�shm1�shm2�name_dblunlink�sms_uno�sms_duo�there_can_only_be_one_smsr��ok_if_exists_sms�nonexisting_smss                  r�test_shared_memory_basicsz+_TestSharedMemory.test_shared_memory_basics$s#���&�&�}�5�	��(�(��4�c�J������
�
�#�	
������9�-�������#�.�����C�G�G��c�h�h�7�	
�
�
�c�h�h��C��)��
�
�c�#�(�(�m�S��X�.������
���������R�(�!�-�-�i�8��������a��"�-�����!�-�-�i�b����k�J������
�
�r�#�(�(�{�3������
�
�z�
*��&�&�d��<�+��
�
�z�
*��&�&�e�4�+�
�]�]�
 �
 �:�<�?Q�'�8�8�K��'�'��4�d�6H�6H��6U�V�E�5:�:�E�D�[�4�'�E�E�:�-2��*� �-�-�T��B�D��O�O�D�K�K�(����T�Z�Z��q��2�-2��*� �-�-�T��B�D��O�O�D�K�K�(����T�Z�Z��q��2�#<�&�#�#�"�/�/�0B�C�N�#�0�0�����G�
�"�"�#4�5�	%��+�+�G�L�L�$�?�+�8�8��H�G��N�N�$��M�M�O��M�M�O��N�N�$�6��
�
��
/�)6�(B�(B����)�%�0��#�#�
0�]�-G�-G�
0�9�)�D�����-�2�2�C�H�H�=��"�"�$��
�
�0�
1�+�8�8�9J�K�O��"�"�$�2�	�	�	��c+�
*��+�
*��;�<�<��T�N�N�$��6�5��0�
/��02�
1�st�#T�T�7T-�
T(�B2T-�!U�#A!T:�U�2U�&U)�T�T%�(T-�-T7�:U�U�U�U&�)U2c�^�tjjd�5}tj}|jd�|jd�g}|D�cgc]}||z��	}}||_tjdd��}|j|j�|j|j|d�||_tjdd��}|j|j�|j|j|d�ddd�ycc}w#1swYyxYw)Nr��	test03_fn�	test04_fnTr�r�r)rGr�r�rr�r�r�r�rdr�rlr�)rqrrrr,rrs       r�test_shared_memory_recreatez-_TestSharedMemory.test_shared_memory_recreate�s���]�]�
 �
 �:�<�?Q�'�8�8�K��'�'��4�d�6H�6H��6U�V�E�5:�:�E�D�[�4�'�E�E�:�-2��*� �-�-�T��B�D��O�O�D�K�K�(����T�Z�Z��q��2�-2��*� �-�-�T��B�D��O�O�D�K�K�(����T�Z�Z��q��2�#<�<��;�<�<�s�7D#�D�#B2D#�D#�#D,c��|jt�5tjdd��}ddd�|jt�5tjdd��}ddd�|jt�5tjd��}ddd�y#1swY�sxYw#1swY�JxYw#1swYyxYw)NTrBr�rr�)rmrFrr�)rq�sms_invalids  r�#test_invalid_shared_memory_creationz5_TestSharedMemory.test_invalid_shared_memory_creation�s���
�
�
�z�
*�'�4�4�D�r�J�K�+��
�
�z�
*�'�4�4�D�q�I�K�+��
�
�z�
*�'�4�4�D�A�K�+�
*�+�
*��+�
*��+�
*�s#�B �B,�B8� B)�,B5�8Cc	��ttjdz�D�]�}|j|��5t	j
dd��}|j
|j�d|jddtj||�	�}tj|�}|j|tj
�|j|j|j�|jt|jdd�d�|jt|jdd�d�d
|jdd|jt|jdd�d
�|jt|jdd�d
�d|jdd|jt|jdd�d�|jt|jdd�d�ddd����y#1swY���xYw)Nr���protoTr�r��picklerr��protocolsnewvalsoldval)rU�pickle�HIGHEST_PROTOCOLr�rr�rdr�r��dumps�loadsr�rlr,r�)rqrr��pickled_sms�sms2s     r�"test_shared_memory_pickle_unpicklez4_TestSharedMemory.test_shared_memory_pickle_unpickle�s����6�2�2�Q�6�7�E����E��*�#�0�0��3�G������
�
�+�(�����!��%�l�l�3��?���|�|�K�0���%�%�d�M�,F�,F�G�� � ����4�9�9�5�� � ��s�w�w�q��|�!4�i�@�� � ��t�x�x��!�}�!5�y�A� )�����!��� � ��s�w�w�q��|�!4�i�@�� � ��t�x�x��!�}�!5�y�A� )�����1�
�� � ��s�w�w�q��|�!4�i�@�� � ��t�x�x��!�}�!5�y�A�-+�*�8�*�*�s�GH�H	c���ttjdz�D]�}|j|��5t	j
dd��}d|jddtj||�	�}|j�|j�|jt�5tj|�ddd�ddd���y#1swY�xYw#1swY��xYw)
Nr�rTr�r�rrrr)
rUrrr�rr�r�rr r�rmr�r)rqrr�rs    r�.test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_object�s����6�2�2�Q�6�7�E����E��*�#�0�0��3�G��(�����!��$�l�l�3��?���	�	���
�
���&�&�'8�9��L�L��-�:�+�*�8�:�9��+�*�s$�A3C�%C�;C�C�C�C#	c�T�tjdd��}|j|j�|j	|j
|jdf��}d|_|j�|j�|jt|jdd�d�|j	|j
|df��}d|_|j�|j�|jt|jdd�d�|j�y)NTr�r�showdyr�r�sHELLO)rr�rdr�r�r�r,r�r�r�rlr�r�r )rqr�r�s   r�#test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processes�s����(�(��3�?������
�
�#�
�L�L��9�9��(�(�H�%�
�
�����	���	�	��������s�w�w�r��{�+�X�6�
�L�L��9�9��x��
�
�����	���	�	��������s�w�w�r��{�+�X�6��	�	�rr(z#not feasible in non-posix platformsc��tjj�}|j�|j	td��}t
j|jjtj�|j	td��}|jt�5t
jt
j�tj�ddd�|j�y#1swY�xYwr)r�managers�SharedMemoryManagerr��
ShareableListrUrCrHr�r�r<r�rmr�r�r�)rq�smm�sl�sl2s    r�4test_shared_memory_SharedMemoryServer_ignores_sigintzF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigint�s����&�&�:�:�<���	�	���
�
�u�R�y�
)��
	������ � �&�-�-�0�����b�	�*���
�
�0�
1��G�G�B�I�I�K����/�2�	����2�
1�s�07D�D	zresource_tracker is posix onlyc��d}tjjjd|�\}}}|j	|�y)Nz�if 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r�)r=rrr�r�r�s     r�>test_shared_memory_SharedMemoryManager_reuses_resource_trackerzP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackers=�����|�|�1�1�B�B�4��M���C��	
����rc�(�tjj�}|jt�5|jd��ddd�|j
�tdd�D�cgc]}|jt|����}}tddd�D�cgc]}|j|����}}tj|djj�	�}|jt|�d�tj
|dj�	�}|jt|j�d�|dj}|j!�t"j$d
k7r4|jt&�5tj
|�	�}	ddd�tjj�5}
|
jd�}|
jd��}|jj}ddd�t"j$d
k7r5|jt&�5tj|�	�}
ddd�yy#1swY��xYwcc}wcc}w#1swY��xYw#1swY�uxYw#1swYyxYw)Nr�r�r�r:r���r�r,r1�howdy)rr'r(rmrFr�r�rUr)r�shmr,rlr�r3r�r�r{r|r�)rq�smm1rX�lolrQ�lom�doppleganger_list0�doppleganger_shm0�	held_name�
absent_shm�smm2r+r5�	absent_sls              r�-test_shared_memory_SharedMemoryManager_basicsz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics)s����'�'�;�;�=��
�
�
�z�
*����1��%�+��
�
��6;�A�r�l�D�l���"�"�5��8�,�l��D�38��S�"�3E�G�3E�a��!�!�q�!�)�3E��G�*�8�8�c�!�f�j�j�o�o�N������/�0�!�4�)�6�6�C��F�K�K�H������$5�$9�$9� :�B�?���F�K�K�	��
�
���<�<�7�"��"�"�#4�5�*�7�7�Y�G�
�6��
%�
%�
9�
9�
;�t��#�#�G�,�B��#�#��#�-�C������I�<��<�<�7�"��"�"�#4�5�)�7�7�Y�G�	�6�5�#�-+�
*��E��G�6�5��<�
;��
6�5�s;�I�-!I&�I+�I0�:I<�8J�I#�0I9�<J�Jc�|�tjgd��}|j|jj�|j|jjt|��|jtt|��t|��|jt�5|dddd�|jt�5d|d<ddd�|jd�}d|d<|j||jd��|j|jd�|jt|�d�tj �5tj"d�|jt$�5|j'd�ddd�|j|j'd	�d
�ddd�|j|dd�|j|dd�|jt)|�d�d
|d
<|j|d
d
�d|d<|j|dd�|j|jd�|j+t$d�5d|d<ddd�|j|dd�d|d<|j|dd�|j|dd�|j+t$d�5d|d<ddd�|j|dd�|j+t$d�5d|d<ddd�|j|dd�tj �5tj"d�|j|j-d
�d�|j|j-d�d�|j|j-d�d�ddd�|j/d�}tj||��}	|j1|jj|jj�|j||jj�|jt|�t|��|j|j|j�d|d<|j|dd�|j1|dd�|jj3�|jj	�tj|jj��}|j|jj|jj�d|d<|j|dd�|jj3�|jj3�tj�}	|jt|�d�|j|jd�|j|j-d�d�|jt$�5|j'd�ddd�|jj3�|jj	�y#1swY���xYw#1swY���xYw#1swY��
xYw#1swY���xYw#1swY��BxYw#1swY���xYw#1swY���xYw#1swY��xYw#|jj	�wxYw#1swY��xYw#|jj	�wxYw) N)r4�HoWdYgX9��vq�r-NTrsrrrr4z8s8sdqxxxxxx?xxxxxxxx?q�ignore�100r-r�r�Trs�somerbz8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésr�rAu	encodéess	123456789sadios�test03_duplicater3�MrBipr��any)rr)rdr5r�rnr,ror�rm�
IndexError�_get_packing_formatrlr�r��warnings�catch_warnings�simplefilterrFr�r�rUr)r�r&r )rqr+�current_format�name_duplicate�sl_copy�sl_tethered�empty_sls       r�'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basicsGs���
�
(�
(�>�
��	
������
�
�&�	
�
�
�b�f�f�k�k�3�r�7�+��
�
�c�$�r�(�m�S��W�-��
�
�z�
*��q�E�+��
�
�z�
*��B�q�E�+��/�/��2����1�������)?�)?��)B�C�	
������$=�>�	
����R��!�$��
$�
$�
&��!�!�(�+��"�"�:�.������/����R�X�X�c�]�A�.�'�	
����A���(�����B���&�	
����"�I�>�	
���1������A���#���1������A���'�������$7�8�
�
#�
#�J�$?�A�"�B�q�E�A�	
����A���'���1������A��
�+�����A���)�
�
#�
#�J�$?�A��B�q�E�A�	
����A���)�
�
#�
#�J�$?�A� �B�q�E�A�	
����A���)��
$�
$�
&��!�!�(�+����R�X�X�b�\�1�-����R�X�X�h�/��3����R�X�X�h�/��3�'��+�+�,>�?���-�-�b�~�F��
	!���������W�[�[�-=�-=�>����^�W�[�[�-=�-=�>����T�"�X�t�G�}�5����R�Y�Y����7��G�B�K����W�R�[�"�-�����2���+��K�K�����K�K��� �$�1�1�r�v�v�{�{�C����������k�o�o�&:�&:�;���B������B���%�������
������!�.�.�0��	"����S��]�A�.����X�_�_�b�1����X�^�^�E�2�A�6��"�"�:�.����t�$�/��L�L��� ��L�L���!�I+�
*��+�
*��$/�.��'�
&��.A�A��A�A��A�A��'�
&��(
�K�K��� ��"/�.��
�L�L���!�s��.Z�Z�!+Z3�Z&�)Z3�:[�"[
�[�A9['�<C3[4�A-\�=\�"\�Z�Z#�&Z0	�+Z3�3Z=�[
�
[�[$�'[1�4\�\�\�\;c��ttjdz�D�]�}|j|��5t	j
td��}|j
|jj�tj||��}tj|�}|j|tj
�|j|dd�|j||�d|d<|j|dd�d	|d
<|j|d
d	�t	j
td��}|j
|jj�tj||��}|jt|�t|��|jj�|jj�|jj�ddd����y#1swY���xYw)Nr�rr:rrBr��changedrb�newvaluer�i�)rUrrr�rr)rdr5r�rrr�rl�assertIsNotr�r )rqrr+�
serialized_sl�deserialized_sl�	larger_sl�serialized_larger_sls       r�)test_shared_memory_ShareableList_picklingz;_TestSharedMemory.test_shared_memory_ShareableList_pickling�s���6�2�2�Q�6�7�E����E��*�"�0�0��r��;��������
�
�.� &���R�%� @�
�"(�,�,�}�"=���%�%�#�]�%@�%@�B�� � ���!4�a�8�� � ��_�5�%.���"�� � ��A��	�2�"��1��� � ���!3�Z�@�)�7�7��c�
�C�	����	�
�
� 4� 4�5�'-�|�|�I��'N�$�� � ��]�!3�S�9M�5N�O��
�
�#�#�%��#�#�)�)�+�������/+�*�8�*�*�s�F7G6�6H	c���ttjdz�D]�}|j|��5t	j
td��}tj||��}|jj�|jj�|jt�5tj|�ddd�ddd���y#1swY�xYw#1swY��xYw)Nr�rr:r)
rUrrr�rr)rr5r r�rmr�r)rqrr+rWs    r�5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_object�s����6�2�2�Q�6�7�E����E��*�"�0�0��r��;�� &���R�%� @�
����������
�
���&�&�'8�9��L�L��/�:�+�*�8�:�9��+�*�s$�A?C&�1C�C&�C#�C&�&C/	c���d}tjtjdd|gtjtj��5}|j
j
�j�j�}|j�|j�d}tjtj|�D]}	tj|d��}�t"j$dk(rSt'j(d	|��d
�|j*j-�j�}|j/d|�ddd�y#t $rY�{wxYw#1swYyxYw)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�zIA SharedMemory segment was leaked after a process was abruptly terminatedFr�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rr�rrr�r�rCr,r)�
unregisterr�r�rn)rqr�r�r,�err_msgrxr*rrs        r�4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_termination�s,��	���
�
�s�~�~�t�T�3�?�%/�_�_�%/�_�_�6�9:��8�8�$�$�&�,�,�.�5�5�7�D�
�K�K�M�
�F�F�H�;�G��+�+�G�,@�,@�'�J���'�4�4�T�%�H�C�K��w�w�'�!�!�+�+�a��v�J��H�
�h�h�m�m�o�,�,�.���
�
�D�EH�J�=6�6��)�����6�6�s2�	BE"�
E�!A(E"�	E�E"�E�E"�"E+N)rvrwrxr�rMr�r�r�r
rrr!r#r%rGrzrCr,r-r/r?rRr[r]rir[rrr�r�s���#�M�����)�
&�n�`3�,B�B�4
.��8�X�_�_�R�W�W��'�)N�O��P��.�X�_�_�R�W�W��'�)I�J��K��(H�<o"�b�60�+Jrr�c�b�eZdZdZd�Zd�Zed��Zd�Ze	jd�d��Zy)	�
_TestFinalizer�c��tjj�|_tjj	�yr)r�_finalizer_registryr�registry_backupr�r�s rrz_TestFinalize.setUps+��#�7�7�<�<�>���� � �&�&�(rc��tj�|jtj�tjj|j�yr)rmrnr�rrm�updaternr�s rrz_TestFinalize.tearDowns9��
�
�
������1�1�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�|j�tjd�y)Nc��eZdZy)�)_TestFinalize._test_finalize.<locals>.FooNr�r[rrr�rs!���rr�)r�r�)r�)r�)�d10r�)rR�exitpriority)�d01r)�d02)�d03)ri����)�STOPi����)
r<r�Finalizerrmrn�_exit_functionr rC�_exit)r�rMr�r�r��close_br�rurwrxrys           r�_test_finalizez_TestFinalize._test_finalizesG��	�&�	�
�E���
�
�a�����0�
�
�
�
���E���-�-��4�9�9�6�:���	��	�
�
�
�
���E���
�
�a�����0��e���
�
�c�4�9�9�8�!�D��e���
�
�c�4�9�9�8�!�D��e���
�
�c�4�9�9�8�!�D��e���
�
�c�4�9�9�8�!�D��
�
�d�D�I�I�F��E��
�
�d�D�I�I�I�D�I�	
�����
�
��
����rc�,�|j�\}}|j|j|f��}d|_|j	�|j�t
|jd�D�cgc]}|��}}|j|gd��ycc}w)Nr�Trz)r�r�ruryrxrwr)	r�r�rr�r�r�r�r�rl)rqrMr�r�r!r\s      r�
test_finalizez_TestFinalize.test_finalizeGs|���9�9�;���j��L�L�� 3� 3�:�-�L�H�����	���	�	����!%�d�i�i��!8�9�!8�#�#�!8��9�����!L�M��:s�1	Br�c������	�d��G�fd�dt��d�	d���	fd�}���	fd�}tj�}tj�}	tj
d�tjddd�tj|�	�tj|�	�g}tj|�5tjd
�d�	ddd�����	tj
|�tj|�tj�y#1swY�JxYw#tj
|�tj|�tj�wxYw)Nc��yrr[r[rr�cbz,_TestFinalize.test_thread_safety.<locals>.cbU���rc���eZdZ�fd�Zy)�-_TestFinalize.test_thread_safety.<locals>.Fooc�l��||_tj|�tjdd���y)Nr�r-)rv)rlrr{r��randint)rqr�s �rr�z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__Ys%�������
�
�d�B�V�^�^�A�s�5K�LrN)rvrwrxr�)r�s�rr�r�Xs	���
Mrr�Fc����sCtjtj�dz�	tj��s�Byy#t
$r}|�Yd}~�d}~wwxYwrf)r�rr�r�_run_finalizersri)rrN�finishs ��r�run_finalizersz8_TestFinalize.test_thread_safety.<locals>.run_finalizersasL�����
�
�6�=�=�?�T�1�2���(�(�*���!���C���s�A�	A�A�Ac����i}�s9	td�D�chc]	}����c}|tjd�<�s�8yycc}w#t$r}|�|j	�Yd}~�*d}~wwxYw)Nr:r�)rUr��getrandbitsrir�)rUrXrr�rNr�s   ���r�make_finalizersz9_TestFinalize.test_thread_safety.<locals>.make_finalizerslsi����A���@E�R�y�/I�y�!���y�/I�A�f�(�(��+�,�	��0J�� ���C��G�G�I�I���s'�
A�A�A�A�	A*�A%�%A*g���ư>r�r�r�T)r<r{�getswitchintervalrmr��setswitchintervalr�r"r�r	�
start_threadsr�rrn)
rqr�r��old_interval�
old_thresholdr�r�r�rNr�s
      @@@@r�test_thread_safetyz _TestFinalize.test_thread_safetyRs���	�	M�&�	M�����		�
	��,�,�.���(�(�*�
�
	��!�!�$�'����Q��1�%� �'�'�~�>� �'�'��?�A�G�!�/�/��8��
�
�3����9����	��
�!�!�,�/����m�,��J�J�L�9�8��
�!�!�,�/����m�,��J�J�L�s%�A-D-�D!�D-�!D*�&D-�-=E*N)rvrwrxr�rrr�rr�rr�r�r[rrrkrksM��"�M�)�>�
�%��%�N	N��W���u�%�4�&�4rrkc��eZdZd�Zd�Zy)�_TestImportStarc��ddl}tjjtj
�}tjj
|j|�d�}|j|�}|D�cgc]D}tjjtjj|�d�d��F}}|D�cgc]}d|z��	}}|jd�|jd�|Scc}wcc}w)Nrz*.pyr�zmultiprocessing.zmultiprocessing.__init__r)�globrCr��dirnamer�__file__r��escape�splitext�splitr�r[)rqr��folder�pattern�filesr��modulesrs        r�get_module_namesz _TestImportStar.get_module_names�s����������!9�!9�:���'�'�,�,�t�{�{�6�2�F�;���	�	�'�"��EJ�K�U��2�7�7�#�#�B�G�G�M�M�!�$4�Q�$7�8��;�U��K�3:�;�7�a�%��)�7��;����1�2����(�)����	L��;s
�6A	C7�C<c��|j�}tjdk(r4|jd�|jd�|jd�n(|jd�ts|jd�t
�|jd�|D]n}t
|�tj|}|jt|d�|�|jD]#}|jt||�|�d|����%�py)	Nr1zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z does not have attribute )r�r{r|r�r>r=r.r�r�r;r�)rqr�r,�mod�attrs     r�test_importz_TestImportStar.test_import�s����'�'�)���<�<�7�"��N�N�7�8��N�N�=�>��N�N�>�?��N�N�>�?� ����A�B��=��N�N�9�:��D��t���+�+�d�#�C��O�O�G�C��3�T�:���������C��&�7:�D�A��$�rN)rvrwrxr�r�r[rrr�r��s��	�rr�c�2�eZdZdZd�Zed��Zd�Zd�Zy)�_TestLoggingr�c��tj�}|jtj�|j|du�|j
d�|jd�|jt�y)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGr��debug�info�	LOG_LEVEL)rq�loggers  r�test_enable_loggingz _TestLogging.test_enable_logging�sV�� �+�+�-��������(�����d�*�+����/�0����O�$����	�"rc�j�tj�}|j|j��yr)rr�r�getEffectiveLevel)r�rMr�s   r�_test_levelz_TestLogging._test_level�s%�� �+�+�-���	�	�&�*�*�,�-rc�.�d}d}tj�}tj�}|j}tj
d��\}}|j
|�|j|j|f��}|j�|j||j��|j�|j�|j
tj�|j
|�|j|j|f��}|j�|j||j��|j�|j�|j
|�|j
t��y)Nr��%Fr�r�)�level)rr��logging�	getLoggerr�r�r�r�r�r�rlr�r�r �NOTSETr�)	rq�LEVEL1�LEVEL2r��root_logger�
root_levelrrr�s	         r�
test_levelz_TestLogging.test_level�s#������ �+�+�-���'�'�)�� �&�&�
�(�-�-�U�;����������L�L�� 0� 0��y�L�A��	���	���������/�	����	���	�������'����V�$��L�L�� 0� 0��y�L�A��	���	���������/�	����	���	����Z�(����i��(rc�n�tj�}|j}	|jtj
�t
j�}tj|�}d}|jtj|��|j|�|jd�t	jd�|jd�tj j#t$�}|j'�}|j)d|�d�|�|j)d|�d�|�|j)d|�d	�|�|j|�|j+|�|j-�y#|j|�|j+�|j-�wxYw)
Nz*[%(levelname)s] [%(filename)s] %(message)sr�2�3z[INFO] [z] 1z] 2z	[DEBUG] [z] 3)rr�r�r�r�DEBUGr�r�r��
StreamHandler�setFormatter�	Formatter�
addHandlerr�r�rCr��basenamer�rMrn�
removeHandlerr )rqr��original_levelr�r9�logging_format�filename�
log_records        r�
test_filenamez_TestLogging.test_filename�sG�� �+�+�-������	��O�O�D�J�J�'��[�[�]�F��+�+�F�3�G�I�N�� � ��!2�!2�>�!B�C����g�&��K�K����I�I�c�N��L�L����w�w�'�'��1�H����*�J��M�M�H�X�J�c�2�J�?��M�M�H�X�J�c�2�J�?��M�M�I�h�Z�s�3�Z�@��O�O�N�+�� � ��)��M�M�O��
�O�O�N�+�� � ��)��M�M�O�s�D+F�4F4N)	rvrwrxr�r�r�r�r�r�r[rrr�r��s*��"�M�#��.��.�)�8rr�c�`�eZdZdZed��Zejee	d�d�d��Z
y)�_TestPollEintrr�c�v�tjd�tj|tj
�yrf)r�rrCrHr<�SIGUSR1)r�r�s  r�_killerz_TestPollEintr._killers���
�
�3��
����V�^�^�$rr��requires SIGUSR1c���dg��fd�}tj�}tjtj|�}	|j	|j
|f��}|j
�	|j	tjd��}|j
�|j�|j�|j�d�|j|jd�tjtj|�y#|j�wxYw#tjtj|�wxYw)NFc���d�d<y)NTrr[)rR�
got_signals �r�recordz._TestPollEintr.test_poll_eintr.<locals>.record!s��� �J�q�Mrr�)rr)
rCr�r<r�r�r�r�r�rr�r�rlr�)rqr�r��
oldhandler�killerr�r�s      @r�test_poll_eintrz_TestPollEintr.test_poll_eintrs�����W�
�	!��i�i�k���]�]�6�>�>�6�:�
�	6��\�\����S�F�\�C�F��L�L�N�
��L�L��
�
��L�>�����	��������
��O�O�J�q�M�*����Q�Z�Z��+��M�M�&�.�.�*�5��	���
��
�M�M�&�.�.�*�5�s&�.D-�2AD�3AD-�D*�*D-�-&EN)rvrwrxr�r�r�rGr�r;r<r�r[rrr�r�sE��"�M��%��%��X������3�5G�H�6�I�6rr�c�>�eZdZejed�d��Zy)�TestInvalidHandle�skipped on Windowsc��tjjd�}	|j�d|_|jtt
ftjjd�y#tt
f$rY�NwxYw#d|_wxYw)Ni�M�rB)rrD�
Connectionr
rFrV�_handlermr5s  r�test_invalid_handlesz&TestInvalidHandle.test_invalid_handles9sy���)�)�4�4�X�>��	 ��I�I�K� �D�L����:�w�/�)�4�4�?�?��	E��
�G�$�	��	��
 �D�L�s#�A.�.B�=B�?B�B�	BN)rvrwrxrGrz�WIN32r�r[rrr�r�7s$���X�_�_�U�0�1�E�2�Err�c��eZdZd�Zd�Zy)�	OtherTestc��Gd�dt�}|jtjtjj
|�d�y)Nc��eZdZd�Zd�Zy)�FOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc��y)N�something bogusr[�rqr�s  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesOs��)rc��yrr[�rqr#s  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesQ���rN)rvrwrxr�r�r[rr�_FakeConnectionr�Ns��
*�
rr��abc)r<rmrr
rD�deliver_challenge�rqr�s  r�#test_deliver_challenge_auth_failurez-OtherTest.test_deliver_challenge_auth_failureMs=��	�f�	�
	
���/�=�=�)�4�4�F�F�)�+�V�	5rc��Gd�dt�}|jtjtjj
|�d�y)Nc��eZdZd�Zd�Zd�Zy)�EOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc��d|_yr�)r)r�s rr�zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__Ys	����
rc��|xjdz
c_|jdk(rtjjS|jdk(ryy)Nr�rr�r)r)rrD�
_CHALLENGEr�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytes[s=���
�
�a��
��:�:��?�*�5�5�@�@�@��Z�Z�1�_�-�rc��yrr[r�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesbr�rN)rvrwrxr�r�r�r[rrr�r�Xs��
�
�
rr�r�)r<rmrr
rD�answer_challenger�s  r�"test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failureWs=��	�f�	�	
���/�=�=�)�4�4�E�E�)�+�V�	5rN)rvrwrxr�r�r[rrr�r�Js��5�5rr��md5c�"�eZdZdZd�Zd�Zd�Zy)�ChallengeResponseTestssupadupasecretkeyc�V�tjj|j|�Sr)rrD�_create_responser�)rq�messages  r�create_responsez%ChallengeResponseTest.create_responsens$���)�)�:�:��L�L�'�
�	
rc�X�tjj|j||�Sr)rrD�_verify_challenger�)rqr�responses   r�verify_challengez&ChallengeResponseTest.verify_challengess&���)�)�;�;��L�L�'�8�
�	
rc�.�dD]�}|jd|���5d}|rd|jd�z}nd}||z}|j|�}|j|�s|j	|�|j||�ddd���y#1swY��xYw)N)Nrr�zalgo=sis-twenty-bytes-longs{%s}r�r)r�rr�
startswithrjr
)rq�algor�r�r	s     r�test_challengeresponsez,ChallengeResponseTest.test_challengeresponsexs���+�D�������j�)�-���$�t�{�{�7�';�;�F� �F��s�l���/�/��4���*�*�6�2��I�I�h�'��%�%�c�8�4�*�)�,�)�)�s�A&B�B	N)rvrwrxr�rr
rr[rrrris��#�G�
�

�
5rrc�.�|xjdz
c_yr�)r=)�nss r�initializerr�s���G�G�q�L�Grc�$�eZdZd�Zd�Zd�Zd�Zy)�TestInitializersc��tj�|_|jj�|_d|j_yr�)rrm�mgrr�rr=r�s rrzTestInitializers.setUp�s1��"�*�*�,����(�(�$�$�&�������rc�l�|jj�|jj�yr)rr�r�r�s rrzTestInitializers.tearDown�s�����������
�
�rc�P�tjj�}|jt|j
d�|jt|jf�|j|jjd�|j�|j�yr�)rr'�SyncManagerrm�	TypeErrorr�rrrlr=r�r�)rqrs  r�test_manager_initializerz)TestInitializers.test_manager_initializer�sj���$�$�0�0�2�����)�Q�W�W�a�0�	����d�g�g�Z�(���������q�)�	�
�
��	���rc�(�|jttjd��tjdt|j
f�}|j
�|j�|j|j
jd�y)Nr�)r)
rmrrr�rrr r�rlr=r?s  r�test_pool_initializerz&TestInitializers.test_pool_initializer�sa�����)�_�%9�%9�q��I�� � ��K�$�'�'��<��	���	�	������������q�)rN)rvrwrxrrrrr[rrrr�s���
��*rrc�\�	|jd��}y#tj$rYywxYw)NF)�block)r�r
r)r��items  r�_this_sub_processr �s-��
��u�u�5�u�!����=�=�
��
�s��+�+c��tj�}tjt|f��}d|_|j�|j
�y)Nr�T)rrr�r r�r�r�)r#�subProcs  r�
_test_processr#�s>���!�!�#�E��%�%�->�e�X�N�G��G�N��M�M�O��L�L�Nrc��||zSrr[r�s r�_afuncr%�r�rc��tjd��}|jtgd��}|j	�|j�y)Nrbr�)r�rr�rbr�rr)rr�r�r%r r�)r�rZs  r�pool_in_processr'�s5�����!�,�D�����.�/�A��J�J�L��I�I�Krc�.�eZdZd�Zed��Zd�Zd�Zy)�
_file_likec� �||_d|_yr)�	_delegate�_pid)rq�delegates  rr�z_file_like.__init__�s��!�����	rc�|�tj�}||jk7r||_g|_|jSr)rCr�r,�_cachers  r�cachez_file_like.cache�s1���i�i�k���$�)�)���D�I��D�K��{�{�rc�:�|jj|�yr)r0r[r�s  rr+z_file_like.write�s���
�
���$�rc�z�|jjdj|j��g|_y)Nr�)r+r+r�r0r/r�s r�flushz_file_like.flush�s(�������R�W�W�T�Z�Z�0�1���rN)rvrwrxr��propertyr0r+r3r[rrr)r)�s%������� �rr)c��eZdZd�Zd�Zd�Zy)�TestStdinBadfiledescriptorc�x�tjt��}|j�|j	�y�Nr�)rr�r#r�r�)rqr�s  r�test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_process�s$���&�&�m�<���
�
���	�	�rc�x�tjt��}|j�|j	�yr8)rr�r'r�r�r?s  r�test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_process�s$���#�#�?�;��	���	�	���rc����tj�}t|���jd�t	j
�fd���}�j
�|j�dk(sJ�y)NrSc�$���j�Sr)r3)�flikes�rr�z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>�s���e�k�k�mrr�)r�r�r)r+rr�r3rM)rq�sior�r>s   @r�
test_flushingz(TestStdinBadfiledescriptor.test_flushing�sQ����k�k�m���3���
���E���&�&�.C�D��
���
��|�|�~��&�&�&rN)rvrwrxr9r;r@r[rrr6r6�s���
�
'rr6c��eZdZed��Zd
d�Zed��Zd
d�Zd�Zd�Z	e
jd�d��Zed	��Z
e
jd�d
��Zd�Zy)�TestWaitc���td�D]S}|r*tjtj�dz�|j	|tj�f��U|j�y)Nr:r)rUr�rr�rrCr�r )r�r��slowrXs    r�_child_test_waitzTestWait._child_test_wait�sL���r��A���
�
�6�=�=�?�U�2�3�
�F�F�A�r�y�y�{�#�$��	
���	rc����ddlm}g}g�g}td�D]�}tjd��\}}tj
|j||f��}d|_|j�|j�|j|��j|�|j|j���|r2||�D]$}	|j�}	|j|	��&|r�2|j!�t#�fd�td	�D��}
|j%||
�y#t$r$|j|�|j�Y��wxYw)
Nrr4rbFr�r�Tc3�H�K�|]}�D]}||jf����y�wr)r�)r�rXr�rys   �rr�z%TestWait.test_wait.<locals>.<genexpr>s"�����G�i���A�1�a�e�e�*��*�i�s�"r:)�multiprocessing.connectionrrUrr�r�rEr�r�r r[rdr�r�rr�r�r�rl)rqrDr�readers�messagesrXrCr�r�r�r]rys           @r�	test_waitzTestWait.test_wait�s���3��������q��A�"�'�'�u�5�D�A�q��'�'�t�/D�/D�A�t�9�U�A��A�H�
�G�G�I�
�G�G�I��N�N�1���L�L��O��O�O�A�F�F�#����'�]��)��&�&�(�C�
�O�O�C�(�#��	�
�
���G�e�B�i�G�G������8�,�� ���N�N�1�%��G�G�I��s�D2�2*E�Ec�,�tj�}|j|�td�D]Q}|r*tjtj
�dz�|j
d|zjd���S|j�y)Nr:r�%s
r�)	r|r�rUr�rr�r�rr )r�r�rDrrXs     r�_child_test_wait_socketz TestWait._child_test_wait_socketsg���M�M�O��	�	�	�'���r��A���
�
�6�=�=�?�U�2�3�
�I�I�v��z�)�)�'�2�3��	
���	rc��ddlm}tjtj
df�}|j
�}g}g}i}td�D]h}tj|j||f��}	d|	_|	j�|j|	�|j|	j��jtd�D]+}|j!�\}
}|j|
�g||
<�-|j#�|rY||�D]K}
|
j%d�}|s"|j'|
�|
j#��8||
j|��M|r�Ydjd�td	�D��j)d
�}
|j+�D]#}|j-dj|�|
��%y)Nrr4rbr�Tr�r�c3�&K�|]	}d|z���y�w)rMNr[r�s  rr�z,TestWait.test_wait_socket.<locals>.<genexpr>Es����9�y�!�6�A�:�y�s�r:r�r)rHrr|r}rr�r~rUrr�rNr�r�r[rdr�rKr r�r�rrcrl)rqrDrr`r�rIry�dicrXr�rCrxr�r]�vs               r�test_wait_socketzTestWait.test_wait_socket&si��3�� � �-�"4�"4�a�!8�9���}�}����������q��A��'�'�t�/K�/K�.2�D�\�;�A��A�H�
�G�G�I��L�L��O��O�O�A�F�F�#�
��q��A��8�8�:�D�A�q��N�N�1���C��F��	
���	���'�]���f�f�R�j����N�N�1�%��G�G�I���F�M�M�#�&�
#���7�7�9�u�R�y�9�9�@�@��I������A����S�X�X�a�[�(�3�rc�&�|jd�yrH)rKr�s r�test_wait_slowzTestWait.test_wait_slowIs�����t�rc�&�|jd�yrH)rSr�s r�test_wait_socket_slowzTestWait.test_wait_socket_slowLs�����d�#rrrc�b�ddlm}d}tj�\}}t	j
�}|||g|�}t	j
�|z
}|j
|g�|j||tz
�|jd�|||gd�}|j
||g�y)Nrr4r/r�)
rHrrr�r�r�rlrWr�r)rqrr6r�r�r�r�r4s        r�test_wait_timeoutzTestWait.test_wait_timeoutOs���3����#�#�%���1���� ���A�q�6�7�#����� �5�(������b�!����5�'�I�"5�6�	���t���A�q�6�2�������q�c�"rc�N�|j�tj|�yr)rlr�r)r�r��periods   r�signal_and_sleepzTestWait.signal_and_sleepas�����
��
�
�6�rc���ddlm}d}d�}tjd�}tj�\}}tj
|j||f��}|j�|j|jt�|j|jd���tj�}|||j|g|dz�}	tj�|z
}
|j|	|jg�|j!|
|dz�|j#|
|dz
�|j%d�tj�}|||j|gd�}	tj�|z
}
|j||	�||j|g��|j!|
d	�|j%d�tj�}|||j|gd�}	tj�|z
}
|j||	�|||j|g��|j!|
d	�|j'�|j)�y)
Nrr4r�c��t|d���S)Nc��t|�Sr)rWr�s rr�z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>ks��B�q�Er)rn)r�)r`s rr�z,TestWait.test_wait_integer.<locals>.<lambda>ks��F�1�/�:rr�r�rrg�������?)rHrrr�r�r�r\r�r�rcrMr�r]r�r�rlr�rWrr
r�)rqrr]�sorted_r�r�r�r�r�r�r4s           r�test_wait_integerzTestWait.test_wait_integerfs���3���:���'�'��*���#�#�%���1��#�#�4�+@�+@�*-�x��
:��	
���	����a�j�j�#�.�������B��/�0���� ���A�q�z�z�1�%�x�"�}�5����� �5�(������q�z�z�l�+�����x�!�|�,����5�(�Q�,�/�	���t����� ���A�q�z�z�1�%�r�*����� �5�(��������w��
�
�A��'?�@�����s�#�	���t����� ���A�q�z�z�1�%�r�*����� �5�(��������w��1�:�:�q�/A�'B�C�����s�#�	���
�	���rc�2�ddlm}tj�\}}t	j
�}||gd��}t	j
�|z
}|j
|g�|j|d�|j�|j�y)Nrr4rBrr�)	rHrrr�r�r�rlr�r )rqrr�r�r�r�s      r�test_neg_timeoutzTestWait.test_neg_timeout�sr��3��#�#�%���1��N�N����A�3��#���N�N��q� ������b�!�����1��	���	�	���	rNr�)rvrwrxr�rErKrNrSrUrWrr�rYr\rarcr[rrrBrB�s�������-�<����!4�F�$��W���z�*�#�+�#�"�����W���z�*�)�+�)�V	rrBc�p�eZdZejed�d��Zejed�d��Zy)�TestInvalidFamilyr�c��|jt�5tjj	d�ddd�y#1swYyxYw)Nz\\.\test�rmrFrrDrFr�s r�test_invalid_familyz%TestInvalidFamily.test_invalid_family�s0��
�
�
�z�
*��&�&�/�/��<�+�
*�
*��	� ?�Az skipped on non-Windows platformsc��|jt�5tjj	d�ddd�y#1swYyxYw)Nz/var/test.pipergr�s r�test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32�s1��
�
�
�z�
*��&�&�/�/�0@�A�+�
*�
*�riN)	rvrwrxrGrzr�rhr�rkr[rrrere�sI���X�_�_�U�0�1�=�2�=��X���� B�C�B�D�Brrec�2�eZdZed��Zed��Zd�Zy)�	TestFlagsc�T�|jttj��yr)rr�r{�flags�r�rMs  r�run_in_grandchildzTestFlags.run_in_grandchild�s���	�	�%��	�	�"�#rc��ddl}tj|�}|jd��\}}|j	|j
|f��}t
jt��5|j�ddd�|j�}|j�|j�|j�ttj�|f}t!|j#|��y#1swY�xYw)NrFr�r�)�category)�jsonrrOr�r�rqrJrK�DeprecationWarningr�r�r�r r�r{ro�printr)	r�rTrt�mprCr�r��grandchild_flagsros	         r�run_in_childzTestFlags.run_in_child�s����
�
(�
(��
6���w�w�e�w�$���1��J�J�c�3�3�1�$�J�?��
�
$�
$�.@�
A�
�G�G�I�B��6�6�8��	����	���	�	���	��s�y�y�!�#3�4��
�d�j�j��� �B�
A�s�'C6�6C?c��ddl}dtj��d�}tjt
jdddd|g�}|j|jd��\}}|j||�y)	NrzIfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child(�)r_z-Sz-Or�r�)
rtrrQra�check_outputr{r�rrfrl)rqrt�progr#�child_flagsrxs      r�
test_flagszTestFlags.test_flags�sz���
&�&5�&F�&F�&H�%K�1�
N�	
��&�&�
�^�^�T�4��t�T�:�<��(,�
�
�4�;�;�w�3G�(H�%��%�����&6�7rN)rvrwrxr�rqryrr[rrrmrm�s-���$��$��!��!�
8rrmc�"�eZdZed��Zd�Zy)�TestTimeoutsc���tjd�|jd�|j�tj
j
|�}|jd�|j�y)Nr�r�r�)r�rrr rrDrJ)r��childr�rMs    r�
_test_timeoutzTestTimeouts._test_timeout�sK���
�
�1�
�
�
�
�3��
���
��)�)�0�0��9���	�	�#���
�
�rc���tj�}	tjd�tjd��\}}tj
j
d��}tj|j||jf��}|j�|j�|j|j�d�|j�|j�}|j|j�d�|j�|j�t|�tj|�y#tj|�wxYw)	NrTr��AF_INETrBr�r�r�)r|�getdefaulttimeout�setdefaulttimeoutrr�rDrFr�r�r�r�r rlr�rKr')rq�old_timeout�parentr�r`r�rMs       rr5zTestTimeouts.test_timeout�s����.�.�0��	2��$�$�S�)�+�0�0��=�M�F�E��*�*�3�3�9�3�E�A��'�'�t�/A�/A�.3�Q�Y�Y�-?�A�A�
�G�G�I��K�K�M����V�[�[�]�C�0��L�L�N��8�8�:�D����T�Y�Y�[�#�.��J�J�L�
�G�G�I���O��$�$�[�1��F�$�$�[�1�s�D&E�E)N)rvrwrxr�r�r5r[rrr�r��s������2rr�c��eZdZd�Zy)�TestNoForkBombc��tj�}tjj	tjjt�d�}|dk7rStjjj||�\}}}|j|d�|jd|�ytjjj||�\}}}|j|j�d�|j|d�y)Nzmp_fork_bomb.pyrhrsRuntimeErrors123)rrQrCr�r�r�r�r=rr�assert_python_failurerlrnr�r�)rqrwr,rhr�rrs      r�test_noforkbombzTestNoForkBomb.test_noforkbomb�s���
�
-�
-�
/���w�w�|�|�B�G�G�O�O�H�5�7H�I��
��<��<�<�5�5�K�K�D�RT�U�L�B��S����S�#�&��M�M�/�3�/��<�<�5�5�F�F�t�R�P�L�B��S����S�Z�Z�\�6�2����S�#�&rN)rvrwrxr�r[rrr�r��s��
'rr�c�"�eZdZed��Zd�Zy)�TestForkAwareThreadLockc�"�|dkDrRtj|j|dz
|f��}|j�|j	�t|�n(|j
ttj��|j	�y)Nr�r�)
rr�r�r�r r'rr�r�_afterfork_registry)r�rwrMr�s    rr�zTestForkAwareThreadLock.child
s`���q�5��'�'�s�y�y��!��T�{�K�A�
�G�G�I��J�J�L���O��I�I�c�$�2�2�3�4��
�
�rc�n�tjd�\}}tj�}t	tj
�}tj|jd|f��}|j�|j�|j�}t|�|j||�y)NFr�r�)
rr�r�ForkAwareThreadLockr�r�r�r�r�r r�r'�assertLessEqual)rqrCr�r`�old_sizer��new_sizes       rruz!TestForkAwareThreadLock.test_locks����#�#�E�*���1��$�$�&���t�/�/�0���#�#�4�:�:�Q��F�C��	���	�	���	��6�6�8���Q�����X�x�0rN)rvrwrxr�r�rur[rrr�r�s��
����	1rr�c�.�eZdZd�Zd�Zed��Zd�Zy)�TestCloseFdsc�8�tr"tj�j�Stj�j�}g}|dkr,|j|�t	j
|�}|dkr�,|D]}t	j|��|S)Nr�)r�r|�detachr[rC�dupr )rqr��to_closerZs    r�get_high_socket_fdzTestCloseFds.get_high_socket_fd)s|����=�=�?�)�)�+�+�����'�'�)�B��H��r�'�����#��V�V�B�Z���r�'����������Irc��trCtjtjtj|��j	�ytj|�y)N)r)r�r|r��SOCK_STREAMr rC)rqr�s  rr zTestCloseFds.close;s3����M�M�&�.�.�&�*<�*<�R�H�N�N�P��H�H�R�Lrc��	tj|tjtj�}|j	�|jd�y#t$r}|j|�Yd}~yd}~wwxYwr)r|�fromfdr�r�r rri)r�rMr�rrs     r�_test_closefdszTestCloseFds._test_closefdsAsX��	��
�
�b�&�.�.�&�2D�2D�E�A�
�G�G�I��I�I�d�O��	�	��I�I�a�L�L��	�s�3A�	A;� A6�6A;c��tstjd��tj�\}}|j�}	tj|j||f��}|j�|j�|j�}t|�|j|�|j�|j�tj�dk(r|j|d�yd}|j|t�|j!|j"t"j$k(xs|j&|k(|�y#|j|�|j�|j�wxYw)Nzrequires fd picklingr�rhi6')r>rGrHrr�r�r�r�r�r r�r'rQror�rVr�r�r�winerror)rqrrr�r�r�WSAENOTSOCKs       r�test_closefdzTestCloseFds.test_closefdKs����#�#�$:�;�;�(�-�-�/����
�
$�
$�
&��
	��'�'�t�/B�/B�.4�b�\�;�A�
�G�G�I��L�L�N����
�A���O��J�J�r�N��L�L�N��L�L�N��+�+�-��7��M�M�!�T�"��K��!�!�!�W�-��O�O�A�G�G�u�{�{�2�6��J�J�+�5�q�
:��
�J�J�r�N��L�L�N��L�L�N�s
�AE�3FN)rvrwrxr�r r�r�r�r[rrr�r�'s%���$�����:rr�c���eZdZeej
ej�Zed��Z	e
jee
d�d�d��Zed��Ze
jee
d�d�d��Zy)�TestIgnoreEINTRc���d�}tjtj|�|jd�|j�}|j|�|j	d|j
z�y)Nc��yrr[�r��frames  rr9z-TestIgnoreEINTR._test_ignore.<locals>.handlerpr�r�ready�x)r<r�rr�r��
CONN_MAX_SIZE)r�rMr9rZs    r�_test_ignorezTestIgnoreEINTR._test_ignorensR��	��
�
�f�n�n�g�.��	�	�'���I�I�K���	�	�!������s�0�0�0�1rr�r�c��tj�\}}	tj|j|f��}d|_|j�|j
�|j|j�d�tjd�tj|jtj�tjd�|j!d�|j|j�d�tjd�tj|jtj�|j|j#�d|j$z�tjd�|j'�|j
�y#|j
�wxYw)Nr�Tr�ri�r�)rr�r�r�r�r�r rlr�r�rrCrHr�r<r�rr�r�r�r8s    r�test_ignorezTestIgnoreEINTR.test_ignorexs ��*�/�/�1���j�	��'�'�t�/@�/@�.8�]�<�A��A�H�
�G�G�I��������T�Y�Y�[�'�2��J�J�s�O��G�G�A�E�E�6�>�>�*��J�J�s�O��I�I�d�O����T�Y�Y�[�$�/��J�J�s�O��G�G�A�E�E�6�>�>�*����T�_�_�.��t�7I�7I�0I�J��J�J�s�O�
�F�F�H��J�J�L��D�J�J�L�s�FF1�1Gc�0�d�}tjtj|�tjj	�5}|j|j�|j�}|jd�ddd�y#1swYyxYw)Nc��yrr[r�s  rr9z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�r�r�welcome)r<r�rrDrFrr�rK)r�rMr9r`r�s     r�_test_ignore_listenerz%TestIgnoreEINTR._test_ignore_listener�s`��	��
�
�f�n�n�g�.�
�
'�
'�
0�
0�
2�a��I�I�a�i�i� ����
�A�
�F�F�9��3�
2�
2�s�=B�Bc�~�tj�\}}	tj|j|f��}d|_|j�|j
�|j�}tjd�tj|jtj�tjd�tjj!|�}|j#|j�d�|j%�|j
�y#|j
�wxYw)Nr�Trr�)rr�r�r�r�r�r r�r�rrCrHr�r<r�rDrJrlr�)rqrMr�r�r�rPs      r�test_ignore_listenerz$TestIgnoreEINTR.test_ignore_listener�s���*�/�/�1���j�	��'�'�t�/I�/I�.8�]�<�A��A�H�
�G�G�I������i�i�k�G��J�J�s�O��G�G�A�E�E�6�>�>�*��J�J�s�O�$�/�/�6�6�w�?�F����V�[�[�]�I�6�
�F�F�H��J�J�L��D�J�J�L�s�DD*�*D<N)rvrwrx�maxr�
PIPE_MAX_SIZE�
SOCK_MAX_SIZEr�r�r�rGr�r;r<r�r�r�r[rrr�r�is�����-�-�w�/D�/D�E�M��2��2��X������3�5G�H��I��,�����X������3�5G�H��I�rr�c���eZdZed��Zd�Zd�Zd�Zd�Zd�Z	d�Z
eje
jdk(d	�ed
�d���Zed��Zed
��Zd�Zy)�TestStartMethodc�J�|jtj��yr)rrrQrps  r�_check_contextzTestStartMethod._check_context�s���	�	�/�2�2�4�5rc�J�|jd��\}}|j|j|f��}|j�|j	�|j�}|j	�|j
�|j||j��y)NFr�r�)	r�r�r�r�r r�r�rlrQ)rqrtrCr�r��child_methods      r�
check_contextzTestStartMethod.check_context�sx���x�x�u�x�%���1��K�K�t�2�2�!��K�>��	���	�	���	��v�v�x��	���	�	��������s�';�';�'=�>rc��dD]�}	tj|�}|j|j	�|�|j|j�|�|j
t|jd�|j
t|jd�|j|���y#t$rY��wxYw)N�rhrOr�rO)	rrOrFrlrQrormrkr�)rq�methodrts   rrDzTestStartMethod.test_context�s���5�F�
�%�1�1�&�9��
���S�1�1�3�V�<��M�M�#�/�/�+�S�1����j�#�*>�*>��H����j�#�*>�*>��E����s�#�6���
��
�s�B2�2	B>�=B>c���	tjd�}|jtd�5|jgd��ddd�y#t$rtjd��wxYw#1swYyxYw)Nr�zforkserver should be availablez&module_names must be a list of stringsr�)rrOrFrGrHrUr�set_forkserver_preload)rqrts  r�test_context_check_module_typesz/TestStartMethod.test_context_check_module_types�sn��	F�!�-�-�l�;�C��
#�
#�I�/W�
X��&�&�y�1�Y�
X���	F��#�#�$D�E�E�	F��
X�
X�s�A
�A,�
A)�,A5c�<�tjt�d}tj�}	dD�]}	tj|d��|j
tj�|�tj�}|j
|j�|�|jt|�jj�j|��|j|jjj�j|��|jt�|dz
}��	tj|d��|j|d�y#t
$rY��KwxYw#tj|d��wxYw)Nrr�Trfr�)rr��PRELOADrQrkrFrlrOr�rrv�lowerrr�r�r3)rqr)�
old_methodr�rts     r�test_set_getzTestStartMethod.test_set_get�sB���.�.�w�7���$�5�5�7�
�	E�9���#�4�4�V�4�H�� � ��!A�!A�!C�V�L�%�1�1�3��� � ��!5�!5�!7��@�����S�	� 2� 2� 8� 8� :� E� E�f� M�N�����K�K�(�(�.�.�0�;�;�F�C�E��"�"�?�3���
��:�
�,�,�Z�t�D�����q�)��"�����
�,�,�Z�t�D�s/�F�E2�C8F�2	E?�;F�>E?�?F�Fc���tj�}tjdk(r|j	|dg�y|j|ddgk(xs|ddgk(xs|gd�k(xs|gd�k(�y)Nr1rOrhr�)rOrhr�)r�get_all_start_methodsr{r|rlr�)rq�methodss  r�test_get_allzTestStartMethod.test_get_all�sz��!�7�7�9���<�<�7�"����W�w�i�0��O�O�G���'8�8�G�#���'8�8�G�#�'F�F�G�$�'F�F�
Hrc���tj�dk7r|jd�tjjtjj
t�d�}tjjj|�\}}}|j�}|j�}|j�dk7s|dk7r(t|�t|�|jd�yy)Nr�z*test only relevant for 'forkserver' methodz
mp_preload.py�okr�z(failed spawning forkserver or grandchild)rrQr�rCr�r�r�r�r=rrr�rfr�rvrj)rqr,rhr�rrs     r�test_preload_resourcesz&TestStartMethod.test_preload_resources�s����+�+�-��=��M�M�F�G��w�w�|�|�B�G�G�O�O�H�5��G���|�|�1�1�B�B�4�H���C���j�j�l���j�j�l���:�:�<�4��3�"�9��#�J��#�J��I�I�@�A�$-rr1z*Only Spawn on windows so no risk of mixing�avoids redundant testing.c�N�dD]�}tjd�j�}tj|�}|jt|f��}d}|jt|�5|j�ddd���dD]�}tj�D]r}tj|�j�}tj|�}|jt|f��}|j�|j��t��y#1swY��!xYw)N)rOr�rhr�zA SemLock created in a fork)
rrOrr�r$rUr8r�r�r�)rq�process_methodr#�process_ctxr�rh�queue_methods       r�test_mixed_startmethodz&TestStartMethod.test_mixed_startmethod�s���
6�N�#�/�/��7�=�=�?�E�)�5�5�n�E�K��#�#�;�e�X�#�F�A�3�G��'�'��g�>����	�?�>�6�4�L�"1�"G�"G�"I��'�3�3�L�A�G�G�I��-�9�9�.�I���'�'�{�%��'�J�����	�����#J�4�	?�>�s�.D�D$	c�&�|jd�yr�r�)r�r#s  r�_put_one_in_queuez!TestStartMethod._put_one_in_queues
��
�	�	�!�rc��|jd�tj|j|f��}|j	�|j�yrT)r�rr�r�r�r�)r�r#r&s   r�_put_two_and_nest_oncez&TestStartMethod._put_two_and_nest_onces9��
�	�	�!��!�)�)��1F�1F�e�X�V���
�
�����rc��tj�}tj|j|f��}|j	�|j�g}|j
�s0|j|j��|j
�s�0|jt|�tddg��y)Nr�rr�)rrr�r�r�r�r�r[r��assertSetEqualr�)rqr#r&rs    r�test_nested_startmethodz'TestStartMethod.test_nested_startmethods��� �%�%�'��!�)�)��1L�1L�TY�S[�\���
�
���������+�+�-��N�N�5�9�9�;�'��+�+�-�
	
���C��L�#�q�!�f�+�6rN)rvrwrxr�r�r�rDr�r�r�r�rGrzr{r|r\r�r�r�r�r[rrr�r��s����6��6�?�
$�2�*�,H�
B��X�_�_�S�\�\�W�,�A�C� �!<�=��>�C��&��������7rr�r.c���eZdZd�Zd�Zd�Zd�Zeje	jjd�d�d��Ze
d��Zd	�Zd
�Zej"eed�d�d
��Zy)�TestResourceTrackerc���d}tjD�]�}|j|��5|dk(r
	ddd��&tj�\}}tjtjdd|j||��g|gt
j��}tj|�t|dd	�
�5}|j�j�jd�}|j�j�jd�}ddd�t!|�|j#�|j%�d|�d
�}	t'j(t&j*|	�D]}
	t!|��|j6j9�jd�}|j6j�dj|�}
|j;||
�|j;|d|z�ddd����y#1swY��xYw#t,$rE}|j/|j0t0j2t0j4f�Yd}~��d}~wwxYw#1swY��cxYw)Na�if 1:
            import time, os
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")


            def create_and_register_resource(rtype):
                if rtype == "semaphore":
                    lock = mp.Lock()
                    return lock, lock._semlock.name
                elif rtype == "shared_memory":
                    sm = SharedMemory(create=True, size=10)
                    return sm, sm._name
                else:
                    raise ValueError(
                        "Resource type {{}} not understood".format(rtype))


            resource1, rname1 = create_and_register_resource("{rtype}")
            resource2, rname2 = create_and_register_resource("{rtype}")

            os.write({w}, rname1.encode("ascii") + b"\n")
            os.write({w}, rname2.encode("ascii") + b"\n")

            time.sleep(10)
        )r-�noopr_r�)r�r-)�pass_fdsr�r*T)r�r�zA z< resource was leaked after a process was abruptly terminatedr�z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)r)r+r�rC�piperarbr{r�r�rcr r�rdr�rfr.r
rrr�rrVrnr��ENOENT�EINVALr�r�r�)rqr�r-rCr�r�r��name1�name2rhrxrrrr]s              r�test_resource_trackerz)TestResourceTracker.test_resource_tracker2s�����:&�4�4�E����E��*��F�?��+�*��w�w�y���1��$�$�c�n�n�%)�4����a�u��1M�&O�/0�c�,6�O�O�=��������!�T�4�0�A��J�J�L�/�/�1�8�8��A�E��J�J�L�/�/�1�8�8��A�E�1�!���.����
�������w�'1�2�� �/�/��0E�0E�29�;�A��(���6�;��h�h�m�m�o�,�,�W�5������� �&�&,�f�!�'#��� � ��h�/�� � ��&F��&N�O�G+�*�5�1�0��#���
�
�a�g�g����e�l�l�/K�L���	��/+�*�sV�I,�BI,�=AH�A!I,�:H�A=I,�H�I,�	I)	�$:I$	�I,�$I)	�)I,�,I6	c�p�ddlm}|j}|�Jtj|t
j�tj|t
j��tj�5tjd�|j�ddd�|j}tj||�tjd�tj d�}tjd��5}tjd	�|j#�}|j%�|j'�t)j*|�}~t-j.�|j1|��|rp|j3t5|�d
�|d}	|j7t9|	j:t<��|j7dt?|	j@�v�n|j3t5|�d�ddd�y#1swY���xYw#1swYyxYw)Nr��_resource_tracker)r�rBrcrOT)r��alwaysr�zresource_tracker: process died)!� multiprocessing.resource_trackerr�r,rCrHr<rIr�wait_processrJrKrLr�r�rrrOr�r]rlrkrlrmrnr�rlr�r��
issubclassrs�UserWarningror)
rqr��
should_dier�r�rt�all_warnr�rp�the_warns
          r�check_resource_tracker_deathz0TestResourceTracker.check_resource_tracker_deathys���	G��$�$���?��G�G�C����(�� � ������?�
�
$�
$�
&��!�!�(�+��,�,�.�'� �$�$��
����V���
�
�3���)�)�'�2��
�
$�
$�D�
1�X��!�!�(�+��-�-�/�C��K�K�M��K�K�M����S�!�B���J�J�L����b�d�#��� � ��X���2�#�A�;�����
�8�+<�+<�k� J�K���� @�#&�x�'7�'7�#8�!9�:�� � ��X���2�%2�
1�'�
&��2�
1�s�3&H�DH,�H)�,H5c�D�|jtjd�yrD)r�r<r�r�s r�test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigint�s���)�)�&�-�-��?rc�D�|jtjd�yrD)r�r<rBr�s r�test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigterm�s���)�)�&�.�.�%�@r�netbsdzKgh-125620: Skip on NetBSD due to long wait for SIGKILL process termination.c�D�|jtjd�yrH)r�r<rIr�s r�test_resource_tracker_sigkillz1TestResourceTracker.test_resource_tracker_sigkill�s��	
�)�)�&�.�.�$�?rc��ddlm}|j�|jd|fv}||j	�z}|j|�y)Nrr�)r�r�r�r,�_check_aliver)rMr�r��reuseds    r�_is_resource_tracker_reusedz/TestResourceTracker._is_resource_tracker_reused�sG��F��(�(�*�#�'�'�D�#�;�6���#�0�0�2�2���	�	�&�rc��ddlm}|j�|j}t	j
d��\}}t	j|j||f��}|j�|j�}|j�|j�|j�|j|�y)Nrr�Fr�r�)
r�r�r�r,rr�r�rr�r�r�r r�)rqr�r�rCr�r��is_resource_tracker_reuseds       r�test_resource_tracker_reusedz0TestResourceTracker.test_resource_tracker_reused�s���F��(�(�*��$�$���#�#�5�1���1��#�#�4�+K�+K�*+�S��
3��	���	�%&�V�V�X�"�	
����	���	�	���	����2�3rc��d}ddt|�z
z}|jt�5tj||�ddd�y#1swYyxYw)Nrr�r�)r�rmrFr)�register)rqr-�too_long_name_resources   r�test_too_long_name_resourcez/TestResourceTracker.test_too_long_name_resource�sH�� ��!$��c�%�j�(8�!9��
�
�
�z�
*��%�%�&<�e�D�+�
*�
*�s�A	�	A�pthread_sigmaskz pthread_sigmask is not availablec��ddlm}tjtjt��}tjtjtjh}	|D]�}tjtj|h�|jtjtjt��|h�|�}|j�|jtjtjt��|h�|j���	tjtj|�y#tjtj|�wxYw)Nr)�ResourceTracker)
r�rr<r
�	SIG_BLOCKr�rBr�r��SIG_SETMASKrlr��_stop)rqr�orig_sigmask�signals�sig�trackers      r�%test_resource_tracker_blocked_signalsz9TestResourceTracker.test_resource_tracker_blocked_signals�s��
	E��-�-�f�.>�.>���F���>�>�6�=�=�&�.�.�A��
	E����&�&�v�'9�'9�C�5�A�� � ��!7�!7��8H�8H�#�%�!P�SV�RW�X�)�+���&�&�(�� � ��!7�!7��8H�8H�#�%�!P�SV�RW�X��
�
��
�
�"�"�6�#5�#5�|�D��F�"�"�6�#5�#5�|�D�s
�#C
E�&E<N)rvrwrxr�r�r�r�rGrzr{r|rrrMrrrr�r;r<rr[rrr�r�.s���EP�N#3�J@�A��X�_�_�S�\�\�,�,�X�6�b�d�@�d�@�����4�$E��X�����):�;�=_�`�E�a�Err�c�f�eZdZed��Zd�Zd�Zd�Zejjd��Zy)�TestSimpleQueuec���|j�	|j|j��|j|j��|j�y#|j�wxYwr)rr�r�r�rs    r�_test_emptyzTestSimpleQueue._test_empty�sQ������	&��I�I�e�k�k�m�$��I�I�e�k�k�m�$��#�#�%���#�#�%�s�>A!�!A3c���tj�}|j�|jtd�5|j�ddd�y#1swYyxYw)NrT)r�SimpleQueuer rUrVr�rs  r�test_empty_exceptionsz%TestSimpleQueue.test_empty_exceptions�s@��
�'�'�)��	���	�
�
#�
#�G�[�
9�
�G�G�I�:�
9�
9�s�A�Ac��tj�}tj�}tj�}tj|j|||f��}d|_|j
�|j|j��|j�|j�|j|j��|j|j�d�|j|j�d�|j|j��|j�y)Nr�TF)rrrr�rr�r�r�r�r�rr�rlr�r�)rqr#rrr�s     r�
test_emptyzTestSimpleQueue.test_empty�s����+�+�-��)�/�/�1��-�3�3�5���&�&��#�#���*=�>�
������
�
��������
�&������ � �"��������'��������d�+��������e�,�������
�&��	�	�rc�l�tj�}|j�|j�yr)rrr �rqr#s  rrqzTestSimpleQueue.test_closes"���+�+�-��
���
�
���
rc���tj�}|j�|j|jj
�|j|jj
�yr)rrr r��_readerr=�_writerr"s  r�test_closedzTestSimpleQueue.test_closedsE���+�+�-��
���
�����
�
�,�,�-�����
�
�,�,�-rN)rvrwrxr�rrr rqr=r�cpython_onlyr&r[rrrr�sA���&��&���0�
�\�\���.��.rrc��eZdZd�Zy)�TestPoolNotLeakOnFailurec����d�g�G��fd�d�}|jtd�5tjj	dt
jj|����}|j�|j�ddd�|jtd��D���y#1swY�+xYw)	Nr�c�4��eZdZ�fd�Z�fd�Zd�Zd�Zd�Zy)�RTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc�R��d|_d|_d|_�j|�y)NzFake Process)r,r�r�r[)rqrS�forked_processess  �rr�z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__+s&���*��	� $��
�!��
� �'�'��-rc�>���dkrtd���dz�d|_y)Nr�Manually induced OSErrorr�r�)rVr�)rq�will_fail_ins �rr�zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.start1s(����1�$�!�"<�=�=���!��&��
rc��d|_y)N�stoppingr�r�s rr
z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminate8s	��'��
rc�2�|jdk(rd|_yy)Nr3�stoppedr�r�s rr�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.join;s���:�:��+�!*�D�J�,rc�B�|jdk(xs|jdk(S)Nr�r3r�r�s rr�z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_alive?s���z�z�Y�.�J�$�*�*�
�2J�JrN)rvrwrxr�r�r
r�r�)r.r1s��r�FailingForkProcessr,*s���
.�
'�
(�
+�
Krr7r0r�)r�)�contextc3�<K�|]}|j����y�wrr�)r�r&s  rr�zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>Hs����C�2B�w�� � �"�2B�r�)rUrVrr�r�rGr��	MagicMockr r�r�rG)rqr7r�r.r1s   @@r�test_release_unused_processesz6TestPoolNotLeakOnFailure.test_release_unused_processes$s��������	K�	K�0�
#�
#�G�-G�
H��$�$�)�)�!�X�]�]�5L�5L�*�6M�6,�)�-�A�
�G�G�I�
�F�F�H�	I�
	
����C�2B�C�C�	E�I�
H�s�A B4�4B=N)rvrwrxr;r[rrr)r)"s��$Err)c��eZdZdZej
jZd�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*y#)'�TestSyncManagerTypesa}Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

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

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

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c�p�|j�|_|jj�d|_yr)�
manager_classr�r�r�r�s rrzTestSyncManagerTypes.setUpds)���)�)�+�����������	rc��|j�N|jj�r4|jj�|jj�|jj�d|_d|_yr)r�r�r
r�r�r�r�s rrzTestSyncManagerTypes.tearDownisW���9�9� �T�Y�Y�%7�%7�%9��I�I���!��I�I�N�N�������������	rc�,�tj�yr)r�
reap_childrenr/s rr�zTestSyncManagerTypes.setUpClassqs�����rc��t|j�t}tj�}tj|d��D]$}ttj��dks�$ytj�|z
}dt
_
tjdtj��d|d�d��y)	NF��errorr�T�"multiprocessing.Manager still has � active children after �.1f� seconds)r'r��WAIT_ACTIVE_CHILDREN_TIMEOUTr�r�rr�r�rr�environment_altered�
print_warning)rqr6�
start_timerxr�s     r�wait_proc_exitz#TestSyncManagerTypes.wait_proc_exitws���	�T�Y�Y��.���^�^�%�
��'�'��u�=�A��?�2�2�4�5��:��>����!�J�.�B�*.�G�'��!�!�$F�%4�%D�%D�%F�$G�H;�;=�c�(�(�#L�
Mrc��tj||f��|_d|j_|jj	�|j�|j
|jjd�y)Nr�Tr)rr�r�r�r�rNrlr�)rq�workerr!s   r�
run_workerzTestSyncManagerTypes.run_worker�sX��#�+�+�6���H��	���	�	���	�	��������������+�+�Q�/rc��|j�sJ�|j�|j�|jd�y�Nru)r�rr��r�r!s  rr�z TestSyncManagerTypes._test_event�s-���z�z�|��|����
��	�	������rc���|jj�}|j�|j|j|�|j�rJ�|j
d�yrS)r�rr�rQr�r�r�rqr]s  rr�zTestSyncManagerTypes.test_event�sJ���L�L��� ��	��������(�(�!�,��8�8�:��~�	���u�
rc�$�|j�yr�r]rTs  r�
_test_lockzTestSyncManagerTypes._test_lock�������
rc���t|j|��}|j|j|�|j	�|jt|j�yr)r�r�rQrYrlrmr8�rq�lnamer]s   rruzTestSyncManagerTypes.test_lock�sF��(�G�D�L�L�%�(�*���������+�	�	�	�����,��	�	�2rc�D�|j�|j�yr�r]rlrTs  r�_test_rlockz TestSyncManagerTypes._test_rlock�������
����
rc�r�t|j|��}|j|j|�yr)r�r�rQr`r\s   rr�zTestSyncManagerTypes.test_rlock�s+��(�G�D�L�L�%�(�*������(�(�!�,rc�$�|j�yrrXrTs  rr�z$TestSyncManagerTypes._test_semaphore�rZrc��t|j|��}|j|j|�|j	�yr)r�r�rQr�rl)rq�snamer]s   rr�z#TestSyncManagerTypes.test_semaphore�s4��(�G�D�L�L�%�(�*������,�,�a�0�	�	�	�rc�(�|jd��y)Nr�)re)r�r�s rr�z+TestSyncManagerTypes.test_bounded_semaphore�s�����"4��5rc�D�|j�|j�yrr_rTs  r�_test_conditionz$TestSyncManagerTypes._test_condition�rarc�p�|jj�}|j|j|�yr)r�r�rQrhrVs  r�test_conditionz#TestSyncManagerTypes.test_condition�s(���L�L�"�"�$������,�,�a�0rc�F�|jdk(sJ�|j�yr�)rr8rTs  r�
_test_barrierz"TestSyncManagerTypes._test_barrier�s���{�{�a�����	�	�rc�r�|jjd�}|j|j|�yr�)r�rrQrlrVs  rr#z!TestSyncManagerTypes.test_barrier�s*���L�L� � ��#������*�*�A�.rc�4�|5	ddd�y#1swYyxYwrr[rTs  r�
_test_poolzTestSyncManagerTypes._test_pool�s�����S�S�s��c�t�|jjd��}|j|j|�y)Nrbr�)r�r�rQrorVs  r�	test_poolzTestSyncManagerTypes.test_pool�s+���L�L�����*���������+rc��|j�dk(sJ�|j�sJ�|j�rJ�|j�dk(sJ�|j�rJ�|j�dk(sJ�|j�sJ�y�Nrr�r)r�r�r�r�rTs  r�_test_queuez TestSyncManagerTypes._test_queue�sr���y�y�{�a�����x�x�z��z��9�9�;����w�w�y�A�~��~��9�9�;����w�w�y�A�~��~��y�y�{��{rc��t|j|�d�}|jd�|jd�|j|j|�|j�sJ�|j
�rJ�yrs)r�r�r�rQrtr�r�)rq�qnamer]s   r�
test_queuezTestSyncManagerTypes.test_queue�sa��(�G�D�L�L�%�(��+��	���a��	���a������(�(�!�,��w�w�y��y��6�6�8��|�8rc�&�|jd�y)Nr$)rwr�s r�test_joinable_queuez(TestSyncManagerTypes.test_joinable_queue�s������(rc��tj�}|j|dd�|j|jd�d�|j|j	d�d�|j�|j
�|D]}�|jt|�d�|j|jd�d�y)Nrr�r�)	rG�TestCaserlr)r�r��reverser�r�)r�r!�caserZs    r�
_test_listzTestSyncManagerTypes._test_list�s���� � �"������Q���#�������1��q�)�������1��q�)����
����
��A�������S��1�%���������Q�'rc���|jj�}|jd�|j|j|�|j|�|j
t|�d�y)Nr�r)r�r�r[rQr~r�rlr�rVs  rr�zTestSyncManagerTypes.test_list�sS���L�L�����	������������+����Q������Q���#rc�N�tj�}|jt|�d�|j|dd�|j|j	d�d�|jt
|j��dg�|jt
|j��dg�|jt
|j��dg�|j|j�ddi�|j|j�d�y)Nr�rSr�)rSr�)rGr{rlr�r��assertListEqualr�r�r�rc�assertDictEqualr�assertTupleEqual�popitem�r�r!r}s   r�
_test_dictzTestSyncManagerTypes._test_dicts���� � �"������S��1�%�����U��Q�'����������+����T�#�)�)�+�.���=����T�#�(�(�*�-��w�7����T�#�*�*�,�/�!��5����S�X�X�Z�%���4����c�k�k�m�Z�8rc���|jj�}d|d<|j|j|�|j	|�|jt
|�d�y)Nr�rSr)r�r�rQr�r�rlr�rVs  rr�zTestSyncManagerTypes.test_dictsQ���L�L�������%���������+����Q������Q���#rc���tj�}|j|jd�|j|j	�d�|jd�y)Nr�r)rGr{rlr�r�r�r�s   r�_test_valuez TestSyncManagerTypes._test_valuesE��� � �"��������A�&��������A�&�����
rc���|jjdd�}|j|j|�|j	|j
d�|j	|j
�d�y)NrXr�r)r�rrQr�rlr�r�rVs  rrjzTestSyncManagerTypes.test_valuesV���L�L���s�A�&������(�(�!�,�������!�$��������!�$rc���tj�}|j|dd�|j|dd�|jt|�d�|j	t|�ddg�y)Nrr�r)rGr{rlr�r�r�r�s   r�_test_arrayz TestSyncManagerTypes._test_array"sd��� � �"������Q���#�����Q���#�����S��1�%����T�#�Y��A��/rc�x�|jjdddg�}|j|j|�y)NrXrr�)r�r�rQr�rVs  rr�zTestSyncManagerTypes.test_array*s0���L�L���s�Q��F�+������(�(�!�,rc��tj�}|j|jd�|j|jd�yr�)rGr{rlrZr[r�s   r�_test_namespacez$TestSyncManagerTypes._test_namespace.s8��� � �"���������"��������"rc��|jj�}d|_d|_|j	|j
|�yr�)r�r�rZr[rQr�rVs  rr�z#TestSyncManagerTypes.test_namespace4s6���L�L�"�"�$������������,�,�a�0rNr�)r�)r)+rvrwrxryrr'rr?rrr�r�r�rNrQr�r�rYrur`r�r�r�r�rhrjrlr#rorqrtrwryr~r�r�r�r�rjr�r�r�r�r[rrr=r=Ks����*$�,�,�8�8�M��
�� �� ��M�M�$0����������3�����-������
6�����1�����/�����
,������)��
(��
(�$��	9��	9�$�����%��0��0�-��#��#�
1rr=c�(�eZdZed�d��Zy)�TestNamedResourcezspawn specific test.c�h�tj}|jtj|�t	|dd��5}|jt
jd��ddd�tj|�\}}}|j||jd���y#1swY�ExYw)Nr�r�r�aW                import multiprocessing as mp
                ctx = mp.get_context('spawn')
                global_resource = ctx.Semaphore()
                def submain(): pass
                if __name__ == '__main__':
                    p = ctx.Process(target=submain)
                    p.start()
                    p.join()
            �r�)rr�rdr�r�r+�textwrap�dedentrr�r�rf)rqr�r�rhr�rrs      r� test_global_named_resource_spawnz2TestNamedResource.test_global_named_resource_spawn<s����!�!�����	�(�(�&�1�
�&�#��
0�A�
�G�G�H�O�O�	%�	�	
�1�%�5�5�f�=���C��	
����#�*�*�W�"5��6�1�
0�s�%B(�(B1N)rvrwrxr\r�r[rrr�r�;s�� �!7�8�7�9�7rr�c�V�eZdZdZdhZddhZd�Zd�Zed��Z	d�Z
ed	��Zd
�Zy)�_TestSpawnedSysPathz>Test that sys.path is setup in forkserver and spawn processes.r�r�rOc���ttj�|_t	j
d��|_d|_tjj|j|j�d��}t|dd��5}|jd�ddd�tjD�cgc]}|s�|��	c}tjddtjjd	|j�tjjd	d
�|j|j|j�t!j"|j�|_y#1swY��xYwcc}w)Nztest_sys_path-)r��unique_test_modr)r�r�r�z# A simple test module
rr�)r�r{r��_orig_sys_path�tempfile�mkdtemp�	_temp_dir�	_mod_namerCr�r�r+�insertrnrTr�rrO�_ctx)rq�module_pathr�r�s    rrz_TestSpawnedSysPath.setUp\s���"�3�8�8�n���!�)�)�1A�B���*����g�g�l�l�4�>�>�d�n�n�5E�S�3I�J��
�+�s�W�
5���I�I�0�1�6�"%�(�(�0�(�Q�a�q�(�0������������4�>�>�*�������2���
�
�d�'�'��);�);�<�#�/�/��0A�0A�B��	�
6�
5��0s�E'�2E3�:E3�'E0c��|jtjddtj|j
d��y)NT)�
ignore_errors)r�r{r��shutil�rmtreer�r�s rrz_TestSpawnedSysPath.tearDownis'���)�)�������
�
�d�n�n�D�9rc�T�|jttj��yr)r�r�r{r�r"s r�enq_imported_module_namesz-_TestSpawnedSysPath.enq_imported_module_namesms��
�	�	�%����$�%rc��|jj�dk7r|jd�|j|jt
j�tjjj�|jjd|jg�|jj�}|jj|j|f��}|j�|j!�|j#�}|j%�|j'|j|�y)Nr�zforkserver specific test.r;r�)r�rQr�rr�r{r�rr�r�rr�rr�r�r�r�r�r rn)rqr�r��child_imported_moduless    r�(test_forkserver_preload_imports_sys_pathz<_TestSpawnedSysPath.test_forkserver_preload_imports_sys_pathqs����9�9�%�%�'�<�7��M�M�5�6����������5��"�"�.�.�4�4�6��	�	�(�(�
3�T�^�^�D�	F��I�I�O�O����y�y� � ��5�5�Q�D�!�B���
�
���	�	��!"�����	���	��
�
�d�n�n�&<�=rc���|jtj�	tj|�|jd�y#t
$r}|j|�Yd}~yd}~wwxYwr)r�r{r��	importlib�
import_module�ImportError)r#�mod_namerNs   r�enq_sys_path_and_importz+_TestSpawnedSysPath.enq_sys_path_and_import�sQ��
�	�	�#�(�(��	��#�#�H�-�
�I�I�d�O���	��I�I�c�N�N��	�s�A�	A,�A'�'A,c�&�|jj�}|jj|j||jf��}|j�|j
�|j�}|j�}|j�|jd|�|j|j|�|j|ddtjdd�|j|d|j����y)Nr�r�r�zchild could not import r�)r�rr�r�r�r�r�r�r rrnr�rlr{r�r�)rqr�r��child_sys_path�import_errors     r�test_child_sys_pathz'_TestSpawnedSysPath.test_child_sys_path�s����I�I�O�O����y�y� � ��3�3�1�d�n�n�:M�!�O���
�
���	�	��������u�u�w��	���	�����^�,��
�
�d�n�n�n�5�������+�S�X�X�a�b�\�:����,�.E�d�n�n�EU�,V��WrN)
rvrwrxryr�r�rrrMr�r�r�r�r[rrr�r�UsT��H� �M�M�!�7�+�M�C�:��&��&�>� ����
Xrr�c�.�eZdZd�Zed�d��Zy)�MiscTestCasec�^�tj|ttjddg��y)N�SUBDEBUGr�)�extra�not_exported)r�check__all__rr�r�s r�test__all__zMiscTestCase.test__all__�s%�����T�?�/�:Q�:Q�+5�|�*D�	Frr�c��tjdd�\}}}|j|d�|j||j	d���y)Nr�z�if 1:
            import sys
            sys.executable = None
            assert "multiprocessing" not in sys.modules, "already imported!"
            import multiprocessing
            import multiprocessing.spawn  # This should not fail
rr�r�)rr�rlr�rf)rqrhr�rrs    r�,test_spawn_sys_executable_none_allows_importz9MiscTestCase.test_spawn_sys_executable_none_allows_import�sQ��%�5�5��
F�
���C��	
����Q������#�*�*�W�"5��6rN)rvrwrxr�r\r�r[rrr�r��s"��F�
!�!<�=�7�>�7rr�c�,�eZdZed��Zed��Zy)�	BaseMixinc��tjjj�tjj�f|_yr)rr&�	_danglingrr"�danglingr/s rr�zBaseMixin.setUpClass�s5��'�/�/�9�9�>�>�@�!�+�+�0�0�2�4��rc���tjj�ttj
j�t|jd�z
}|r-dtj_tjd|���d}ttj�t|jd�z
}|r-dtj_tjd|���d}y)NrT�Dangling processes: r��Dangling threads: )r=rrir�rr&r�r�rKrLr")r�r�r�s   rr�zBaseMixin.tearDownClass�s���	
�����!���/�/�9�9�:�S����a��=Q�Q�	��/3�D�L�L�,��!�!�$8���"D�E��	��i�)�)�*�S����a��-A�A���/3�D�L�L�,��!�!�$6�w�i�"@�A��rN)rvrwrxr�r�r�r[rrr�r��s(���4��4����rr�c���eZdZdZej
ZejZeej�Zeej�Z	eej�Z
eej�Zeej�Zeej�Z
eej�Zeej�Zeej �Zeej"�Zeej$�Zeej&�Zeej(�Zeej*�Zeej,�Zeej.�Zeej0�Zeej2�Zeej4�Zy)r�r�N)rvrwrxr�rr�rDrMr�r�rr�r�r�rr$rkr|r�r�r�rrrr�rgr�r[rrr�r��sN���D��%�%�G� �+�+�J�"�?�#B�#B�C�O�!�/�"@�"@�A�N�"�?�#B�#B�C�O�!�/�"@�"@�A�N���,�,�-�D���,�,�-�D���.�.�/�E� ��!>�!>�?�M���,�,�-�D���.�.�/�E��_�6�6�7�I�#�O�$D�$D�E���_�6�6�7�I���.�.�/�E��?�2�2�3�G���.�.�/�E���.�.�/�E��O�4�4�5�H��O�4�4�5�Hrr�c���eZdZdZej
Zeejd��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�rRr�s   rr�zManagerMixin.Pool�s���s�{�{����.��.�.rc�T��t�|��tj�|_yr)r�r�rrmr�r�s �rr�zManagerMixin.setUpClasss���
����%�-�-�/��rc���t}tj�}tj|d��D]$}tt
j��dks�$nRtj�|z
}dt_tjdt
j��d|d�d��tj�|jj�d	k7rWdtj_tjd
�tj|jj��|jj!�|jj#�d|_t$�|�M�y)NFrDr�TrFrGrHrIrz5Shared objects which still exist at manager shutdown:)rJr�r�rr�r�rrrKrLrmrnr��_number_of_objectsr=�_debug_infor�r�r�r�)r�r6rMrxr�r�s     �rr�zManagerMixin.tearDownClasss%���
/���^�^�%�
��'�'��u�=�A��?�2�2�4�5��:��>����!�J�.�B�*.�G�'��!�!�$F�%4�%D�%D�%F�$G�H;�;=�c�(�(�#L�
M�	�
�
���;�;�)�)�+�q�0�04�D�L�L�,��!�!�#9�
:��!�!�#�+�+�"9�"9�";�<����������������
���r)rvrwrxr�rr�r4�operator�
attrgetterrr$rkr|r�r�r�rrrr�r�r�r�r�r�r�r�rkrls@rr�r��s�����D��%�%�G��(�X�(�(��9�:�E��0�X�0�0�1H�I�J�M��'�H�'�'��7�8�D��(�X�(�(��9�:�E��,��,�,�-@�A�B�I�� 3�� 3� 3�4N� O�P���,��,�,�-@�A�B�I��(�X�(�(��9�:�E��*�x�*�*�+<�=�>�G��(�X�(�(��9�:�E��(�X�(�(��9�:�E��'�H�'�'��7�8�D��'�H�'�'��7�8�D��,��,�,�-@�A�B�I��/��/��0��0�� �� rr�c��eZdZdZej
jZej
jZeej
j�Z	eej
j�Z
eej
j�Zeej
j�Zeej
j�Z
eej
j�Zeej
j�Zeej
j �Zeej
j"�Zeej
j$�Zeej
j&�Zeej
j(�Zeej
j*�Zeej
j,�Zeej
j.�Zy)�ThreadsMixinr�N)rvrwrxr�r�dummyr�rDrMr�rr�r�rr$rkr|r�r�r�rrrr�r[rrr�r�&st���D��#�#�+�+�G� �&�&�1�1�J�"�?�#8�#8�#H�#H�I�O�"�?�#8�#8�#H�#H�I�O���-�-�2�2�3�D���-�-�2�2�3�D���.�.�4�4�5�E� ��!6�!6�!D�!D�E�M���-�-�2�2�3�D���.�.�4�4�5�E��_�2�2�<�<�=�I�#�O�$9�$9�$J�$J�K���_�2�2�<�<�=�I���.�.�4�4�5�E��?�0�0�8�8�9�G���.�.�4�4�5�E���.�.�4�4�5�Err�c	�b����|d}t�}hd�}|j�D�]g\}}t|t�s�t	|t
�r�|t
ur�1t
|j�|ksJ|j��|jr�|jvr�u|jD]�}	|r|	|k7r�|r�d|	j�z|ddz}
||	j�dz}Gd�d||tj�}|	dk(rtjd	�|�}|
x|_|_||_�|_|||
<����t	|tj�s��:|r��>Gd
�d|t$�}|x|_|_||_|||<��jddg�dg����fd�}
��fd�}|
|d
<||d<y)Nrv>r�r�r��Withr��Mixinc��eZdZy��*install_tests_in_module_dict.<locals>.TempNr�r[rr�Tempr�Ts��rr�r�r�c��eZdZyr�r�r[rrr�z*install_tests_in_module_dict.<locals>.Temp`s��rc����tjt�tjj	�tjj
j
��d<tj
j
��d<tjd���d<	tj�d��tjjd�r	tj �}t%�t'j(�tj*�j-t.�y#t$rtj�dz��wxYw#t"$rtjd��wxYw)	Nrr�Trdrfz start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r&�_cleanupr�rr"rQrkrFrGrHr{r|rr|rVrKr�get_temp_dirr�r�r�)r_r��old_start_methodrTs ���r�setUpModulez1install_tests_in_module_dict.<locals>.setUpModuleis2����.�.�w�7����(�(�*�%�-�-�7�7�<�<�>�����)�)�.�.�0����-�>�>�$�O����	C��,�,�\��F�
�<�<�"�"�7�+�
;�&�,�,�.��	 �!������"�"�$�-�-�i�8���	C��#�#�L�$A�%B�C�
C�	C���
;��'�'�):�;�;�
;�s�D0�E�0"E�E4c�d��d}tjj�tj�dd��ttjj�t�d�z
}|r/d}dtj_tjd|���d}ttj�t�d�z
}|r/d}dtj_tjd|���d}|rtjd�tjj�y)	NFrTrfr�r�r�r�)r=rrirrkr�r&r�rKrLr"r�rr�_cleanup_tests)�
need_sleepr�r�r�r�s   ��r�tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModules�����
�	
�����!��(�(�)9�!�)<�D�I���/�/�9�9�:�S��!��=M�M�	���J�/3�D�L�L�,��!�!�$8���"D�E��	��i�)�)�*�S��!��-=�=����J�/3�D�L�L�,��!�!�$6�w�i�"@�A�����J�J�s�O����+�+�-rr�r�)�globalsr�rrr�r�r�r�r��
capitalizerGr{r�requires_hashdigestrvrxrwrTr<)�remote_globsrT�	only_type�
exclude_typesrw�local_globs�	ALL_TYPESr,�base�type_�newnamer�r�r�r�r�r�s `             @@r�install_tests_in_module_dictr�>s�����j�)�J��)�K�3�I�!�'�'�)�
��d��$��%���d�L�)��|�#���t�)�)�*�i�7�K��9K�9K�K�7��!�!�l�$�:L�:L�&L���+�+����)�!3�� �� �5�#3�#3�#5�5��Q�R��@��#�E�$4�$4�$6��$@�A���4���(9�(9���I�%�G�>�=�=�h�G��M�D�4;�;��
�� 1�",���$0��!�(,��W�%�,���h�/�/�
0���
�t�V�
�04�4�D�M�D�-�(�D�O�!%�L���A*�D�d�|�H��v��9�,.�:#.�L���%3�L�!�"r�SemLockzSemLock not availabler�z
Linux onlyc��eZdZd�Zy)�SemLockTestsc��Gd�dtj�}dtj���}|ddd|d�}tj	|�y)Nc��eZdZy)�3SemLockTests.test_semlock_subclass.<locals>.SemLockNr�r[rrr�r��rtrr�ztest_semlock_subclass-r�rr:F)rr�rCr��
sem_unlink)rqr�r,rs    r�test_semlock_subclassz"SemLockTests.test_semlock_subclass�sG��	�&�.�.�	�'��	�	��}�5���A�q�"�d�E�*���#�#�D�)rN)rvrwrxr�r[rrr�r��s��*rr�)r3NrD)�rG�
unittest.mockr#r
r�r�r�r�r{rCrmr�r�rXr<r�r|r�r�r�rar�r�r�rrkrJ�test.supportr=�test.support.script_helperrrrrrrr	r
r�r�*skip_if_broken_multiprocessing_synchronizer"rHr�multiprocessing.dummy�multiprocessing.heap�multiprocessing.managersr��multiprocessing.queuesrr
rr�HAVE_SEND_HANDLEr>r��multiprocessing.sharedctypesrrr�r�	HAS_SHMEMr!�HAVE_ASAN_FORK_BUGrHr�rr$r'r,r)r.r�r�rZr�rr
rrr�rJr��
HAVE_GETVALUEr|r�r7rDr0r��ctypesr<r=r>r?r<rKr\r{r^r~r�r�r�r�r�r�r�r�r�rr[r�r�r�r�r�r�r
rrTr�r�r�r�r�r�r�rFr�r�r�rprtrvr�r�r�r8r�r�r�r�r
r�rr�r�r�r�r�r�r�r�r�r�r@rWrbr�rxr�r�r�r�rkr�r�r�r�r�rrrr r#r%r'r)r6rBrermr�r�r�r�r�r�rzr�rr)r=r�r�r�r�r�r�r�r�r;r�r[rr�<module>r
	s7	��
�����	��
�	�	����
��
�
��
��
���
����!��'�&�"�&�&�)�(�/�=�.�.�/A�B��2��2�2�4��!������@� ��)��.�.�M��8����-��I���
����(�
�
�]�
^�^�

�	���*��7�7�g��0�5�
�O�O�	�	���
��#2� �H�h��#0� �H�h���(�(��"���,�6��?�?�
�

����	 ��#�
��B�J�J�}�%�E�
�=�
>��)�=�=�K��2L�X�.�.�L�@0�F�0�"�6��<
*� ��Q	8�<�Q	8�p �/�)�)� �,Q7�l�Q7�n�$�Q��Q�l
O��O�d3@�\�3@�ll�\�l�^	5W��5W�@&��&�.�
6�F�6�r���x1�<�x1�|C3��C3�LM3��M3�fY/�l�Y/�~��$�
�$�F�$�%�:�$��u!��u!�n��&�L�&�PB �l�B �PI�H��V���,�I�,�	��	�
���5�6��*�	���5�6�;��?�	���5�3�-��@�4>�\�4>�v
�������/�;�/����k�I��6�K�K�K�
���{�#��
�.��.�b$��#�#�H�-�22�,�22�.�22�p��9��G/�l�G/�R78�L�78�t.�,�.�`L��L�d����]�$J�K�#��#�#�H�-�@�|�@�.�L�@�Lb��b�P
�9�
�5)��5)�p����Y� H�I�#��#�#�H�-�JJ��JJ�.�J�JJ�`u�L�u�x%�h�'�'�%�VB�<�B�x6�\�6�DE��)�)�E�&$��#�#�H�-�5��!�!�5�.�5�<$��#�#�E�*�#��#�#�H�-�5�H�-�-�5�.�+�5�N�$��#�#�H�-�*�x�(�(�*�.�*�<
�������*'��!2�!2�'�*g�x� � �g�Z
B��)�)�
B� 8��!�!�8�H2�8�$�$�2�D'�X�&�&�'�"1�h�/�/�1�><:�8�$�$�<:�DA�h�'�'�A�F7�h�'�'�7�D��������(�=�?�tE�(�+�+�tE�?�tE�l9.�h�'�'�9.�x&E�x�0�0�&E�R$��#�#�H�-�l1�8�,�,�l1�.�l1�^7��)�)�7�4CX�,�CX�L7�8�$�$�7�:���26�Y�6�29 �9�9 �x6�9�6�2@E�_4�D����W�-�y�9�9�;R�S���������(�,�7�*�8�$�$�*�8�T�*��IK���M������������I���
��
�F���P��E���)��I�$(�(�E�(�H�z�)�sf�/_"�
_0�
_>�`�&`�=`$�"_-�,_-�0_;�:_;�>`	�`	�`�`�`!�$
`5�4`5