Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/_test_multiprocessing.cpython-312.pyc

�

'Μg�?��B�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!dd	lm"Z"ejFd
�Z$ejJ�ddl&Z&ddl'Z(ddl)Z(ddl*Z(ddl+Z(ddl,Z(ddl-Z(ddl'm.Z.m/Z/ddl(m0Z0	dd
l(m1Z1e1jdZ3	ddl5m6Z6m7Z7dZ8	ddl(m9Z9dZ:	ddl;Z;ejxrejzd��dZ>d�Z?d�Z@d�ZAe	j�dk(r	ddl(mCZCd�ZDe0j�ZFdZGdZHeHrd\ZIZJZKnd\ZIZJZKej�ZMdZNeOe$dd�ZPej�dk(ZRd�ZS	e	j�d �ZUd"d#gZV	dd$lWmXZXmYZYmZZZm[Z[d%�Z]d&�Z^Gd'�d(ej��Z`Gd)�d*e\�ZaGd+�d,e\�Zbd-�ZcGd.�d/�ZdGd0�d1eb�ZeGd2�d3e(j��ZgGd4�d5eb�Zhd6�Zid7�ZjGd8�d9eb�ZkGd:�d;eb�ZlGd<�d=eb�ZmGd>�d?eb�ZnGd@�dAeb�ZoGdB�dCe\�ZpdD�ZqGdE�dFe\�ZrGdG�dHe\�ZsGdI�dJeb�ZtGdK�dLeb�ZuGdM�dNeb�ZvGdO�dPeb�Zwd�dQ�ZxdR�ZydS�ZzdT�Z{GdU�dVe\�Z|GdW�dXe}�Z~dY�ZGdZ�d[eb�Z�d\�Z�d]�Z�Gd^�d_eb�Z�Gd`�daeb�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�dreb�Z�e�j�Z�ds�Z�Gdt�due��Z�e��jdve��k�Gdw�dxe��Z�e��jdv�dyZ�Gdz�d{eb�Z�e�j*d|�Gd}�d~eb��Z�e?d�Z�Gd��d�eb�Z�Gd��d�eb�Z�Gd��d�eb�Z�Gd��d�eb�Z�e�j8e3d��e�j*d|�Gd��d�eb���Z�Gd��d�eb�Z�Gd��d�eX�Z�Gd��d�eb�Z�e�j8e:d��e�j*d|�Gd��d�eb���Z�Gd��d�eb�Z�Gd��d�ej��Z�Gd��d�eb�Z�Gd��d�eb�Z�Gd��d�ej��Z�e�j*d|�Gd��d�ej���Z�e�j*d��e�j*d|�Gd��d�ej����Z�d��Z�e�j*d|�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�jtej�dk(d��Gd��d�ej���Z�GdÄd�ej��Z�Gdńd�ej��Z�e�j*d|�GdDŽd�ej���Z�GdɄd�ej��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�jte�e$d֫d׫e�jtej�d�k7d٫Gdڄd�ej����Z�y#e4$rdZ3Y���wxYw#e4$rdZ8Y���wxYw#e4$rdZ:Y���wxYw#e4$rdZ;Y���wxYw#d!ZUY��^xYw#e4$re\ZXdxZYxZZZ[Y��`wxYw)��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 �7/usr/local/lib/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#_s2���%��/�/�5�5�6�
���
�
����7rc�.�tj|�yr)r	r!)�processs r�join_processr&es��� � ��)r�posix)�resource_trackerc�4�tj||�yr)r(�_CLEANUP_FUNCS)�name�rtypes  r�_resource_unlinkr-ns���'�'��.�t�4r)g=
ףp=�?gffffff�?gffffff�?)rrr�@�HAVE_BROKEN_SEM_GETVALUE�win32c�.�|�|dkrd}t|g|�S)N��r)�handle�timeouts  r�wait_for_handler6�s"����w��}������'�"�"r�SC_OPEN_MAX��__main__z$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.r8�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_semaphoresrI�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_methodrErF)�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)rTrUrSs` �r�	decoratorz.only_run_in_spawn_testsuite.<locals>.decorator�s&���	����	#�	.�
$�	.�
#�"r�)rSrXs` r�only_run_in_spawn_testsuiterZ�s���#��rc�\�eZdZdZej
ejdk(d�d��Zy)�TestInternalDecoratorszBLogic within a test suite that could errantly skip tests? Test it!r0ztest 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)NrMz'only run in test_multiprocessing_spawn.ztesting this decoratorc��y�N�rYrYrr�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��forcer`�forkrN)
rrOrErFrZ�	Exception�fail�set_start_method�assertEqual�assertRaises�assertIn�str�	exception)�selfra�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__rE�skipIf�sys�platformrsrYrrr\r\�s1��L��X�_�_�S�\�\�W�,�.O�P�L�Q�Lrr\c��eZdZd�Zd�Zy)�
TimingWrapperc� �||_d|_yr)�func�elapsed)ror~s  r�__init__zTimingWrapper.__init__�s����	���rc���tj�}	|j|i|��tj�|z
|_S#tj�|z
|_wxYwr)�time�	monotonicr~r)rorP�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�rtrurvr�r�rYrrr|r|�s���0rr|c�&�eZdZdZd�Zd�Zd�ZeZy)�BaseTestCase)�	processes�manager�threadsc�8�tr|j||d�yy�N�)�
CHECK_TIMINGS�assertAlmostEqual�ro�a�bs   r�assertTimingAlmostEqualz$BaseTestCase.assertTimingAlmostEquals����"�"�1�a��+�rc�P�	||�}|j||�S#t$rYywxYwr)rj�NotImplementedError)ro�valuer~rP�ress     r�assertReturnsIfImplementedz'BaseTestCase.assertReturnsIfImplementeds9��	0���+�C��#�#�E�3�/�/��#�	��	�s��	%�%c��td��)Nz#shouldn't try to pickle a test case)r�)rorPs  r�
__reduce__zBaseTestCase.__reduce__s��!�"G�H�HrN)rtrurv�
ALLOWED_TYPESr�r�r��
__reduce_ex__rYrrr�r��s��7�M�,�0�I��Mrr�c��	|j�S#t$rA	|jcYS#t$r%	|jcYcYS#t$rt�wxYwwxYwwxYwr)�	get_valuerC�_Semaphore__value�_valuer��ros 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)ro�q�cs   rr�zDummyCallable.__call__*s���!�]�+�+�+�	���a�rN)rtrurvr�rYrrr�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�lenrj�identrA�getpid�exitcode)ro�currentr�s   r�test_currentz_TestProcess.test_current3s����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�ry�
executablerA�fsencoder�FakePath�set_executable�Process�start�joinrjr�)ro�paths�path�ps    r�test_set_executablez _TestProcess.test_set_executableAs����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�rm�r�)rP�	args_type��targetrPT)�list�tuple�	itertools�product�subTestrr��
_test_argsr�r��getrjr�r#)	ro�
args_cases�
args_types�
test_casesrPr�r�r��
child_argss	         r�test_args_argumentz_TestProcess.test_args_argumentQs�������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_argsfs
��	���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��_testrjr�r�r��assertFalse)ro�proc0�proc1�proc2s    r�test_daemon_argumentz!_TestProcess.test_daemon_argumentjs����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�rPr�r�s     rr�z_TestProcess._testvsl���%�%�'��	���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��recvrjr�r�rAr�r+)ro�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��r5z(Could not communicate with child process�alive�	not alive)r�r�r�r�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�rj�	terminater�)ror�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   rrz,_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)Nrr�rrr)r�r�r�r�r�r�
SHORT_TIMEOUTr�s   rrz'_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�rPrQr+Tr�Fr)r�Eventr�r�r�r�r�rjr�r��assertNotIn�active_childrenr��typer�r�r�rlr�r+r�r�r#)ror��erPrQr+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)ro�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)rrrr�)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_sleep�s���
�
�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�Trr2r@r��alarmc� ��td�z��)Nzjoin took too long: %s��RuntimeError)rPr�s �r�handlerz+_TestProcess._kill_process.<locals>.handlers���"�#;�a�#?�@�@r�
F)r�r�r�r�r+r�r�rjr�rlrr�r|r�r�rr�r
�hasattr�signal�SIGALRMr0r)ro�methr�r4�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�rrjr7�SIGTERM�ror�s  r�test_terminatez_TestProcess.test_terminate3s4���%�%�o�&=�&=�&G�&G�H������F�N�N�?�3rc��|jtjj�}tj
dk7r"|j
|tj�y|j
|tj�y�N�nt)
r;rr��killrAr+rjr7�SIGKILLr=r>s  r�	test_killz_TestProcess.test_kill7sU���%�%�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)ro�cpuss  r�test_cpu_countz_TestProcess.test_cpu_count>sR��	�"�,�,�.�D�	
����T�
�c�)�*������	�"��#�	��D�	�s�A�A�Ac��|jt|j��t�|j	t
jtf��}|j||j��d|_	|j�|j||j��|j�|j||j��y�Nr�T)
rjrrr�r�r�r
�DELTArr�r�rlr��ror�s  r�test_active_childrenz!_TestProcess.test_active_childrenFs�������d�2�2�4�5�t�<��L�L��
�
�%��L�:������D�0�0�2�3����	���	��
�
�a��-�-�/�0�	��������D�0�0�2�3rc���|j|�t|�dkrTtd�D]E}|j|j|||gzf��}|j�|j
��Gyy�Nrr�)r�r��ranger��_test_recursionr�r�)r�r��id�ir�s     rrSz_TestProcess._test_recursionSsg��
�
�
�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�rSr�r
rMr�appendr�rj)ror�r��result�expecteds     r�test_recursionz_TestProcess.test_recursion^s����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$@r3�r��events  r�_test_sentinelz_TestProcess._test_sentinelrs��
�
�
�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�r2rr�)r�r�r�rr�r^rkrD�sentinelr��
addCleanupr�r�rHr�r6�setr�)ror]r�r`s    r�
test_sentinelz_TestProcess.test_sentinelvs����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�ry�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�rQTFr)r�r�r�rr�rgr�r�rjr�rkrDr r�r�r�r�weakref�ref�gc�collect�assertIsr#)ror�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�rMr�r()�{�G�z�?r�rr����MbP?rB�darwin)r�r�r�rrOrRr�r.r�r&rjr�r+r�r
rrAr+r7r=ryrzrWrDrl)ro�sm�NrU�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�rirjrr�r�r�rkrlrmrjr�r#)ror�rnr�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)ro�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�rfr�r�r�)r�r�r�rrOrrrRr�rr�r�rjr�rbr�r#)	rorurvr~r�rUrwr��	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�r
rb�r~s�r�func1z2_TestProcess._test_wait_for_threads.<locals>.func1s����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�)ror~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)ror~�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 �setattrryrb)ror~�break_std_streams�stream_name�action�streams      r�_test_error_on_stdio_flushz'_TestProcess._test_error_on_stdio_flushs`��#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 �getattrryr�rr�r�r�r�r�r�rjr�)ro�streamsr�r��
old_streamr~r�s       r�test_error_on_stdio_flush_1z(_TestProcess.test_error_on_stdio_flush_1&s����;�;�=�$�'����
����/�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�ryrr�r�r�r�r�r�rjr�r�)ror�r�r�r~r�s      r�test_error_on_stdio_flush_2z(_TestProcess.test_error_on_stdio_flush_29s���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�)ror~r-s   r�_sleep_and_set_eventz!_TestProcess._sleep_and_set_eventJs���
�
�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�rrO�multiprocessing.forkserverr��ensure_runningrr�r�r��_forkserver_pidrArCr�r
r�r�r�rjr�rl)
ro�signumrur�r-r~r�r��evt2r�s
          r�check_forkserver_deathz#_TestProcess.check_forkserver_deathOsU���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�r7�SIGINTr�s r�test_forkserver_sigintz#_TestProcess.test_forkserver_sigintus���#�#�F�M�M�2rc�j�tjdk7r |jtj�yyrA)rAr+r�r7rDr�s r�test_forkserver_sigkillz$_TestProcess.test_forkserver_sigkillys$��
�7�7�d�?��'�'����7�r)rN)r2)3rtrurvr�r�r�r�requires_resourcer��classmethodr�r�r�r�r�r
rrrrE�
skipUnlessr�_HAVE_THREAD_NATIVE_IDr$r r+r.r;r?rErJrOrSrZr^rcrgroryr{rr�r�r�r�r�r�r�r�r�r�rYrrr�r�/s��,�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�rors  r�runz_UpperCaser.run�sW������� ��d�o�o�*�*�D�1�A��O�O� � �����+�2������rc��t|�tusJ�|jj|�|jj	�Sr)rrmr�r�r�r�s  r�submitz_UpperCaser.submit�s;���A�w�#�~��~������a� ����$�$�&�&rc��|jjd�|jj�|jj�yr)r�r�r r�r�s r�stopz_UpperCaser.stop�s8�������d�#������ ������rN)rtrurvr�r�r�r�rYrrr�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�rjr�r�r�)ro�
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�TESTFNra�unlinkr��_test_stderr_flushr�r��open�readrl)ro�testfnr��frps     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)rAr��O_WRONLY�O_CREAT�O_EXCLryr�)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�)rAr�r�r�r�ryr�re)r�rSr�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)rYr�rP)r�r�r�rr�rar�r�r�r�r�r&rjr�r�r��rstriprmrAr�ryre)	ror�rSr�r��content�casesrPrYs	         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)
rtrurvr�r�r�r�r�r�r�rYrrr�r��s>��"�M��/�"��������
&7rr�c�`�t|d�r|j�S|j�dk(S)N�emptyr)r6r��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)r6r�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rRr�rb)r�r"�child_can_start�parent_can_continuerUs     r�	_test_putz_TestQueue._test_puts1�������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�r`r��rr)rrr�rr�r�rjr�r�r��
put_nowaitr�r
rMr|rk�pyqueue�Fullr�r�TIMEOUT1�TIMEOUT2�TIMEOUT3rbrr�r#)ro�MAXSIZEr"rrr�r�rs        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�r`r�)rr�rb�r�r"rrs    r�	_test_getz_TestQueue._test_getBsF������
�	�	�!��
�	�	�!��
�	�	�!��
�	�	�!�����!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�rr`r�r)rrr�rr�r�rjr�rbrr�r
rMr��
get_nowaitr|rkr�Emptyr�rr
rrr�r#)ror"rrr�r�rs       r�test_getz_TestQueue.test_getLs[���
�
����*�*�,��"�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)Nr5r�)rRr�)r�r"rUs   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)Nr5r�Tr�F)rrRr�r�r
rMr�rr�r�rjr�rkrrr�r#)ror"rUr�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)rrjr�r�r�r�r�r#�ror�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�r
rM�	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)Nr`r�Tr5)	�
JoinableQueuerRr�r r�r�r�r�r#)ror"rU�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_modulez.pyr�r�r�z�if 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r�temp_cwdr��writer�
DirsOnSysPathrA�getcwd�
__import__rrrh)ro�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�rkrrr��assertGreaterEqualr#)ror�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)rCr�s rr�zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__�s��$�$rN�rtrurvr�rYrr�NotSerializabler5�s��
%rr8Trr�r)r�r�r��object�testr�captured_stderrrr�r�r�rr#rjr�r�r�)ror8r�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)rBrCr�s rr�zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__s��)-��&�$�$rN)rtrurvrwr�r�rYrrr8r?s��,�
>�
%rr8c�&��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|_yyyrE)rrCrC)rrr8s  �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)rtrurvrw�staticmethodrI)r8s�r�	SafeQueuerG!s���C�
�
@��
@rrK)rrTr)r�r�r�r9rrrr:rr;�get_contextr�r�r�rrBrC)rorK�not_serializable_objr�r8s    @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_exceptions7s���
!�&�&�(�/�*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)NrQrP)rrr"r rRrDr�r�rs  r�$test_closed_queue_put_get_exceptionsz/_TestQueue.test_closed_queue_put_get_exceptionsHs~�� �&�&�(�/�*G�*G�*I�I�A�
�G�G�I��'�'�
�K�@����e��A��'�'�
�K�@�����A�@�	J�@�@��@�@�s�B�B*�B'	�*B3	N)rtrurvr�rrrrrrrr r$r-r2r<rNrTrVrYrrr�r��s����"��"�9�v�"��"�3�j�����8� ����
�,3�*	��@$O�L�"rr�c��eZdZd�Zd�Zd�Zy)�	_TestLockc�F�|j�}|j|j�d�|j|jd�d�|j|j�d�|j	t
tjf|j�y�NTF)�Lockrj�acquire�releaserkrDr�ThreadError�ro�locks  r�	test_lockz_TestLock.test_lockUsq���y�y�{����������.�������e�,�e�4���������.����:�y�'<�'<�=�t�|�|�Lrc���|j�}|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j	t
tf|j�yrE)�RLockrjr\r]rkrr3r_s  r�
test_rlockz_TestLock.test_rlock\s����z�z�|����������.���������.���������.���������.���������.���������.����>�<�8�$�,�,�Grc�P�|j�5	ddd�y#1swYyxYwr�r[r�s r�test_lock_contextz_TestLock.test_lock_contextfs��
�Y�Y�[���[�[�s��%N)rtrurvrardrgrYrrrXrXSs��M�H�rrXc�$�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�rjr\r]�ro�sems  r�_test_semaphorez_TestSemaphore._test_semaphorems����'�'��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�r`)�	Semaphorermrjr]r�r�rks  r�test_semaphorez_TestSemaphore.test_semaphorezsn���n�n�Q������S�!���������-��'�'��9�c�:���������-��'�'��9�c�:rc�H�|jd�}|j|�y�Nr)�BoundedSemaphorermrks  r�test_bounded_semaphorez%_TestSemaphore.test_bounded_semaphore�s ���#�#�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�rFr2Tr)r�r�r�ror|r\rjr�rr
rr)rorlr\s   rr2z_TestSemaphore.test_timeout�s���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)rtrurvrmrprtr2rYrrririks��;�;�"�@rric���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\r]r)r��cond�sleeping�wokenr5s     rr�z_TestCondition.f�s5�����������	�	�'��
�
�
�����rc���td�D])}	|�|k(rn	tjt��+tjt�|j||�y#t$rY�8wxYw�Nr5)rRr�r�r
rMr�)ror~r�rUs    r�assertReachesEventuallyz&_TestCondition.assertReachesEventually�sf���r��A�
��6�U�?��#�
�J�J�u��
�	
�
�
�5���'�'��t�4��	'�
��
�s�
A$�$	A1�0A1c�&�|jdk(rs	|jj�|jj�z
}|j	|d�|j	|j
j�d�yy#t$rYywxYw)Nr�r)r��_sleeping_countr��_woken_countrj�_wait_semaphorer�)rory�sleeperss   r�check_invariantz_TestCondition.check_invariant�s����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�|j
|j�tj|j|||f��}d|_|j�|j
|j�|j�|j�tjt�|jdt|�|j�|j!�|j#�tjt�|jdt|�|j�|j!�|j#�tjt�|jdt|�|j%|�|j�y)Nrr�Tr�r)�	Conditionror�r�r�r�rar�rr�r\r�r
rMr�r��notifyr]r�)roryrzr{r�s     r�test_notifyz_TestCondition.test_notify�sq���~�~����>�>�!�$�����q�!���L�L����d�H�e�-D�L�E�����	���	�����������D�F�F�$��%�1H�I�����	���	��������	��������	
�
�
�5���'�'��9�e�<�	
�������
�����	
�
�
�5���'�'��9�e�<�	
�������
�����	
�
�
�5���'�'��9�e�<�	
���T�"�	���rc�z��|j�}|jd�}|jd��td�D]�}|j|j||�t
f��}d|_|j�|j|j�tj|j||�t
f��}d|_|j�|j|j���td�D]}|j��td�D]}�j��|jdt��|j|�td�D]�}|j|j||�f��}d|_|j�|j|j�tj|j||�f��}d|_|j�|j|j���td�D]}|j��t!j"t$�|jdt��|j�|j'�|j)�|j+�fd�d�|j|�y)Nrr�r�Trc���t��Sr�r��r{s�r�<lambda>z0_TestCondition.test_notify_all.<locals>.<lambda>'�
���Y�u�-=r)r�rorRr�r�r
r�r�rar�rr�r\r�r�r�r�r
rM�
notify_allr]r~�roryrzrUr�r�r{s      @r�test_notify_allz_TestCondition.test_notify_all�s"����~�~����>�>�!�$�����q�!���q��A����D�F�F�#'��5�(�"C��E�A��A�H�
�G�G�I��O�O�A�F�F�#�� � ����'+�X�u�h�&G�I�A��A�H�
�G�G�I��O�O�A�F�F�#���q��A�������q��A��M�M�O���'�'��9�e�<�	
���T�"��q��A����D�F�F�$��%�1H��I�A��A�H�
�G�G�I��O�O�A�F�F�#�� � ����d�H�e�5L�M�A��A�H�
�G�G�I��O�O�A�F�F�#���q��A������	
�
�
�5���'�'��9�e�<�	
������������	
�$�$�%=�q�A�	
���T�"rc�J��|j�}|jd�}|jd��td�D]�}|j|j||�f��}d|_|j
�|j|j�tj|j||�f��}d|_|j
�|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)|�y)Nrr�r�Trr)�nc���t��Srr�r�s�rr�z._TestCondition.test_notify_n.<locals>.<lambda>Kr�rr`c���t��Srr�r�s�rr�z._TestCondition.test_notify_n.<locals>.<lambda>Rr�r)r�rorRr�r�r�r�rar�rr�r\r�r
rMr�r�r�r]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��O�O�A�F�F�#�� � ����d�H�e�5L�M�A��A�H�
�G�G�I��O�O�A�F�F�#���q��A������	
�
�
�5���'�'��9�e�<�	
�������a�������	
�$�$�%=�q�A�	
�������a��������$�$�%=�q�A�	
�������a��������'�'��9�e�<�	
���T�"rc�
�|j�}t|j�}|j�|t�}|j�|j
|d�|j|jt�yrA)	r�r|rr\r
r]rjr�r)roryrr�s    rr2z_TestCondition.test_timeout^s[���~�~����T�Y�Y�'�������8�n����������e�$��$�$�T�\�\�8�<rc����|5d�_|j�|j�fd��}|r�jdk7rtjd�ddd�y#1swYyxYw)Nrc�"���jdk(Sr_�r���states�rr�z0_TestCondition._test_waitfor_f.<locals>.<lambda>l�
���E�K�K��Nrr`r�)r�r��wait_forryre)r�ryr�rXs  ` r�_test_waitfor_fz_TestCondition._test_waitfor_fgsH���
��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)
NrUr@r�Tc�"���jdk(S�Nrr�r�s�rr�z-_TestCondition.test_waitfor.<locals>.<lambda>{r�rrr`rrr�)r�rr�r�r�r�r�r�rjr�rRr�r
r�r&r�)roryr�rXrUr�s     @r�test_waitforz_TestCondition.test_waitforps�����~�~����
�
�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(Sr_r�r�s�rr�z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>�r�rrT)r]r�r�r��	CLOCK_RESr�)r�ryr��successrlrY�dtrXs  `     r�_test_waitfor_timeout_fz&_TestCondition._test_waitfor_timeout_f�sd������
�
��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)
NrUrFr�Trr�rrr�)r�rror�r�r�r�r�r\rrrRr�r
r�r�r&)roryr�r�rlr�rUs       r�test_waitfor_timeoutz#_TestCondition.test_waitfor_timeout�s����~�~����
�
�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�r
rArCr7r�)r�r�r�s   r�_test_wait_resultz _TestCondition._test_wait_result�sB��
�
�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)Nr0rrr��<)r�ProcessesMixinryrzrAr�r�r�rr�r�r�r�rk�KeyboardInterruptr�)ror�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)rtrurvr�r�r~r�r�r�r�r2r�rEr��HAS_SHAREDCTYPESr�r�r�r�r�rYrrrwrw�s�������	5�	�+�Z<#�|0#�d=������X���)�+?�@�(�A�(�.�%��%��X���)�+?�@�'�A�'�.�(��(�rrwc�*�eZdZed��Zd�Zdd�Zy)�
_TestEventc�V�tjt�|j�yr)r�r
rrbr\s  r�_test_eventz_TestEvent._test_event�s���
�
�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)NFr2Tr�)rr|rrjr�r�rr
rbr�r�r�r�r�r�)ror]r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��assertRegex�reprrbr�)ror]s  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)rtrurvr�r�r�r�rYrrr�r��s ������!�FWrr�c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�
_DummyListc���tjjtjd��}tj
�}|j
||f�d|jd<y)NrUr)r�heap�
BufferWrapper�struct�calcsizer[�__setstate__�
_lengthbuf)ro�wrapperr`s   rr�z_DummyList.__init__
sO��!�&�&�4�4�V�_�_�S�5I�J���#�#�%�����7�D�/�*������rc�~�|\|_|_|jj�jd�|_y)NrU)�_wrapper�_lock�create_memoryview�castr�)ror�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�)ro�_s  rrWz_DummyList.appends'��
�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)rtrurvr�r�r�rWr�rYrrr�r�s���F�+�$�&rr�c�.�tjd�y)Nrrr)rYrr�_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�rPr��	DummyList�started�finishedr�	_can_exitrbrRr��taskr�r�rWrir��
_finalizer)
ro�	namespacer�rPr��wait_before_exitr�rUr�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�)
rAr�r�rWr�rPr�r�rr��ror�s  rr�z
Bunch.taskDs����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�r�r�r�s r�wait_for_startedzBunch.wait_for_startedNs3���$�,�,��$�&�&�(��G��$�,�,��$�&�&�(rc��t|j�|jkr.t�t|j�|jkr�-yyr)r�r�r�r�r�s r�wait_for_finishedzBunch.wait_for_finishedRs3���$�-�-� �4�6�6�)��G��$�-�-� �4�6�6�)rc�8�|jj�yr)r�rbr�s r�	do_finishzBunch.do_finishVs�������rc�$�|j�yr)r�r�s rr zBunch.closeYs�����rNr�)
rtrurvrwr�r�r�r�r�r rYrrr�r�$s&���D�8+����rr�c��eZdZd�Zd�Zy)�
AppendTruec��||_yr)r)rors  rr�zAppendTrue.__init__^s	����rc�:�|jjd�yrE)rrWr�s rr�zAppendTrue.__call__`s��������rNr�rYrrr�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)�Barrierrv�defaultTimeout�barrierr�s r�setUpz_TestBarrier.setUpks ���|�|�D�F�F�D�4G�4G�|�H��rc�F�|jj�d|_yr)r��abortr�s r�tearDownz_TestBarrier.tearDownns����������rc��|jdk(rgS|jdk(r|jj�St�S)Nr�r�)r�r�r�r�r�s rr�z_TestBarrier.DummyListrs:���9�9�	�!��I�
�Y�Y�)�
#��<�<�$�$�&�&��<�rc��t||||jdz
�}	||�|j�|j�y#|j�wxYwr�)r�rvr�r )ror�rPr�s    r�run_threadsz_TestBarrier.run_threadszsE���$��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�)	�partiesrvrRrWr�r�	n_waitingr��broken)r�r��resultsr��mrUs      r�	multipassz_TestBarrier.multipass�s����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�r�rr�)ro�passesrs   r�test_barrierz_TestBarrier.test_barrier�s;���>�>�#�T�^�^�%5�6��������$�,�,���)H�Irc�$�|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        r5)r	r�s r�test_barrier_10z_TestBarrier.test_barrier_10�s��� � ��$�$rc�F�|j�}|j|�yr)rr�)r�r�r"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)
rr�r
r�rRrvr�rj�countr#)ror"rUrs    r�test_wait_returnz_TestBarrier.test_wait_return�sv���
�
�������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�r3)r�r�rs   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�r�rvr�r�rrjr�)rorr�s   r�test_actionz_TestBarrier.test_action�sZ���.�.�"���,�,�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rvr3rWr�BrokenBarrierErrorr�)r�r��results1�results2rUs     r�
_test_abort_fz_TestBarrier._test_abort_f�sn��		�����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�r�rr�rjr�rvr�r)rorrs   r�
test_abortz_TestBarrier.test_abort�s����>�>�#���>�>�#������+�+��,�,��(�;�	=�����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�rsT)	rrvrr�r
�resetrWrr)r�r�rr�results3rUs      r�
_test_reset_fz_TestBarrier._test_reset_f�s����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�r�r r�rjr�rv)rorrrs    r�
test_resetz_TestBarrier.test_reset�s����>�>�#���>�>�#���>�>�#������+�+��,�,��(�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��wxYwr)rrvr3rWrrr�r)r�r��barrier2rrrrUs       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�r�rvr�r%r�rjr�)rorrrr$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)Nr��?r�T)rrvr�r
rrrW�r�r�rrUs    r�_test_timeout_fz_TestBarrier._test_timeout_fsY���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�r�r+r�rjr�r)rors  rr2z_TestBarrier.test_timeout&sM���.�.�"������-�-����g�/F�G�����W��t�|�|�';�';�<rc��|j|j�}||jdzk(rtjd�	|j�y#t
j$r|jd�YywxYw)Nrr)T)rr�rvr�r
rrrWr*s    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)r�rvr�r�r.rjr�r)ror�rs   r�test_default_timeoutz!_TestBarrier.test_default_timeout9sY���,�,�t�v�v�s�,�3���.�.�"������5�5���7I�J�����W��w���7rc�f�|jd�}|j�|j�yr�)r�r)ror�s  r�test_single_threadz_TestBarrier.test_single_threadBs!���L�L��O��	����	���rc��t|�D].}|j�|5|j|�ddd��0y#1swY�;xYwr)rRrr�)r�r�r�connr`rUs      r�_test_thousand_fz_TestBarrier._test_thousand_fGs4���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�r[r�rRrvr�r5r�r�rar�rjr�)rorr`r4r��jr�rUs        r�
test_thousandz_TestBarrier.test_thousandNs����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�)rtrurvrwrvr�r�r�r�r�r�rr	rr
rrrrrr r"r%r'r+r2r.r0r2r5r9rYrrr�r�ds���	
�A��N�I�� ���"��"� J�%����������
*��
��
�
-�����"0�����*
0��!��!�=��!��!�8��
����1rr�c	�f�eZdZdZddddded�ed�fgZd	�Zed
��Zdd�Z	d�Z
d
�Zy)�
_TestValuer�)rUi�i�^)�dg
@g�)�hi�����)r���r��x�yc�4�ts|jd�yy�Nz%requires multiprocessing.sharedctypes�r�r�r�s rr�z_TestValue.setUpn�����M�M�A�B� rc�T�t||j�D]\}}|d|_�yrr)�zip�codes_valuesr�)r��values�sv�cvs    rr�z_TestValue._testrs(���&�#�"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)rI�RawValuerrHrjr�r�r�r�r�r�)	ro�raw�coder�r�rJrKrLr�s	         r�
test_valuez_TestValue.test_valuexs���,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)rO)rQr�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)NrUr��r`F�get_lock�get_obj�navalue)
rrWrXr[rjr�r6rkrCrN)
ro�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�)rtrurvr�rrIr�r�r�rQrTrerYrrr;r;bsW��"�M�	����	�e�C�j�%��*�%�
�L�C�����
.�&"�3rr;c��eZdZdZed��Zejedud�d	d��Z	ejedud�d��Z
ejedud�d��Zejedud�d��Zy)
�
_TestArrayr�c�^�tdt|��D]}||xx||dz
z
cc<�yr�)rRr�)r��seqrUs   rr�z_TestArray.f�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?rUr�rr)r�rr�r`r`r�r�T)�RawArray�Arrayrjr�r��arrayr�r�r�r�r�)rorOri�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)Nr5r�rUr)rRrnrjr�r�)ro�sizer�rps    r�test_array_from_sizez_TestArray.test_array_from_size�s�����
�q��A��*�*�S�$�'�C����S��X�t�,����T�#�Y���d�
�3��2�Y�C��F����T�#�Y��U�2�Y��8��
rc�(�|jd��yrS)rqr�s r�
test_rawarrayz_TestArray.test_rawarray�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)NrUr5rVFrWrX�notalock)rnr�rRrWrXr[rjr�r6rkrCrm)
ro�arr1r[r\�arr2r^r_r`�arr3rarbrcrds
             r�test_getobj_getlock_objz"_TestArray.test_getobj_getlock_obj�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�)
rtrurvr�r�r�rErxr;rqrtrvr|rYrrrgrg�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�3rrgc�@�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)Nr5r�r)rr�r`)
rr�rr�r`rr�rr�r`r)rr�rr�r`rr�rr�r`r�r)
rr�rr�r`r�rrr��	rr)rr�rr�r`r�rrr�r�r)r�rRrj�extendrW)ror�r�r<r�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)Nr5r(r)r�rRr�rj�next)ror��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�7rr@)rr�r�r�r)r�rRrj�popr�rW)ro�_ir��innerrUr�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��.0rUs  r�	<genexpr>z,_TestContainers.test_dict.<locals>.<genexpr>A	s����'E�W���C��F��W�s�)
�dictr�rRr�rjr�sorted�keysrJr�)ror<�indicesrUs    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�rRr�r�rjr�rkr3r�)ror<r�rUr�s     r�test_dict_iterz_TestContainers.test_dict_iterF	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)Nrr`)�ferrets�hamstersr5r�)�water�feed)�pets�suppliesr�r�r��blanketsrr�r��rr�r��marmots�X�cr@r�)r�rjr�r�r�r�)ror�r�r<�l�outers      r�test_dict_proxy_nestedz&_TestContainers.test_dict_proxy_nestedS	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�rWrr�rjr�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��_hiddenrjrmr�r6)ror�s  r�test_namespacez_TestContainers.test_namespace�	s����N�N�����������	����!�&�&�!�%�%��*<�=�
�E�����Q��!8�9������6�*�+����G�A�u�-�-�.rN)rtrurvr�r�r�r�r�r�r�r�r�rYrrr~r~�s2�� �M�K�>(��(L�2�,3�\*�	/rr~c�f�|�tj|�||zS|j|�||zSr)r�r
r)rArr]s   r�sqrr��	s5���}��
�
�4��
�Q�3�J�	�
�
�4���Q�3�Jrc��||zSrrY)rArBs  r�mulr��	����Q�3�Jrc�H�tj|�tddz��)NrAi)r�r
rDr3s r�raise_large_valuerrorr��	s���J�J�t��
�S�7�]�
#�#rc��|SrrY�rAs r�identityr��	s���Hrc��eZdZdZd�Zd�Zy)�
CountedObjectrc�V�|xjdz
c_tj|�Sr�)�n_instancesr9�__new__r*s rr�zCountedObject.__new__�	s�����1����~�~�c�"�"rc�@�t|�xjdzc_yr�)rr�r�s r�__del__zCountedObject.__del__�	s���T�
���!�#�rN)rtrurvr�r�r�rYrrr�r��	s���K�#�$rr�c��eZdZy)�SayWhenErrorN�rtrurvrYrrr�r��	s�rr�c#�tK�|dk(rtd��t|�D]}||k(rtd��|���y�w)Nr@zSomebody said when)r�rR)�total�whenrUs   r�exception_throwing_generatorr��	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�|_yr_)�super�
setUpClass�Pool�pool�r��	__class__s �rr�z_TestPool.setUpClass�	s���
�����8�8�A�;��rc���|jj�|jj�d|_t�|��yr)r�rr�r��
tearDownClassr�s �rr�z_TestPool.tearDownClass�	s2������������
�
�����
���rc���|jj}|j|td�td��|j|tdddi�td���y)N)r�r�rYrAr�r�)r��applyrjr�)ro�papplys  r�
test_applyz_TestPool.test_apply�	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)Nr5r(r���	chunksize)r��maprjr�r�rR)ro�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)Nr5r�r@r(r�r�r�)r��starmapr�rHrRrjr�r�)ro�psmap�tupless   r�test_starmapz_TestPool.test_starmap�	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�r@)
r�rHrRrjr��
starmap_asyncr�r�r�r�)ror�s  r�test_starmap_asyncz_TestPool.test_starmap_async�	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�����yr})rjr��	map_asyncr�r�rRr�r�r�s r�test_map_asyncz_TestPool.test_map_async�	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�r�rHrWrrjr�r�rD)ro�	call_argss  r�test_map_async_callbacksz"_TestPool.test_map_async_callbacks�	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 pickler2r�s rr�z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__�	s
��"�?�3�3rNr7rYrr�Ar��	s��
4rr�r5)	r�r�r�r9rkr3r�r�r�)ror�s  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�r�r�r�r
r�TimeoutErrorrhr�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�r@r5r�c��eZdZd�Zd�Zd�Zy)�E_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec��|SrrYr�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�rYr�s rr�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__
s��rN)rtrurvrrr�rYrr�SpecialIterabler
s��
�
#�
rr)	r�r�r�rkr�r�r�r�r�)rors  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�rjr�r)ror�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�rrrr�rrrr|r�rkrr�r�rrbrr�)ror�r]r�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�Nr5r7r(r�)r��imapr�r�rRrjr�r�rk�
StopIterationr�ror�rUs   r�	test_imapz_TestPool.test_imap6
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�r@r5r�r�rrrr`)
r�r�r�r�rr�r�rkr�rrRrjr�rs   r�#test_imap_handle_iterable_exceptionz-_TestPool.test_imap_handle_iterable_exceptionD
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�rRrjr�r�)ror�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�r@r5r�r�rr)r�r�r�r�rr�r�rkr�rr�r�rRr�rlr�)ror��expected_valuesrUr�s     r�-test_imap_unordered_handle_iterable_exceptionz7_TestPool.test_imap_unordered_handle_iterable_exceptione
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�r@rr�)
r��RemoteErrorrDrkr�rjr��_poolr r�)ro�expected_errorr�s   r�test_make_poolz_TestPool.test_make_pool�
s���)-���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�r/)
rrr�r�rRr�r�r
rr�)ro�
sleep_timer�rUrPrXs      rr?z_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�rjr�r�r�rrr�r�r r�rNs  r�test_empty_iterablez_TestPool.test_empty_iterable�
s����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�r5r)r�r�rRr�r�r�rjr�r�rkrD)ro�LrUrYr��rs      r�test_contextz_TestPool.test_context�
s����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�r2r*s r�_test_tracebackz_TestPool._test_traceback�
s
���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 commentr@zexpected SayWhenError)r�r�r�r,rhrgr�rmrr3rjrP�	__cause__rr��RemoteTracebackrl�tbr:rr;ry�
excepthook�exc_info�getvaluer�r�r�r�)ror�r�exc�cause�f1s      r�test_tracebackz_TestPool.test_traceback�
s����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��)NrPr2r*s r�_test_wrapped_exceptionz!_TestPool._test_wrapped_exception�
s
���5�!�!rc��|jd�5}|jt�5|j|j�ddd�ddd�j�y#1swY�"xYw#1swY�&xYwr�)r�rkr3r�r9r�rNs  r�test_wrapped_exceptionz _TestPool.test_wrapped_exception�
sU��
�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�rkrDr�r�r�r
r r��
assertGreater)ro�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)Nr5c3�*K�|]}|����
y�wrrY)r�rns  rr�z3_TestPool.test_release_task_refs.<locals>.<genexpr>s����1�D�b�R�T�D�s�r)rRr�rirjr�r�r�rkrlr�r
rMrjrbr�)rorU�objs�o�refss     r�test_release_task_refsz _TestPool.test_release_task_refss���*/�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�rkrDr��ror�s  r�
test_enterz_TestPool.test_entersw���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�rGr�z%unclosed running multiprocessing pool)r�r�r�rr�rr��RUN�_stater
�check_warnings�ResourceWarningr�
gc_collectrHs  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)"rtrurvr�r�r�r�r�r�r�r�r�r�r�r	r
rrrrrr"r?r&r*r,r7r9r;r?rErIrP�
__classcell__�r�s@rr�r��	s��������� �� �=�
;�?�?�
:�8�)�L�5�4<��6�5�4H�".�H
��"
�?�� �� �$�L�"��"��<�(
7�� !rr�c��td��)N�key)�KeyErrorrYrr�raisingrV7s��
�5�/�rc��d�S)Nc��y)N�*rYrYrrr�z%unpickleable_result.<locals>.<lambda>;s��2rrYrYrr�unpickleable_resultrZ: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�rY�r4�
scratchpads �r�errbackz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errbackDs����J�q�Mr�r�r)rr�rrVrkrUr�r�r�r r�)ror�rar�r`s    @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�rYr_s �rraz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackWs��� #�
�1�
rrb)�multiprocessing.poolrerr�rRrrZrkr�r�r��assertIsNotNoner4r�r r�)rorer��	iterationrar��wrappedr`s       @r�test_unpickleable_resultz._TestPoolWorkerErrors.test_unpickleable_resultOs����;�� � ��#���r��I���J�
$��-�-� 3�G�-�L�C����0�#�'�'�:� ��m�G��O�O�G�$��!�!�*�Q�-�1C�D�� � ����-�� � ����/�#�	
���	�	���rN)rtrurvr�rcrkrYrrr\r\=s��#�M�
�rr\c�(�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�r5��maxtasksperchildr(�2c3�<K�|]}|j����y�wr�r�)r�r�s  rr�zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>ys����#B�'�Q�A�J�J�L�'���r�)rr�rjr�r r�rRrWrr��	enumerater��_repopulate_pool�allr�r
rMrr!r�r r�)
ror�r��origworkerpidsrrUr8r��	countdown�finalworkerpidss
          r�test_pool_worker_lifetimez1_TestPoolWorkerLifetime.test_pool_worker_lifetimehsk��� � ��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�rorg333333�?)rr�rRrWrr�r r�rurjr�)ror�rrUr8r�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)rr@r��12r�ro)rkrDrr�)ror�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_okrj�ro�cmdrf�outrps     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)rtrurvr�r{r}r�r�rYrrrmrmes��#�M��:0�@�
 rrm)�BaseManager�	BaseProxyrc��eZdZd�Zd�Zd�Zy)�FooBarc��y)N�f()rYr�s rr�zFooBar.f�s��rc��t�r)rDr�s r�gzFooBar.g�s���rc��y)N�_h()rYr�s r�_hz	FooBar._h�s��rN)rtrurvr�r�r�rYrrr�r��s����rr�c#�:K�td�D]	}||z���y�wr})rR)rUs r�bazr��s����
�2�Y����c�	��s�c��eZdZdZd�Zd�Zy)�
IteratorProxy)rc��|SrrYr�s rrzIteratorProxy.__iter__�s���rc�$�|jd�S)Nr)�_callmethodr�s rrzIteratorProxy.__next__�s�����
�+�+rN)rtrurv�	_exposed_rrrYrrr�r��s���I��,rr�c��eZdZy)�	MyManagerNr�rYrrr�r��s��rr��Foo)�callable�Bar)r�r�)r��exposedr�)r��	proxytypec�(�eZdZdZd�Zd�Zd�Zd�Zy)�_TestMyManagerrc���tt��}|j�|j|�|j	�|j|jjdtjf�y�N)�shutdown_timeoutr)
r��SHUTDOWN_TIMEOUTr��common�shutdownrl�_processr�r7r=�ror�s  r�test_mymanagerz_TestMyManager.test_mymanager�sU���-=�>���
�
�����G������
	
�
�
�g�&�&�/�/�!�f�n�n�_�1E�Frc���tt��}|5|j|�ddd�|j|jj
dtjf�y#1swY�AxYwr�)r�r�r�rlr�r�r7r=r�s  r�test_mymanager_contextz%_TestMyManager.test_mymanager_context�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�rjr�r�r�s  r�!test_mymanager_context_prestartedz0_TestMyManager.test_mymanager_context_prestarted�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�r5)r�r�r�r6rjr�rkrDr�r�rr�r�rR)	ror�rP�barr�r+�foo_methods�bar_methodsrUs	         rr�z_TestMyManager.common�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)rtrurvr�r�r�r�r�rYrrr�r��s�� �M�	G�G�7�>rr�c��tSr)�_queuerYrr�	get_queuer�s���Mrc��eZdZdZy)�QueueManagerz$manager class used by server processN�rtrurvrwrYrrr�r�	s��.rr�r�c��eZdZdZy)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNr�rYrrr�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�rJ�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)rA�urandomr�r�HOSTr�r�r�rar�r�r�r�r�r�r�r�rjr�rXrkrgr�r�r
)ror�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)	rtrurvr�rJrXr�r�r�rYrrr�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._putterH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�r))rAr�r�rr�r�r��
get_serverr��listenerr r�r�r�r�r�rjr�r6r�rarS�errno�
EADDRINUSEr�r
)ror�r��srvr�addrr�r"rs        r�test_rapid_restartz&_TestManagerRestart.test_rapid_restartQ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)rtrurvr�r�r�rYrrr�r�E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�r4�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�r5rUr`r�rr�rz(                                        zexpected BufferTooShort, got %sFr@r�Xi)(r�r�r�r�r�rror�rRr�rjr�filenorHr�r�r�r�r��recv_bytes_into�itemsize�	bytearrayrhr�BufferTooShortrPr|rr�rr
r�r
r�r �readable�writablerk�EOFErrorr�)ror4r�r�rir��longmsgrp�bufferrYr�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�rjr�r�r�r�r�rkrSr)ro�reader�writers   r�test_duplex_falsez!_TestConnection.test_duplex_false�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�rjr�r�r�)ror4r�r�r�s     r�test_spawn_closez _TestConnection.test_spawn_close�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�r@r`)
r�r�r�rr�r�rjr�rkrD)ror�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}~wwxYwrZ)rA�fstatrSr��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)Nrr8)rRrrA�dup2r�r�recv_handle�msvcrt�open_osfhandler�r(r )r�r4�data�create_dummy_fdsrUr�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�rr�r�rarr�r�r�r�r�
get_osfhandler�send_handler�r�rjr�)ror4r�r�r�r�s      r�test_fd_transferz _TestConnection.test_fd_transfer2
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&�)E2r0�*test semantics don't make sense on Windowsr8z)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�rTr�sbarr�rr8z2could not find an unassigned large file descriptorr)r�r�r�r�rr�r�rarr�r�r�r�rR�MAXFDrrhrArrrr�r r�rjr�)ror4r�r�r�r��newfds       r�test_large_fd_transferz&_TestConnection.test_large_fd_transferE
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�)rAr(r��ror4s  r�_send_data_without_fdz%_TestConnection._send_data_without_fdf
s��
��������&rzdoesn't make sense on Windowsc�B�|jdk7r|jd�|jd��\}}|j|j|f��}d|_|j
�|jttj|�|j�y)Nr�rTr�r�)r�r�r�r�rr�r�rkr3rrr��ror4r�r�s    r�test_missing_fd_transferz(_TestConnection.test_missing_fd_transferj
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�r�rjr�r�r��closedr�rkrSr�s   rr*z_TestConnection.test_contexty
s����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�)rtrurvr�r�r�r�r�r�r�rrrEr��
HAS_REDUCTIONrrxryrzrr6rArrrr*rYrrr�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�Listenerrar rkrSr�)ror)r�s   r�test_multiple_bindz _TestListener.test_multiple_bind�
sb���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!�r*r,�Clientr��acceptr�rjr�r�rkrS)ror�r�r<s    rr*z_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...r2r�s rr4z1_TestListener.test_empty_authkey.<locals>.handler�
s���<�=�=rc�b���jj||��}|jd�y)N�r�r")r*r0r�)r�r��clientros   �rr�z-_TestListener.test_empty_authkey.<locals>.run�
s(����_�_�+�+�D�'�+�B�F��K�K��rrr5r�r"r�)
r*r,rr�r�r�r1rjr�r�r�rkrS)ror4r�rTr��threadr<s`      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�r/)ror�r6r<s    r�test_abstract_socketz"_TestListener.test_abstract_socket�
s����_�_�
%�
%�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)rtrurvr�r-r*r8rEr�r�abstract_sockets_supportedr:rYrrr&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)r*r0r�r )r�r�r4s   rr�z_TestListenerClient._test�
s+���~�~�$�$�W�-���	�	�'���
�
�rc��|jjD]�}|jj|��}|j|j|j
f��}d|_|j�|j�}|j|j�d�|j�|j���y)Nr(r�Tr)
r*r+r,r�r�r�r�r�r1rjr�r�r )ror)r�r�r4s     r�test_listener_clientz(_TestListenerClient.test_listener_client�
s����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)r*r,r�r�r�r�r�r�r
r1rjr�r r�)ror�r�r4s    r�test_issue14725z#_TestListenerClient.test_issue14725�
s����O�O�$�$�&���L�L��
�
�!�)�)��L�>�����	���	��
�
�1�
�
�x�x�z���������g�.��
�
��	����	���	rc��|jjD]�}|jj|��}|jj|j�}|j�}|j
d�|j|jd��|j�|j�|j���y)Nr(�hellor�)
r*r+r,r0r�r1r�r�rr )ro�famr�r�r�s     r�test_issue16955z#_TestListenerClient.test_issue16955�
s����?�?�+�+�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)	rtrurvr�r�r�r@rBrFrYrrr=r=�
s(��,�M�����
	�� 	rr=c�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�rjrr�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�r
r�r )r�r4�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)rDr�a�brsbyerslopr���rr)	r�r�rNr�rRrr�rjr�)rorMr�r�r�rrUrAs        r�test_stringsz_TestPoll.test_stringss���G���y�y�{���1��L�L�� 3� 3�1�g�,�L�G��	���	��A��3�Z���6�6�$�<�� �����A����Q��"��	
���rc�&�|jd�yr�)r)r�r)s  r�_child_boundariesz_TestPoll._child_boundariess��	
���q�	rc�j�|jd�\}}|j|j|f��}|j�t	j
d�ddg}|D]}|j
|��|j�|j�|j|j�|�y)NFr�rsfirstssecond)r�r�rUr�r�r
r�r r�rlr�)ror)r�r�r(rs      r�test_boundariesz_TestPoll.test_boundariess����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)NrPrQ�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)
Nr2Frr�rPr)TrQrY)r�rjrr�rZr�r�r�)ror�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)rtrurvr�rJr�rNrSrUrWrZr\rYrrrHrH�
sW��,�M�)�����
�����
)�����
rrHrc�\�eZdZdZed��Zed��Zed��Zd�Zed��Z	d�Z
y)	�_TestPicklingConnectionsr�c�P�ddlm}|jtj��y)Nr)�resource_sharerr)rr`r�rr)r�r`s  rr�z&_TestPicklingConnections.tearDownClassKs��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)Nr(r)r*r,r�r�r1r �socket�
create_serverrr��getsocknamer�)r�r4r+rEr��new_connr�s       r�	_listenerz"_TestPicklingConnections._listenerPs����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�r*r0r�r�r rbr��sendall)r�r4r�r�r6s     r�_remotez _TestPicklingConnections._remotecs���"�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)r*r+r�r�rfr�r�r rirr�r�rjr�rrWr�)ror+�lconn�lconn0�lpr��rconn0�rprEr�r�re�bufrs              r�
test_picklingz&_TestPicklingConnections.test_picklingrs����?�?�+�+���	�	��
��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�r�r )r�r4r�r)r�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�rt�foobar�foobarfoobar)
r�r�rur�r�r r�rjr�r�)ror4r�r�r)r�s      r�test_accessz$_TestPicklingConnections.test_access�s��� �9�9�;���j��L�L�� 1� 1��
�L�F�����	���	������y�y��y�&���1��	�	�!��	���	��������=�1�	���	��y�y��y�&���1��	�	�!��	���	�	���x��	���	��������j�1�	���rN)rtrurvr�r�r�rfrirrruryrYrrr^r^Esb��#�M��;��;�����$����,�\�	��	�rr^c�8��eZdZdZ�fd�Z�fd�Zd�Zd�Z�xZS)�	_TestHeapr�c����t�|��tjjj
|_tjj�tjj_yr)r�r�rr�r��_heap�old_heap�Heap�ror�s �rr�z_TestHeap.setUp�sH���
��
��'�,�,�:�:�@�@��
�3B�3G�3G�3L�3L�3N����*�*�0rc�t��|jtjj_t
�|��yr)r~rr�r�r}r�r�r�s �rr�z_TestHeap.tearDown�s&���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�rqrr�r7�free�occupiedc3�4K�|]}|j���y�wr�rs)r��arenas  rr�z&_TestHeap.test_heap.<locals>.<genexpr>s���� F�������s�r�)rr�r�r}�_DISCARD_FREE_SPACE_LARGER_THANrRrH�random�lognormvariaterWr��	randranger�r��_len_to_seqrJ�_arenas�index�_allocated_blocksr�rj�sum�sortrs�shuffler��_n_frees�
_n_mallocs�_pending_free_blocks)ro�
iterations�	maxblocks�blocksr�rUrsr�rwr�r�r(r�r�r��arena_blocks�narena�nstart�nstops                   r�	test_heapz_TestHeap.test_heap�s���
��	����#�#�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)Nr5r�r�)rk�	isenabled�enablera�disable�
get_threshold�
set_thresholdrRrr�r��buddy)ro�
thresholdsrUr�r�s     r�test_free_from_gcz_TestHeap.test_free_from_gcs����|�|�~��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)	rtrurvr�r�r�r�r�rQrRs@rr{r{�s���"�M�O��>3�@rr{c�"�eZdZdefdefdefgZy)�_FoorArB�zN)rtrurvr;r<r=�_fields_rYrrr�r�5s��	�e��	�h��	�j��
�Hrr�c�:�eZdZdZd�Zed��Zdd�Zd�Zd�Z	y)	�_TestSharedCTypesr�c�4�ts|jd�yyrDrEr�s rr�z_TestSharedCTypes.setUp@rFrc�L�|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_|xjdzc_tt	|��D]}||xxdzcc<�yrr)r�rArBrRr�)r�rArBr�rPrp�stringrUs        r�_doublez_TestSharedCTypes._doubleDsp��	���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)NrUrrVgUUUUUU�?r?r�rr<r5r�r�rr�T�gUUUUUU�?r@r�@�
hellohello)rr<r=r�rnr�rRrr�r�r�r�r�r�rjr�rArB)
ror`rArBr�rPrpr�r�rUs
          r�test_sharedctypesz#_TestSharedCTypes.test_sharedctypesOsV���#�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)NTrV)r�r�s r�test_synchronizez"_TestSharedCTypes.test_synchronizefs�����D��)rc��tddd�}t|�}d|_d|_d|_|j|jd�|j
|jd�|j|jd�y)Nrr.r?r)r�rrArBr�rjr�)rorPr�s   r�	test_copyz_TestSharedCTypes.test_copyisj���1�c�7�#���3�i������������������"����s�u�u�c�*��������(rNr�)
rtrurvr�r�r�r�r�r�r�rYrrr�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)rrmr�SharedMemoryrqr�r )�shmem_name_or_obj�binary_data�	local_smss   r�!_attach_existing_shmem_then_writez3_TestSharedMemory._attach_existing_shmem_then_writezsC���'��-�%�2�2�3D�E�I�)�I�+6�	�
�
�'�s�;�'�(����rc�B�|ttj��zSr)rmrAr�)ro�prefixs  r�
_new_shm_namez_TestSharedMemory._new_shm_name�s����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���createrszaF)	r�rr�rar�rkrD�
_USE_POSIX�_name)ro�	name_tsmb�sms�	orig_names    r�*test_shared_memory_name_with_embedded_nullz<_TestSharedMemory.test_shared_memory_name_with_embedded_null�s����&�&�}�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�rYrr�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)rtrurvrAr��O_RDWR�_flagsrYrr�OptionalAttachSharedMemoryr��s�����b�i�i�/�rr��test01_notthere)r�rr�rar�rjr+r0rsr�rqrlrmr �
assertLessrkrDrE�mock�patch�_SHM_NAME_PREFIX�side_effectr�r��FileNotFoundError�FileExistsError)ror�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)rEr�r�rr�r�r�r�rar�rjr�)ror�r�r�r+r�r�s       r�test_shared_memory_recreatez-_TestSharedMemory.test_shared_memory_recreates���]�]�
 �
 �:�<�?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)NTr@r�rr�)rkrDrr�)ro�sms_invalids  r�#test_invalid_shared_memory_creationz5_TestSharedMemory.test_invalid_shared_memory_creations���
�
�
�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)rR�pickle�HIGHEST_PROTOCOLr�rr�rar�rq�dumps�loadsr�rjr+r�)ror�r��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�r�Tr�r�r�rrr�)
rRrrr�rr�rqrr r�rkr�r)ror�r�rs    r�.test_shared_memory_pickle_unpickle_dead_objectz@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_objectEs����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�rar�r�r�r+r�r�r�rjr�rqr )ror�r�s   r�#test_shared_memory_across_processesz5_TestSharedMemory.test_shared_memory_across_processesTs����(�(��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��
ShareableListrRrArCr�r�r7r�rkr�r�r�)ro�smm�sl�sl2s    r�4test_shared_memory_SharedMemoryServer_ignores_sigintzF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintps����&�&�:�:�<���	�	���
�
�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_tracker�s=�����|�|�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�r5r���r�r+r0�howdy)rr
rrkrDr�r�rRrr�shmr+rjr�r0rqr�ryrzr�)ro�smm1rU�lolr8�lom�doppleganger_list0�doppleganger_shm0�	held_name�
absent_shm�smm2rr�	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)r�HoWdYgX9��vq�r(NTrYrrrrz8s8sdqxxxxxx?xxxxxxxx?q�ignore�100r(r�r�TrY�somer`z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésr�r'u	encodéess	123456789sadios�test03_duplicater�Mr@ipr��any)rrrarr�rlr+rmr�rk�
IndexError�_get_packing_formatrjr�r��warnings�catch_warnings�simplefilterrDr�r�rRrr�r!r )ror�current_format�name_duplicate�sl_copy�sl_tethered�empty_sls       r�'test_shared_memory_ShareableList_basicsz9_TestSharedMemory.test_shared_memory_ShareableList_basics�s���
�
(�
(�>�
��	
������
�
�&�	
�
�
�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�r�r5r�r@r��changedr`�newvaluer�i�)rRrrr�rrrarr�rrr�rj�assertIsNotr�r )ror�r�
serialized_sl�deserialized_sl�	larger_sl�serialized_larger_sls       r�)test_shared_memory_ShareableList_picklingz;_TestSharedMemory.test_shared_memory_ShareableList_pickling,s���6�2�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�r�r5r�)
rRrrr�rrrrr r�rkr�r)ror�rr=s    r�5test_shared_memory_ShareableList_pickling_dead_objectzG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_objectGs����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�Popenryr��PIPEr��readline�strip�decoderrr�sleeping_retryrrr�r�rAr+r(�
unregisterr�r�rl)ror�r�r+�err_msgr�rrps        r�4test_shared_memory_cleaned_after_process_terminationzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationUs,��	���
�
�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)rtrurvr�rJr�r�r�r�r�r�rr	rrErxrAr+rrr%r8rArCrPrYrrr�r�ts���#�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 rr�z_TestFinalize.setUp�s+��#�7�7�<�<�>���� � �&�&�(rc��tj�|jtj�tjj|j�yr)rkrlr�rrT�updaterUr�s rr�z_TestFinalize.tearDown�s9��
�
�
������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�rYrrr�rZ����rr�)r�r�)r�)r�)�d10r�)rP�exitpriority)�d01r)�d02)�d03)ri����)�STOPi����)
r9r�Finalizer�rkrl�_exit_functionr rA�_exit)r�r4r�r�r��close_br�r\r^r_r`s           r�_test_finalizez_TestFinalize._test_finalize�sG��	�&�	�
�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�Tra)r�r�r\r`r_r^r)	r�r�rfr�r�r�r�r�rj)ror4r�r�rrXs      r�
test_finalizez_TestFinalize.test_finalize�s|���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��yrrYrYrr�cbz,_TestFinalize.test_thread_safety.<locals>.cb����rc���eZdZ�fd�Zy)�-_TestFinalize.test_thread_safety.<locals>.Fooc�l��||_tj|�tjdd���y)Nr�r()r])rjrrbr��randint)rorks �rr�z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__�s%�������
�
�d�B�V�^�^�A�s�5K�LrN)rtrurvr�)rks�rr�rn�s	���
Mrr�Fc����sCtjtj�dz�	tj��s�Byy#t
$r}|�Yd}~�d}~wwxYwrL)r�r
r�r�_run_finalizersrg)rr4�finishs ��r�run_finalizersz8_TestFinalize.test_thread_safety.<locals>.run_finalizers�sL�����
�
�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)Nr5r�)rRr��getrandbitsrgr�)r<rUrr�r4rss   ���r�make_finalizersz9_TestFinalize.test_thread_safety.<locals>.make_finalizers�si����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)r9ry�getswitchintervalrkr��setswitchintervalr�rr�r	�
start_threadsr�r
rl)
rortrw�old_interval�
old_thresholdr�r�rkr4rss
      @@@@r�test_thread_safetyz _TestFinalize.test_thread_safety�s���	�	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)rtrurvr�r�r�r�rfrhrr�r}rYrrrRrR�sM��"�M�)�>�
�%��%�N	N��W���u�%�4�&�4rrRc��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)�globrAr��dirnamer�__file__r��escape�splitext�splitr�rW)ror��folder�pattern�filesr��modulesrs        r�get_module_namesz _TestImportStar.get_module_namess����������!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)	Nr0zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z does not have attribute )r�ryrzr�r$r;r+r�r�r6r�)ror�r+�mod�attrs     r�test_importz_TestImportStar.test_imports����'�'�)���<�<�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)rtrurvr�r�rYrrrrs��	�rrc�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)ro�loggers  r�test_enable_loggingz _TestLogging.test_enable_logging1sV�� �+�+�-��������(�����d�*�+����/�0����O�$����	�"rc�j�tj�}|j|j��yr)rr�r��getEffectiveLevel)r�r4r�s   r�_test_levelz_TestLogging._test_level9s%�� �+�+�-���	�	�&�*�*�,�-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�rjr�r�r �NOTSETr�)	ro�LEVEL1�LEVEL2r��root_logger�
root_levelr�r�r�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�rAr��basenamer�r3rl�
removeHandlerr )ror��original_levelr�r4�logging_format�filename�
log_records        r�
test_filenamez_TestLogging.test_filenameZsG�� �+�+�-������	��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)	rtrurvr�r�r�r�r�r�rYrrr�r�-s*��"�M�#��.��.�)�8rr�c�`�eZdZdZed��Zejee	d�d�d��Z
y)�_TestPollEintrr�c�v�tjd�tj|tj
�yrL)r�r
rArCr7�SIGUSR1)r�r�s  r�_killerz_TestPollEintr._killer�s���
�
�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)NTrrY)rP�
got_signals �r�recordz._TestPollEintr.test_poll_eintr.<locals>.record�s��� �J�q�Mrr�)rr)
rAr�r7r�r�r�r�r�r
r�r�rjr�)ror�r��
oldhandler�killerr�r�s      @r�test_poll_eintrz_TestPollEintr.test_poll_eintr�s�����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)rtrurvr�r�r�rEr�r6r7r�rYrrr�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�r@)rr*�
ConnectionrrDrS�_handlerkrs  r�test_invalid_handlesz&TestInvalidHandle.test_invalid_handles�sy���)�)�4�4�X�>��	 ��I�I�K� �D�L����:�w�/�)�4�4�?�?��	E��
�G�$�	��	��
 �D�L�s#�A.�.B�=B�?B�B�	BN)rtrurvrErx�WIN32r�rYrrr�r��s$���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 bogusrY�rorss  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytes�s��)rc��yrrY�ror	s  rr�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytes����rN)rtrurvr�r�rYrr�_FakeConnectionr��s��
*�
rr��abc)r9rkrr
r*�deliver_challenge�ror�s  r�#test_deliver_challenge_auth_failurez-OtherTest.test_deliver_challenge_auth_failure�s=��	�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�)rr�s rr�zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__�s	����
rc��|xjdz
c_|jdk(rtjjS|jdk(ryy)Nr�rr�r)rrr*�
_CHALLENGEr�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytes�s=���
�
�a��
��:�:��?�*�5�5�@�@�@��Z�Z�1�_�-�rc��yrrYr�s  rr�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytes�r�rN)rtrurvr�r�r�rYrrr�r��s��
�
�
rr�r�)r9rkrr
r*�answer_challenger�s  r�"test_answer_challenge_auth_failurez,OtherTest.test_answer_challenge_auth_failure�s=��	�f�	�	
���/�=�=�)�4�4�E�E�)�+�V�	5rN)rtrurvr�r�rYrrr�r��s��5�5rr��md5c�"�eZdZdZd�Zd�Zd�Zy)�ChallengeResponseTestssupadupasecretkeyc�V�tjj|j|�Sr)rr*�_create_responser�)ro�messages  r�create_responsez%ChallengeResponseTest.create_response�s$���)�)�:�:��L�L�'�
�	
rc�X�tjj|j||�Sr)rr*�_verify_challenger�)ror��responses   r�verify_challengez&ChallengeResponseTest.verify_challenge�s&���)�)�;�;��L�L�'�8�
�	
rc�.�dD]�}|jd|���5d}|rd|jd�z}nd}||z}|j|�}|j|�s|j	|�|j||�ddd���y#1swY��xYw)N)Nr�r�zalgo=sis-twenty-bytes-longs{%s}rkr)r�rr��
startswithrhr�)ro�algor�r�r�s     r�test_challengeresponsez,ChallengeResponseTest.test_challengeresponse�s���+�D�������j�)�-���$�t�{�{�7�';�;�F� �F��s�l���/�/��4���*�*�6�2��I�I�h�'��%�%�c�8�4�*�)�,�)�)�s�A&B�B	N)rtrurvr�r�r�r�rYrrr�r��s��#�G�
�

�
5rr�c�.�|xjdz
c_yr�)r:)�nss r�initializerr�s���G�G�q�L�Grc�$�eZdZd�Zd�Zd�Zd�Zy)�TestInitializersc��tj�|_|jj�|_d|j_yr�)r�Manager�mgrr�r�r:r�s rr�zTestInitializers.setUps1��"�*�*�,����(�(�$�$�&�������rc�l�|jj�|jj�yr)r�r�r�r�s rr�zTestInitializers.tearDowns�����������
�
�rc�P�tjj�}|jt|j
d�|jt|jf�|j|jjd�|j�|j�yr�)rr
�SyncManagerrk�	TypeErrorr�r�r�rjr:r�r�)rors  r�test_manager_initializerz)TestInitializers.test_manager_initializersj���$�$�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�)
rkrrr�r�r�r r�rjr:rNs  r�test_pool_initializerz&TestInitializers.test_pool_initializersa�����)�_�%9�%9�q��I�� � ��K�$�'�'��<��	���	�	������������q�)rN)rtrurvr�r�rrrYrrr�r�	s���
��*rr�c�\�	|jd��}y#tj$rYywxYw)NF)�block)r�rr)r��items  r�_this_sub_processr(s-��
��u�u�5�u�!����=�=�
��
�s��+�+c��tj�}tjt|f��}d|_|j�|j
�yrL)rrr�rr�r�r�)r"�subProcs  r�
_test_processr.s>���!�!�#�E��%�%�->�e�X�N�G��G�N��M�M�O��L�L�Nrc��||zSrrYr�s r�_afuncr
5r�rc��tjd��}|jtgd��}|j	�|j�y)Nr`r�)r�rr�r`r�rr)rr�r�r
r r�)r�rAs  r�pool_in_processr8s5�����!�,�D�����.�/�A��J�J�L��I�I�Krc�.�eZdZd�Zed��Zd�Zd�Zy)�
_file_likec� �||_d|_yr)�	_delegate�_pid)ro�delegates  rr�z_file_like.__init__?s��!�����	rc�|�tj�}||jk7r||_g|_|jSr)rAr�r�_cacher�s  r�cachez_file_like.cacheCs1���i�i�k���$�)�)���D�I��D�K��{�{�rc�:�|jj|�yr)rrWr�s  rr(z_file_like.writeLs���
�
���$�rc�z�|jjdj|j��g|_y)Nr�)rr(r�rrr�s r�flushz_file_like.flushOs(�������R�W�W�T�Z�Z�0�1���rN)rtrurvr��propertyrr(rrYrrrr>s%������� �rrc��eZdZd�Zd�Zd�Zy)�TestStdinBadfiledescriptorc�x�tjt��}|j�|j	�y�Nr�)rr�rr�r�)ror�s  r�test_queue_in_processz0TestStdinBadfiledescriptor.test_queue_in_processUs$���&�&�m�<���
�
���	�	�rc�x�tjt��}|j�|j	�yr )rr�rr�r�rNs  r�test_pool_in_processz/TestStdinBadfiledescriptor.test_pool_in_processZs$���#�#�?�;��	���	�	���rc����tj�}t|���jd�t	j
�fd���}�j
�|j�dk(sJ�y)NrPc�$���j�Sr)r)�flikes�rr�z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>cs���e�k�k�mrr�)r�r�rr(rr�rr3)ro�sior�r&s   @r�
test_flushingz(TestStdinBadfiledescriptor.test_flushing_sQ����k�k�m���3���
���E���&�&�.C�D��
���
��|�|�~��&�&�&rN)rtrurvr!r#r(rYrrrrSs���
�
'rrc��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)Nr5r)rRr�r
r�r�rAr�r )r�r��slowrUs    r�_child_test_waitzTestWait._child_test_waitjsL���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)
Nrr3r`Fr�r�Tc3�H�K�|]}�D]}||jf����y�wr)r�)r�rUr�rws   �rr�z%TestWait.test_wait.<locals>.<genexpr>�s"�����G�i���A�1�a�e�e�*��*�i�s�"r5)�multiprocessing.connectionrrRrr�r�r-r�r�r rWrar�r�r�r�r�r�rj)ror,r�readers�messagesrUr)r�r�r�rYrws           @r�	test_waitzTestWait.test_waitrs���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)Nr5r�%s
rk)	rbr�rRr�r
r�rhrr )r�r�r,rrUs     r�_child_test_wait_socketz TestWait._child_test_wait_socket�sg���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)Nrr3r`r�Tr�r�c3�&K�|]	}d|z���y�w)r5NrYr�s  rr�z,TestWait.test_wait_socket.<locals>.<genexpr>�s����9�y�!�6�A�:�y�s�r5rkr)r0rrbrcrr�rdrRrr�r6r�r�rWrar�r1r r�r�rrJrj)ror,rr�r�r1rw�dicrUr�r)r�r�rY�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�yrE)r3r�s r�test_wait_slowzTestWait.test_wait_slow�s�����t�rc�&�|jd�yrE)r;r�s r�test_wait_socket_slowzTestWait.test_wait_socket_slow�s�����d�#rrpc�b�ddlm}d}tj�\}}t	j
�}|||g|�}t	j
�|z
}|j
|g�|j||tz
�|jd�|||gd�}|j
||g�y)Nrr3r.r�)
r0rrr�r�r�rjr=r�r�)rorr5r�r�r�r�r1s        r�test_wait_timeoutzTestWait.test_wait_timeout�s���3����#�#�%���1���� ���A�q�6�7�#����� �5�(������b�!����5�'�I�"5�6�	���t���A�q�6�2�������q�c�"rc�N�|j�tj|�yr)r]r�r
)r�rl�periods   r�signal_and_sleepzTestWait.signal_and_sleep�s�����
��
�
�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)
Nrr3r�c��t|d���S)Nc��t|�Sr)rTr�s rr�z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>�s��B�q�Er)rT)r�)r�s rr�z,TestWait.test_wait_integer.<locals>.<lambda>�s��F�1�/�:rr�r�rrg�������?)r0rrror�r�rDr�r�r`rHr�r\r�r�rjr�r=r�rr�)rorrY�sorted_rlr�r�r�r�r�r1s           r�test_wait_integerzTestWait.test_wait_integer�s���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)Nrr3r@rr�)	r0rrr�r�r�rjr�r )rorr�r�r�r�s      r�test_neg_timeoutzTestWait.test_neg_timeoutsr��3��#�#�%���1��N�N����A�3��#���N�N��q� ������b�!�����1��	���	�	���	rNr�)rtrurvr�r-r3r6r;r=r?rr�rArDrIrKrYrrr*r*hs�������-�<����!4�F�$��W���z�*�#�+�#�"�����W���z�*�)�+�)�V	rr*c�p�eZdZejed�d��Zejed�d��Zy)�TestInvalidFamilyr�c��|jt�5tjj	d�ddd�y#1swYyxYw)Nz\\.\test�rkrDrr*r,r�s r�test_invalid_familyz%TestInvalidFamily.test_invalid_familys0��
�
�
�z�
*��&�&�/�/��<�+�
*�
*��	� ?�Az skipped on non-Windows platformsc��|jt�5tjj	d�ddd�y#1swYyxYw)Nz/var/test.piperOr�s r�test_invalid_family_win32z+TestInvalidFamily.test_invalid_family_win32s1��
�
�
�z�
*��&�&�/�/�0@�A�+�
*�
*�rQN)	rtrurvrErxr�rPr�rSrYrrrMrMsI���X�_�_�U�0�1�=�2�=��X���� B�C�B�D�BrrMc�2�eZdZed��Zed��Zd�Zy)�	TestFlagsc�T�|jttj��yr)r�r�ry�flags�r�r4s  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)�jsonrrLr�r�rYr0r1�DeprecationWarningr�r�r�r r�ryrW�printr)	r�rRr\�mpr)r�r��grandchild_flagsrWs	         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(�)rEz-Sz-Or�rk)
r\rrOrG�check_outputryr�rrLrj)ror\�progr	�child_flagsr`s      r�
test_flagszTestFlags.test_flags9sz���
&�&5�&F�&F�&H�%K�1�
N�	
��&�&�
�^�^�T�4��t�T�:�<��(,�
�
�4�;�;�w�3G�(H�%��%�����&6�7rN)rtrurvr�rYrargrYrrrUrU%s-���$��$��!��!�
8rrUc�"�eZdZed��Zd�Zy)�TestTimeoutsc���tjd�|jd�|j�tj
j
|�}|jd�|j�y)Nr�r�r�)r�r
r�r rr*r0)r��childr�r4s    r�
_test_timeoutzTestTimeouts._test_timeoutJsK���
�
�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_INETr(r�r�r�)rb�getdefaulttimeout�setdefaulttimeoutrr�r*r,r�rlr�r�r rjr�r1r&)ro�old_timeout�parentrkr�r�r4s       rr2zTestTimeouts.test_timeoutSs����.�.�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)rtrurvr�rlr2rYrrririIs������2rric��eZdZd�Zy)�TestNoForkBombc��tj�}tjj	tjjt�d�}|dk7rStjjj||�\}}}|j|d�|jd|�ytjjj||�\}}}|j|j�d�|j|d�y)Nzmp_fork_bomb.pyrfrsRuntimeErrors123)rrOrAr�r�r�r�r:rr�assert_python_failurerjrlr�r�)rorur+rfr�rps      r�test_noforkbombzTestNoForkBomb.test_noforkbombls���
�
-�
-�
/���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)rtrurvrwrYrrrtrtks��
'rrtc�"�eZdZed��Zd�Zy)�TestForkAwareThreadLockc�"�|dkDrRtj|j|dz
|f��}|j�|j	�t|�n(|j
ttj��|j	�y)Nr�r�)
rr�rkr�r r&r�r�r�_afterfork_registry)r�r�r4r�s    rrkzTestForkAwareThreadLock.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�rkr�r r�r&�assertLessEqual)ror)r�r��old_sizer��new_sizes       rraz!TestForkAwareThreadLock.test_lock�s����#�#�E�*���1��$�$�&���t�/�/�0���#�#�4�:�:�Q��F�C��	���	�	���	��6�6�8���Q�����X�x�0rN)rtrurvr�rkrarYrrryry|s��
����	1rryc�.�eZdZd�Zd�Zed��Zd�Zy)�TestCloseFdsc�8�tr"tj�j�Stj�j�}g}|dkr,|j|�t	j
|�}|dkr�,|D]}t	j|��|S)Nrq)r�rb�detachrWrA�dupr )ror��to_closerAs    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�rbrn�SOCK_STREAMr rA)ror�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)rb�fromfdrnr�r r�rg)r�r4r�rrs     r�_test_closefdszTestCloseFds._test_closefds�sX��	��
�
�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�rfi6')r$rErFrr�r�r�r�r�r r�r&rOrmr�rSr�r�r�winerror)ror�r�r�r�r�WSAENOTSOCKs       r�test_closefdzTestCloseFds.test_closefd�s����#�#�$:�;�;�(�-�-�/����
�
$�
$�
&��
	��'�'�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)rtrurvr�r r�r�r�rYrrr�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��yrrY�r��frames  rr4z-TestIgnoreEINTR._test_ignore.<locals>.handler�rlr�ready�x)r7r�r�r�r��
CONN_MAX_SIZE)r�r4r4rAs    r�_test_ignorezTestIgnoreEINTR._test_ignore�sR��	��
�
�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 rjr�r�r
rArCr�r7r�r�r�r�r�rs    r�test_ignorezTestIgnoreEINTR.test_ignore�s ��*�/�/�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��yrrYr�s  rr4z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerrlr�welcome)r7r�rr*r,r�r�r1)r�r4r4r�r�s     r�_test_ignore_listenerz%TestIgnoreEINTR._test_ignore_listeners`��	��
�
�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�r
rArCr�r7r�r*r0rjr�)ror4r�r�r�r6s      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)rtrurv�maxr�
PIPE_MAX_SIZE�
SOCK_MAX_SIZEr�r�r�rEr�r6r7r�r�r�rYrrr�r��s�����-�-�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)r�rrOrXs  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�rjrO)rorrr)r�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�rfrMr�rM)	rrLrDrjrOrmrkrir�)ro�methodrrs   rr*zTestStartMethod.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�)rrLrDrErFrRr�set_forkserver_preload)rorrs  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�Trdr�)rr��PRELOADrOrirDrjrLr�rrt�lowerr�r�r�r0)ror�
old_methodr�rrs     r�test_set_getzTestStartMethod.test_set_getCsB���.�.�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)Nr0rMrfr�)rMrfr�)r�get_all_start_methodsryrzrjr�)ro�methodss  r�test_get_allzTestStartMethod.test_get_allYsz��!�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)rrOr�rAr�r�r�r�r:rrr�rLr�r^rh)ror+rfr�rps     r�test_preload_resourcesz&TestStartMethod.test_preload_resourcescs����+�+�-��=��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�$-rr0z*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)rMr�rfr�zA SemLock created in a fork)
rrLrr�r#rRr3r�r�r�)ro�process_methodr"�process_ctxr�rO�queue_methods       r�test_mixed_startmethodz&TestStartMethod.test_mixed_startmethodos���
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_queue�s
��
�	�	�!�rc��|jd�tj|j|f��}|j	�|j�yrQ)r�rr�r�r�r�)r�r"r%s   r�_put_two_and_nest_oncez&TestStartMethod._put_two_and_nest_once�s9��
�	�	�!��!�)�)��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�rWr��assertSetEqualrb)ror"r%rs    r�test_nested_startmethodz'TestStartMethod.test_nested_startmethod�s��� �%�%�'��!�)�)��1L�1L�TY�S[�\���
�
���������+�+�-��N�N�5�9�9�;�'��+�+�-�
	
���C��L�#�q�!�f�+�6rN)rtrurvr�r�r�r*r�r�r�r�rErxryrzrZr�r�r�r�rYrrr�r� s����6��6�?�
$�2�*�,H�
B��X�_�_�S�\�\�W�,�A�C� �!<�=��>�C��&��������7rr�rc�F�eZdZd�Zd�Zd�Zd�Zd�Zed��Z	d�Z
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,�nooprEr�)r�r,)�pass_fdsr�rT)r�rkzA 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�rA�piperGrHryr�r�rIr r�rJr�rLr-rrrrMrrSrlr��ENOENT�EINVALr�r�r�)ror�r,r)r�r�r��name1�name2rOr�rrprYs              r�test_resource_trackerz)TestResourceTracker.test_resource_tracker�s�����:&�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�r(r)rMT)r��alwaysr�zresource_tracker: process died)!� multiprocessing.resource_trackerr�rrArCr7rDr�wait_processr0r1r2r�r�r
rrLror\r]rirjrkrlr�rjr�r��
issubclassr[�UserWarningrmr�)
ror��
should_dier�r�rr�all_warnrlrn�the_warns
          r�check_resource_tracker_deathz0TestResourceTracker.check_resource_tracker_death�s���	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�yrA)r�r7r�r�s r�test_resource_tracker_sigintz0TestResourceTracker.test_resource_tracker_sigints���)�)�&�-�-��?rc�D�|jtjd�yrA)r�r7r=r�s r�test_resource_tracker_sigtermz1TestResourceTracker.test_resource_tracker_sigterms���)�)�&�.�.�%�@rc�D�|jtjd�yrE)r�r7rDr�s r�test_resource_tracker_sigkillz1TestResourceTracker.test_resource_tracker_sigkills���)�)�&�.�.�$�?rc��ddlm}|j�|jd|fv}||j	�z}|j|�y)Nrr�)r�r�r�r�_check_aliver�)r4r�r��reuseds    r�_is_resource_tracker_reusedz/TestResourceTracker._is_resource_tracker_reusedsG��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�rrr�r�r�r�r�r�r r�)ror�r�r)r�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�rkrDr(�register)ror,�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	�	AN)rtrurvr�r�r�r�r�rJr�r�r�rYrrr�r��sA��EP�N#3�J@�A�@�����4�$Err�c�f�eZdZed��Zd�Zd�Zd�Zejjd��Zy)�TestSimpleQueuec���|j�	|j|j��|j|j��|j�y#|j�wxYwr)rr�r�rbrs    r�_test_emptyzTestSimpleQueue._test_emptyEsQ������	&��I�I�e�k�k�m�$��I�I�e�k�k�m�$��#�#�%���#�#�%�s�>A!�!A3c���tj�}|j�|jtd�5|j�ddd�y#1swYyxYw)NrQ)r�SimpleQueuer rRrSr�rs  r�test_empty_exceptionsz%TestSimpleQueue.test_empty_exceptionsOs@��
�'�'�)��	���	�
�
#�
#�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)rr�rr�r�r�r�r�r�rbrr�rjr�r�)ror"rrr�s     r�
test_emptyzTestSimpleQueue.test_emptyXs����+�+�-��)�/�/�1��-�3�3�5���&�&��#�#���*=�>�
������
�
��������
�&������ � �"��������'��������d�+��������e�,�������
�&��	�	�rc�l�tj�}|j�|j�yr)rr�r �ror"s  rrozTestSimpleQueue.test_closeps"���+�+�-��
���
�
���
rc���tj�}|j�|j|jj
�|j|jj
�yr)rr�r r��_readerr#�_writerr�s  r�test_closedzTestSimpleQueue.test_closedwsE���+�+�-��
���
�����
�
�,�,�-�����
�
�,�,�-rN)rtrurvr�r�r�r�ror:r�cpython_onlyrrYrrr�r�CsA���&��&���0�
�\�\���.��.rr�c��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�rW)rorQ�forked_processess  �rr�z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__�s&���*��	� $��
�!��
� �'�'��-rc�>���dkrtd���dz�d|_y)Nr�Manually induced OSErrorr�r�)rSr�)ro�will_fail_ins �rr�zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.start�s(����1�$�!�"<�=�=���!��&��
rc��d|_y)N�stoppingr�r�s rrz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminate�s	��'��
rc�2�|jdk(rd|_yy)Nr�stoppedr�r�s rr�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.join�s���:�:��+�!*�D�J�,rc�B�|jdk(xs|jdk(S)Nr�rr�r�s rr�z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_alive�s���z�z�Y�.�J�$�*�*�
�2J�JrN)rtrurvr�r�rr�r�)r
r
s��r�FailingForkProcessr�s���
.�
'�
(�
+�
Krrrr�)r�)�contextc3�<K�|]}|j����y�wrrs)r�r%s  rr�zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>�s����C�2B�w�� � �"�2B�rt)rRrSrr�r�rEr��	MagicMockr r�r�r-)rorr�r
r
s   @@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)rtrurvrrYrrrrs��$Errc��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 rr�zTestSyncManagerTypes.setUp�s)���)�)�+�����������	rc��|j�N|jj�r4|jj�|jj�|jj�d|_d|_yr)r�r�rr�r�r�r�s rr�zTestSyncManagerTypes.tearDown�sW���9�9� �T�Y�Y�%7�%7�%9��I�I���!��I�I�N�N�������������	rc�,�tj�yr)r�
reap_childrenr*s rr�zTestSyncManagerTypes.setUpClass�s�����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�rrMr�rr�environment_altered�
print_warning)ror5�
start_timer�r�s     r�wait_proc_exitz#TestSyncManagerTypes.wait_proc_exit�s���	�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�r*rjr�)ro�workerrs   r�
run_workerzTestSyncManagerTypes.run_worker�sX��#�+�+�6���H��	���	�	���	�	��������������+�+�Q�/rc��|j�sJ�|j�|j�|jd�y�Nrs)r�rr��r�rs  rr�z TestSyncManagerTypes._test_event�s-���z�z�|��|����
��	�	������rc���|jj�}|j�|j|j|�|j�rJ�|j
d�yr/)r�rrbr-r�r�r�rorCs  rr�zTestSyncManagerTypes.test_event�sJ���L�L��� ��	��������(�(�!�,��8�8�:��~�	���u�
rc�$�|j�yr�r\r0s  r�
_test_lockzTestSyncManagerTypes._test_lock�������
rc���t|j|��}|j|j|�|j	�|jt|j�yr)r�r�r-r5r]rkr3�ro�lnamerCs   rrazTestSyncManagerTypes.test_lock�sF��(�G�D�L�L�%�(�*���������+�	�	�	�����,��	�	�2rc�D�|j�|j�yr�r\r]r0s  r�_test_rlockz TestSyncManagerTypes._test_rlock������
����
rc�r�t|j|��}|j|j|�yr)r�r�r-r<r8s   rrdzTestSyncManagerTypes.test_rlock
s+��(�G�D�L�L�%�(�*������(�(�!�,rc�$�|j�yrr4r0s  rrmz$TestSyncManagerTypes._test_semaphorer6rc��t|j|��}|j|j|�|j	�yr)r�r�r-rmr])ro�snamerCs   rrpz#TestSyncManagerTypes.test_semaphores4��(�G�D�L�L�%�(�*������,�,�a�0�	�	�	�rc�(�|jd��y)Nrs)rA)rpr�s rrtz+TestSyncManagerTypes.test_bounded_semaphores�����"4��5rc�D�|j�|j�yrr;r0s  r�_test_conditionz$TestSyncManagerTypes._test_conditionr=rc�p�|jj�}|j|j|�yr)r�r�r-rDr2s  r�test_conditionz#TestSyncManagerTypes.test_conditions(���L�L�"�"�$������,�,�a�0rc�F�|jdk(sJ�|j�yr�)rrr0s  r�
_test_barrierz"TestSyncManagerTypes._test_barrier#s���{�{�a�����	�	�rc�r�|jjd�}|j|j|�yr�)r�r�r-rHr2s  rr	z!TestSyncManagerTypes.test_barrier(s*���L�L� � ��#������*�*�A�.rc�4�|5	ddd�y#1swYyxYwrrYr0s  r�
_test_poolzTestSyncManagerTypes._test_pool,s�����S�S�s��c�t�|jjd��}|j|j|�y)Nr`r�)r�r�r-rKr2s  r�	test_poolzTestSyncManagerTypes.test_pool2s+���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�r0s  r�_test_queuez TestSyncManagerTypes._test_queue6sr���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�yrO)r�r�r�r-rPr�r�)ro�qnamerCs   r�
test_queuezTestSyncManagerTypes.test_queue@sa��(�G�D�L�L�%�(��+��	���a��	���a������(�(�!�,��w�w�y��y��6�6�8��|�8rc�&�|jd�y)Nr")rSr�s r�test_joinable_queuez(TestSyncManagerTypes.test_joinable_queueHs������(rc��tj�}|j|dd�|j|jd�d�|j|j	d�d�|j�|j
�|D]}�|jt|�d�|j|jd�d�y)Nrr�r�)	rE�TestCaserjrr�r��reverser�r�)r�r�caserAs    r�
_test_listzTestSyncManagerTypes._test_listKs���� � �"������Q���#�������1��q�)�������1��q�)����
����
��A�������S��1�%���������Q�'rc���|jj�}|jd�|j|j|�|j|�|j
t|�d�y)Nr�r)r�r�rWr-rZrhrjr�r2s  rr�zTestSyncManagerTypes.test_listXsS���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�rPr�)rPr�)rErWrjr�r��assertListEqualr�r�r�rJ�assertDictEqualr�assertTupleEqual�popitem�r�rrYs   r�
_test_dictzTestSyncManagerTypes._test_dict_s���� � �"������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�rPr)r�r�r-rbrhrjr�r2s  rr�zTestSyncManagerTypes.test_dictksQ���L�L�������%���������+����Q������Q���#rc���tj�}|j|jd�|j|j	�d�|jd�y)Nr�r)rErWrjr�r�rbras   r�_test_valuez TestSyncManagerTypes._test_valuersE��� � �"��������A�&��������A�&�����
rc���|jjdd�}|j|j|�|j	|j
d�|j	|j
�d�y)NrUr�r)r�rr-rerjr�r�r2s  rrQzTestSyncManagerTypes.test_valueysV���L�L���s�A�&������(�(�!�,�������!�$��������!�$rc���tj�}|j|dd�|j|dd�|jt|�d�|j	t|�ddg�y)Nrr�r)rErWrjr�r]r�ras   r�_test_arrayz TestSyncManagerTypes._test_arraysd��� � �"������Q���#�����Q���#�����S��1�%����T�#�Y��A��/rc�x�|jjdddg�}|j|j|�y)NrUrr�)r�rnr-rhr2s  rrqzTestSyncManagerTypes.test_array�s0���L�L���s�Q��F�+������(�(�!�,rc��tj�}|j|jd�|j|jd�yr�)rErWrjrArBras   r�_test_namespacez$TestSyncManagerTypes._test_namespace�s8��� � �"���������"��������"rc��|jj�}d|_d|_|j	|j
|�yr�)r�r�rArBr-rkr2s  rr�z#TestSyncManagerTypes.test_namespace�s6���L�L�"�"�$������������,�,�a�0rNrf)ro)r)+rtrurvrwrr
rrr�r�r�r�r�r*r-r�r�r5rar<rdrmrprtrDrFrHr	rKrMrPrSrUrZr�rbr�rerQrhrqrkr�rYrrrr�s����*$�,�,�8�8�M��
�� �� ��M�M�$0����������3�����-������
6�����1�����/�����
,������)��
(��
(�$��	9��	9�$�����%��0��0�-��#��#�
1rrc�(�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�rar�r�r(�textwrap�dedentrr�r�rL)ror�r�rfr�rps      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)rtrurvrZrsrYrrrnrn�s�� �!7�8�7�9�7rrnc�.�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�rp)rr�rjr�rL)rorfr�rps    r�,test_spawn_sys_executable_none_allows_importz9MiscTestCase.test_spawn_sys_executable_none_allows_import�sQ��%�5�5��
F�
���C��	
����Q������#�*�*�W�"5��6rN)rtrurvr{rZr}rYrrruru�s"��F�
!�!<�=�7�>�7rruc�,�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:rrOrbrr%r�r�r'r(r)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)rtrurvr�r�r�rYrrrr�s(���4��4����rrc���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)rtrurvr�rr�r*rJr�r�rr�r�r�rr"r[rcrorsr�rr�rrnrNrmrYrrr�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�rPr�s   rr�zManagerMixin.Pools���s�{�{����.��.�.rc�T��t�|��tj�|_yr)r�r�rr�r�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)NFr r�Tr"r#r$r%rz5Shared objects which still exist at manager shutdown:)r&r�r�rrMr�rrr'r(rkrlr��_number_of_objectsr:�_debug_infor�r�r�r�)r�r5r)r�r�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)rtrurvr�rr�r�operator�
attrgetterrr"r[rcrorsr�rr�rrnr�r�r�r�r�r�r�rQrRs@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)rtrurvr�r�dummyr�r*rJr�rr�r�rr"r[rcrorsr�rr�rrnrYrrr�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	�����|d}t�}hd�}|j�D�]D\}}t|t�s�t	|t
�r�|t
ur�1t
|j�|ksJ|j��|jD]�}	|r|	|k7r�|r�d|	j�z|ddz}
||	j�dz}Gd�d||tj�}|	dk(rtjd	�|�}|
x|_
|_||_|||
<����t	|tj�s��|r��Gd
�d|t �}|x|_
|_||_|||<��Gddg�dg����fd�}
��fd�}|
|d
<||d<y)Nrt>r�r�r��Withr��Mixinc��eZdZy��*install_tests_in_module_dict.<locals>.TempNr�rYrr�Tempr�is��rr�r�r�c��eZdZyr�r�rYrrr�z*install_tests_in_module_dict.<locals>.Tempts��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�Trbrdz start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r%�_cleanupr�rrrOrirDrErFryrzr�rcrSrIr�get_temp_dirr�r�r�)r`r��old_start_methodrRs ���r�setUpModulez1install_tests_in_module_dict.<locals>.setUpModule}s2����.�.�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)	NFrTrdr�r�r�r�)r:rrOrrirbr%r�r'r(rr�r
r�_cleanup_tests)�
need_sleepr�r�r�r�s   ��r�tearDownModulez4install_tests_in_module_dict.<locals>.tearDownModule�s�����
�	
�����!��(�(�)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�rbr��
capitalizerErWr�requires_hashdigestrtrvrur9)�remote_globsrR�	only_type�
exclude_typesru�local_globs�	ALL_TYPESr+�base�type_�newnamer�r�r�r�r�r�s `             @@r�install_tests_in_module_dictr�Us�����j�)�J��)�K�3�I�!�'�'�)�
��d��$��%���d�L�)��|�#���t�)�)�*�i�7�K��9K�9K�K�7��+�+����)�!3�� �� �5�#3�#3�#5�5��Q�R��@��#�E�$4�$4�$6��$@�A���4���(9�(9���I�%�G�>�=�=�h�G��M�D�4;�;��
�� 1�",���(,��W�%�,���h�/�/�
0���
�t�V�
�04�4�D�M�D�-�(�D�O�!%�L���;*�>�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�rYrrr�r��r[rr�ztest_semlock_subclass-r�rr5F)rr�rAr��
sem_unlink)ror�r+rs    r�test_semlock_subclassz"SemLockTests.test_semlock_subclass�sG��	�&�.�.�	�'��	�	��}�5���A�q�"�d�E�*���#�#�D�)rN)rtrurvr�rYrrr�r��s��*rr�)r2NrA)�rE�
unittest.mockr"rrqr�r�r�ryrArkr�rVr7rorbr�r�rGr�r�rrir0�test.supportr:�test.support.script_helperrrrrrrr	r
�
import_moduler�*skip_if_broken_multiprocessing_synchronizerr0r�multiprocessing.dummy�multiprocessing.heap�multiprocessing.managersrg�multiprocessing.queuesrr
rr�HAVE_SEND_HANDLEr$�ImportError�multiprocessing.sharedctypesrrr�r�	HAS_SHMEMr�HAVE_ASAN_FORK_BUGrFr�rr#r&r+r(r-r�r�rMr�r
rrrr�r&r��
HAVE_GETVALUErzr�r6rBrr��ctypesr:r;r<r=r9rIrZrWr\r|r�r�r�r�r�r�r�r�r�r�rXrirwr�r�r�r�r�r�r;rgr~r�r�r�r�r�rDr�r�r�rVrZr\rmr�r�rr�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r&r=rHr�r^r{r�r�r�rRrr�r�r�r�r�r�r�rrr
rrrr*rMrUrirtryr�r�r�rxr�r�rrrnrurr�r�r�r�r6r�rYrr�<module>r�s	��
�����	��
�	�	���
��
�
���
��
����!��'�&�"�&�&�)�(�/�=�.�.�/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��6
*� ��M	8�<�M	8�h �/�)�)� �,Q7�l�Q7�n�$�Q��Q�l
���03@�\�3@�ld�\�d�N	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��������(�=�?�\E�(�+�+�\E�?�\E�~9.�h�'�'�9.�x&E�x�0�0�&E�R$��#�#�H�-�l1�8�,�,�l1�.�l1�^7��)�)�7�47�8�$�$�7�:���26�Y�6�29 �9�9 �x6�9�6�2@E�\4�~����W�-�y�9�9�;R�S���������(�,�7�*�8�$�$�*�8�T�*��wC���M������������I���
��
�F���P��E���)��I�$(�(�E�(�H�z�)�sf�#_�6
_�_'�
_5�`�1`
�_�_�_$�#_$�'_2�1_2�5`�?`�`
�

`�`

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