U
    ãÇ-eâ ã                   @   s–  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ ej d¡Zej d¡ d dlZd dlZd dlZd dl Zd dl!Zd dl"Zd dl#Zd dl$Zd dlm%Z% zd dlm&Z& e&j'Z(W n e)k
rX   dZ(Y nX zd dl*m+Z+m,Z, d	Z-W n e)k
rŒ   dZ-Y nX zd d
lm.Z. d	Z/W n e)k
r¼   dZ/Y nX zd dl0Z0W n e)k
rä   dZ0Y nX e1dddZ2ej3 4d¡rdndZ5dd„ Z6dd„ Z7dd„ Z8ej9dkr@d dlm:Z: dd„ Z;e%j<Z=dZ>dZ?e?r`d\Z@ZAZBn
d\Z@ZAZBeCeddƒ ZDejEdkZFd dlmGZG dd „ ZHze Id!¡ZJW n   d"ZJY nX d#d$gZKzd d%lLmMZMmNZNmOZOmPZP W n& e)k
r    eQZMd ZN ZOZPY nX d&d'„ ZRG d(d)„ d)eQƒZSG d*d+„ d+eQƒZTd,d-„ ZUG d.d/„ d/ƒZVG d0d1„ d1eTƒZWG d2d3„ d3ejXƒZYG d4d5„ d5eTƒZZd6d7„ Z[d8d9„ Z\G d:d;„ d;eTƒZ]G d<d=„ d=eTƒZ^G d>d?„ d?eTƒZ_G d@dA„ dAeTƒZ`G dBdC„ dCeTƒZaG dDdE„ dEeQƒZbdFdG„ ZcG dHdI„ dIeQƒZdG dJdK„ dKeQƒZeG dLdM„ dMeTƒZfG dNdO„ dOeTƒZgG dPdQ„ dQeTƒZhG dRdS„ dSeTƒZidádUdV„ZjdWdX„ ZkdYdZ„ Zld[d\„ ZmG d]d^„ d^eQƒZnG d_d`„ d`eoƒZpdadb„ ZqG dcdd„ ddeTƒZrdedf„ Zsdgdh„ ZtG didj„ djeTƒZuG dkdl„ dleTƒZvd dml"mwZwmxZxmyZy G dndo„ doeQƒZzdpdq„ Z{G drds„ dsexƒZ|G dtdu„ duewƒZ}e}j~dvezdw e}j~dxezdydz e}j~dqe{e|d{ G d|d}„ d}eTƒZe €¡ Zd~d„ Z‚G d€d„ dewƒZƒeƒj~de‚dw G d‚dƒ„ dƒewƒZ„e„ ~d¡ d„Z…G d…d†„ d†eTƒZ†G d‡dˆ„ dˆeTƒZ‡e6d‰ƒZˆG dŠd‹„ d‹eTƒZ‰G dŒd„ deTƒZŠG dŽd„ deTƒZ‹G dd‘„ d‘eTƒZŒe  e(d’¡G d“d”„ d”eTƒƒZŽG d•d–„ d–eTƒZG d—d˜„ d˜eMƒZG d™dš„ dšeTƒZ‘e  e/d›¡G dœd„ deTƒƒZ’G dždŸ„ dŸeTƒZ“G d d¡„ d¡e j”ƒZ•G d¢d£„ d£eTƒZ–G d¤d¥„ d¥eTƒZ—G d¦d§„ d§e j”ƒZ˜G d¨d©„ d©e j”ƒZ™dªd«„ ZšG d¬d­„ d­e j”ƒZ›d®d¯„ Zœd°d±„ Zd²d³„ Zžd´dµ„ ZŸG d¶d·„ d·eQƒZ G d¸d¹„ d¹e j”ƒZ¡G dºd»„ d»e j”ƒZ¢G d¼d½„ d½e j”ƒZ£G d¾d¿„ d¿e j”ƒZ¤G dÀdÁ„ dÁe j”ƒZ¥G dÂdÃ„ dÃe j”ƒZ¦G dÄdÅ„ dÅe j”ƒZ§G dÆdÇ„ dÇe j”ƒZ¨G dÈdÉ„ dÉe j”ƒZ©G dÊdË„ dËe j”ƒZªe  «ejEdkdÌ¡G dÍdÎ„ dÎe j”ƒƒZ¬G dÏdÐ„ dÐe j”ƒZ­G dÑdÒ„ dÒe j”ƒZ®G dÓdÔ„ dÔe j”ƒZ¯G dÕdÖ„ dÖe j”ƒZ°G d×dØ„ dØeQƒZ±G dÙdÚ„ dÚe±ƒZ²G dÛdÜ„ dÜe±ƒZ³G dÝdÞ„ dÞe±ƒZ´dßdà„ ZµdS )âé    N)ÚsupportÚ_multiprocessingzmultiprocess.synchronize)Úutil)Ú	reductionF)ÚValueÚcopyT)Úshared_memory)Z
__cleanenvZ
__isolatedÚCOVERAGEg     €V@g      N@c                 C   s
   |   d¡S )NÚlatin)Úencode)Ús© r   ú\/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/multiprocess/tests/__init__.pyr
   P   s    r
   c                 C   s"   t | tjjƒr|  ¡  |  ¡  d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueT   s    r   c                 C   s   t j| td d S ©N©Útimeout)r   r   ÚTIMEOUT)Úprocessr   r   r   Újoin_processZ   s    r   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r    Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlinkc   s    r$   çš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)r%   r%   r%   ÚHAVE_BROKEN_SEM_GETVALUEÚwin32©Úwaitc                 C   s    |d k	r|dk rd }t | g|ƒS )Nç        r(   )Úhandler   r   r   r   Úwait_for_handle   s    r,   ÚSC_OPEN_MAXé   Ú__main__Ztest_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc               	   C   sT   d} zt  d¡}W n ttfk
r,   Y dS X |dks>|| krBdS t d|  ¡‚dS )zACheck that the system supports enough semaphores to run the test.r.   ÚSC_SEM_NSEMS_MAXNéÿÿÿÿzHThe OS doesn't support enough semaphores to run the test (required: %d).)ÚosÚsysconfÚAttributeErrorÚ
ValueErrorÚunittestÚSkipTest)Z	nsems_minZnsemsr   r   r   Úcheck_enough_semaphores—   s    ÿr<   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTimingWrapperc                 C   s   || _ d | _d S r   )ÚfuncÚelapsed)Úselfr>   r   r   r   Ú__init__¬   s    zTimingWrapper.__init__c              
   O   s>   t tdtjƒƒ }z| j||ŽW ¢S t tdtjƒƒ | | _X d S )NÚ	monotonic)ÚgetattrÚtimer?   r>   )r@   ÚargsÚkwdsÚtr   r   r   Ú__call__°   s    zTimingWrapper.__call__N©Ú__name__Ú
__module__Ú__qualname__rA   rH   r   r   r   r   r=   ª   s   r=   c                   @   s,   e Zd ZdZdd„ Zdd„ Zdd„ ZeZdS )	ÚBaseTestCase)Ú	processesÚmanagerÚthreadsc                 C   s   t r|  ||d¡ d S ©Né   )ÚCHECK_TIMINGSÚassertAlmostEqual©r@   ÚaÚbr   r   r   ÚassertTimingAlmostEqual¿   s    z$BaseTestCase.assertTimingAlmostEqualc                 G   s2   z||Ž }W n t k
r    Y nX |  ||¡S d S r   )ÚNotImplementedErrorÚassertEqual)r@   Úvaluer>   rE   Úresr   r   r   ÚassertReturnsIfImplementedÃ   s
    z'BaseTestCase.assertReturnsIfImplementedc                 G   s   t dƒ‚d S )Nz#shouldn't try to pickle a test case)rY   )r@   rE   r   r   r   Ú
__reduce__Í   s    zBaseTestCase.__reduce__N)rJ   rK   rL   ÚALLOWED_TYPESrX   r]   r^   Ú__reduce_ex__r   r   r   r   rM   »   s
   
rM   c                 C   sp   z
|   ¡ W S  tk
rj   z| jW  Y S  tk
rd   z| jW  Y  Y S  tk
r^   t‚Y nX Y nX Y nX d S r   )Ú	get_valuer8   Z_Semaphore__valueÚ_valuerY   ©r@   r   r   r   ra   Ö   s    
ra   c                   @   s   e Zd Zdd„ ZdS )ÚDummyCallablec                 C   s   t |tƒst‚| d¡ d S ©Né   )r   rd   ÚAssertionErrorÚput)r@   ÚqÚcr   r   r   rH   ç   s    zDummyCallable.__call__N)rJ   rK   rL   rH   r   r   r   r   rd   æ   s   rd   c                   @   s’  e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
edd„ ƒZedd„ ƒZdd„ Ze ejd¡dd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zed'd(„ ƒZe d)d*¡d+d,„ ƒZed-d.„ ƒZd/d0„ ZedRd3d4„ƒZ d5d6„ Z!d7d8„ Z"d9d:„ Z#ed;d<„ ƒZ$d=d>„ Z%ed?d@„ ƒZ&dAdB„ Z'ei fdCdD„ƒZ(dEdF„ Z)dGdH„ Z*edSdJdK„ƒZ+dLdM„ Z,dNdO„ Z-dPdQ„ Z.d2S )TÚ_TestProcess©rN   rP   c                 C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )NrP   útest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrZ   Úidentr6   ÚgetpidÚexitcode)r@   Úcurrentrr   r   r   r   Útest_currentð   s    
z_TestProcess.test_currentc                 C   sz   | j dkr|  d | j ¡¡ | j| jd}|  |j|  ¡ j¡ | j| jdd}|  |j¡ | j| jdd}|  	|j¡ d S )NrP   rm   ©ÚtargetT©r   ru   F)
rn   ro   rp   ÚProcessÚ_testrZ   ru   rq   rs   ÚassertFalse)r@   Zproc0Zproc1Úproc2r   r   r   Útest_daemon_argumentþ   s    
z!_TestProcess.test_daemon_argumentc                 O   sR   |   ¡ }| |¡ | |¡ | |j¡ | jdkrN| t|jƒ¡ | |j¡ d S )NrP   )rq   rh   r"   rn   rw   rr   Úpid)Úclsri   rE   rF   r|   r   r   r   r‚   
  s    


z_TestProcess._testc                 C   s    | j dkr|  d | j ¡¡ |  |  ¡ ¡ | jdd\}}| j| j|fd}| ¡  | 	¡  | 
¡ \}}|  ||  ¡ j¡ |  |t ¡ ¡ |  ||  ¡ j¡ d S )NrP   rm   F©Zduplex©r   rE   )rn   ro   rp   ÚassertIsNoneÚparent_processÚPiper   Ú_test_send_parent_processÚstartÚjoinÚrecvrZ   rq   r†   r6   rz   r"   )r@   ÚrconnÚwconnÚpZ
parent_pidÚparent_namer   r   r   Útest_parent_process_attributes  s    
z+_TestProcess.test_parent_process_attributesc                 C   s&   ddl m} | |ƒ j|ƒ jg¡ d S )Nr   ©r‹   )Úmultiprocess.processr‹   Úsendr†   r"   ©r‡   r’   r‹   r   r   r   r   #  s    z&_TestProcess._test_send_parent_processc                 C   sª   | j dkr|  d | j ¡¡ | jdd\}}| j| j|fd}| ¡  |jddsZtdƒ‚| 	¡ }|  
|d	¡ | ¡  | ¡  |jdds’tdƒ‚| 	¡ }|  
|d
¡ d S )NrP   rm   Frˆ   r‰   é<   r   z(Could not communicate with child processÚaliveú	not alive)rn   ro   rp   rŒ   r   Ú_test_create_grandchild_processrŽ   Úpollrg   r   rZ   Ú	terminater   )r@   r‘   r’   r“   Zparent_process_statusr   r   r   Ú_test_parent_process(  s$    
 ÿz!_TestProcess._test_parent_processc                 C   s(   | j | j|fd}| ¡  t d¡ d S )Nr‰   i,  )r   Ú_test_report_parent_statusrŽ   rD   Úsleep)r‡   r’   r“   r   r   r   r   A  s    z,_TestProcess._test_create_grandchild_processc                 C   sN   ddl m} | |ƒ  ¡ rdnd¡ |ƒ jdd | |ƒ  ¡ rDdnd¡ d S )Nr   r–   r›   rœ   rf   r   )r—   r‹   r˜   rt   r   r™   r   r   r   r¡   G  s    z'_TestProcess._test_report_parent_statusc                 C   sš  |   d¡}|  ¡ }|ddf}dddœ}d}| j| j|||d}d|_|  ¡ }| jd	krf|  |j|j¡ |  | 	¡ d
¡ |  |jd¡ |  
||  ¡ ¡ |  t|  ¡ ƒtk¡ |  |jd ¡ | ¡  |  |jd ¡ |  | 	¡ d¡ |  ||  ¡ ¡ |  | ¡ |dd … ¡ |  | ¡ |¡ |  | ¡ |j¡ | jd	krX|  | ¡ |j¡ |  | ¡ |j¡ | ¡  |  |jd¡ |  | 	¡ d
¡ |  
||  ¡ ¡ t|ƒ d S )NrR   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)r   rE   Úkwargsr"   TrP   Fr   )r   ÚEventr   r‚   ru   rq   rn   rZ   rr   rt   ÚassertNotInÚactive_childrenrs   ÚtypeÚlistr{   rŽ   ÚassertInÚgetr"   r†   r   r   )r@   ri   ÚerE   r¦   r"   r“   r|   r   r   r   Útest_processN  sF    


   ÿ
z_TestProcess.test_processzneeds native_idc                 C   sr   | j dkr|  d | j ¡¡ t ¡ j}|  d¡}| j| j|fd}| 	¡  | 
¡ }| ¡  t|ƒ |  ||¡ d S )NrP   rm   rR   r‰   )rn   ro   rp   Ú	threadingÚmain_threadÚ	native_idr   r   Ú"_test_process_mainthread_native_idrŽ   r­   r   r   ÚassertNotEqual)r@   Zcurrent_mainthread_native_idri   r“   Zchild_mainthread_native_idr   r   r   Ú!test_process_mainthread_native_idv  s    


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  ¡ j}| |¡ d S r   )r°   r±   r²   rh   )r‡   ri   Zmainthread_native_idr   r   r   r³   ‡  s    
z/_TestProcess._test_process_mainthread_native_idc                 C   s   t  d¡ d S )Néd   ©rD   r¢   ©r‡   r   r   r   Ú_sleep_someŒ  s    z_TestProcess._sleep_somec                 C   s   t  |¡ d S r   r·   )r‡   Údelayr   r   r   Ú_test_sleep  s    z_TestProcess._test_sleepc              
      sˆ  | j dkr|  d | j ¡¡ | j| jd‰ dˆ _ˆ  ¡  |  ˆ  ¡ d¡ |  	ˆ |  
¡ ¡ |  ˆ jd ¡ tˆ jƒ}|  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ |  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ t d¡ |ˆ ƒ ttd	ƒr>‡ fd
d„}t tj|¡}zt d¡ |  |ƒ d ¡ W 5 t d¡ t tj|¡ X n|  |ƒ d ¡ |  |jd¡ |  ˆ  ¡ d¡ |  ˆ |  
¡ ¡ ˆ  ¡  ˆ jS )NrP   rm   r~   Tr   r*   r5   rR   Úalarmc                     s   t dˆ  ƒ‚d S )Nzjoin took too long: %s©ÚRuntimeError©rE   ©r“   r   r   Úhandler²  s    z+_TestProcess._kill_process.<locals>.handleré
   F)rn   ro   rp   r   r¹   ru   rŽ   rZ   rt   r¬   r©   r{   r=   r   rX   r?   rD   r¢   ÚhasattrÚsignalÚSIGALRMr¼   r¨   )r@   Úmethr   rÁ   Zold_handlerr   rÀ   r   Ú_kill_process”  s>    




z_TestProcess._kill_processc                 C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S ©NÚnt)	rÇ   r   r   rŸ   r6   r"   rZ   rÄ   ÚSIGTERM©r@   r{   r   r   r   Útest_terminateÇ  s    
z_TestProcess.test_terminatec                 C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S rÈ   )	rÇ   r   r   Úkillr6   r"   rZ   rÄ   ÚSIGKILLrË   r   r   r   Ú	test_killÌ  s    
z_TestProcess.test_killc                 C   sJ   zt  ¡ }W n tk
r$   d}Y nX |  t|ƒtk¡ |  |dk¡ d S rQ   )r   Ú	cpu_countrY   rs   rª   Úint)r@   Zcpusr   r   r   Útest_cpu_countÑ  s    
z_TestProcess.test_cpu_countc                 C   sp   |   t|  ¡ ƒt¡ | jtjtfd}|  ||  ¡ ¡ d|_	| 
¡  |  ||  ¡ ¡ | ¡  |  ||  ¡ ¡ d S ©Nr‰   T)rZ   rª   r©   r«   r   rD   r¢   ÚDELTAr¨   ru   rŽ   r¬   r   ©r@   r“   r   r   r   Útest_active_childrenÙ  s    z!_TestProcess.test_active_childrenc                 C   sR   |  |¡ t|ƒdk rNtdƒD ].}| j| j|||g fd}| ¡  | ¡  qd S )Nr£   r‰   )r˜   rx   Úranger   Ú_test_recursionrŽ   r   )r‡   r’   ÚidÚir“   r   r   r   rØ   æ  s    
 ÿz_TestProcess._test_recursionTú#fails with is_dill(obj, child=True)c                 C   sx   | j dd\}}|  |g ¡ t t¡ g }| ¡ rB| | ¡ ¡ q*g dgddgddgdgddgddgg}|  ||¡ d S )NFrˆ   r   rR   )	rŒ   rØ   rD   r¢   rÔ   rž   Úappendr   rZ   )r@   r‘   r’   ÚresultÚexpectedr   r   r   Útest_recursionñ  s    
ù	z_TestProcess.test_recursionc                 C   s   |  d¡ d S )Nç      $@r(   ©r‡   Úeventr   r   r   Ú_test_sentinel  s    z_TestProcess._test_sentinelc              	   C   s°   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}|  t¡ |j W 5 Q R X | 	¡  |  
|j¡ |j}|  |t¡ |  t|dd¡ | ¡  | ¡  |  t|dd¡ d S )NrP   rm   r‰   r*   r   rR   )rn   ro   rp   r§   r   rã   ÚassertRaisesr9   ÚsentinelrŽ   Ú
addCleanupr   rv   rÑ   rƒ   r,   Úsetrs   )r@   râ   r“   rå   r   r   r   Útest_sentinel
  s    
z_TestProcess.test_sentinelr   Nc                 C   s   |d k	r|  ¡  t |¡ d S r   )r­   ÚsysÚexit)r‡   Úrcri   r   r   r   Ú_test_close  s    z_TestProcess._test_closec              	   C   s<  | j dkr|  d | j ¡¡ |  ¡ }| j| jd|id}d|_| ¡  |  | 	¡ d¡ |  
t¡ | ¡  W 5 Q R X | d ¡ | ¡  |  | 	¡ d¡ |  |jd¡ | ¡  |  
t¡ | 	¡  W 5 Q R X |  
t¡ | ¡  W 5 Q R X |  
t¡ | ¡  W 5 Q R X | ¡  t |¡}~t ¡  |  |ƒ d ¡ t|ƒ d S )NrP   rm   ri   )r   r¦   TFr   )rn   ro   rp   r   r   rì   ru   rŽ   rZ   rt   rä   r9   r   rh   r   r{   rŸ   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )r@   ri   r“   Úwrr   r   r   Ú
test_close   s4    


z_TestProcess.test_closec                    s>  ˆ j dkrˆ  d ˆ j ¡¡ t ¡ }tj d¡}|dkrD|r@dqFdnd}‡ fdd	„t|ƒD ƒ}|D ]}| 	¡  qb|D ]}t
|ƒ qt|D ]}ˆ  |jd
¡ q†‡ fdd	„t|ƒD ƒ}|D ]}| 	¡  q´t d¡ |D ]}| ¡  qÐ|D ]}t
|ƒ qâtjdkr:tj g}tjdkr | tj ¡ |D ]}ˆ  |j|¡ q$d S )NrP   rm   r	   ÚspawnrR   rf   r¶   c                    s   g | ]}ˆ j ˆ jd d‘qS ))ç{®Gáz„?r‰   )r   r»   ©Ú.0rÚ   rc   r   r   Ú
<listcomp>I  s   ÿz4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]}ˆ j ˆ jd ‘qS )r~   )r   r¹   rö   rc   r   r   rø   R  s   ÿçü©ñÒMbP?rÉ   Údarwin)rn   ro   rp   r   Úget_start_methodr6   Úenvironr­   r×   rŽ   r   rZ   r{   rD   r¢   rŸ   r"   rÄ   rÊ   ré   ÚplatformrÜ   rÎ   r¬   )r@   ÚsmZtravisÚNÚprocsr“   Z	exitcodesr   rc   r   Útest_many_processes@  s<    

ÿ


ÿ




z _TestProcess.test_many_processesc                 C   sf   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  |  |ƒ d ¡ |  | 	¡ d¡ t
|ƒ d S )Nr‰   rf   )rd   rí   rî   r   r   rŽ   r   rñ   rZ   r­   r   )r@   rj   rò   ri   r“   r   r   r   Útest_lose_target_refd  s    
z!_TestProcess.test_lose_target_refc                 C   s   |  tj ¡ ¡ | ¡  d S r   )rh   Útestr   Zfd_countr)   )r@   Úevtri   r   r   r   Ú_test_child_fd_inflationp  s    z%_TestProcess._test_child_fd_inflationc              	      sÖ   ˆj dkrˆ d ˆj ¡¡ t ¡ }|dkr<ˆ d |¡¡ d}ˆ ¡ ‰ ˆ ¡ ‰‡ ‡‡fdd„t|ƒD ƒ}|D ]}| ¡  qnz0‡fdd„t|ƒD ƒ}ˆ tt	|ƒƒd|¡ W 5 ˆ  	¡  |D ]}| 
¡  qºtˆƒ X d S )	NrP   rm   Úforkrf   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r‰   )r   r  rö   ©r  ri   r@   r   r   rø   …  s   ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    s   g | ]}ˆ   ¡ ‘qS r   ©r­   rö   ©ri   r   r   rø   ‹  s     rR   )rn   ro   rp   r   rû   r§   r   r×   rŽ   rç   r   r   rZ   rx   )r@   rþ   rÿ   r   r“   Z	fd_countsr   r  r   Útest_child_fd_inflationu  s(    
ÿ

z$_TestProcess.test_child_fd_inflationc                    s>   ‡ fdd„}‡ fdd„}t j|d ¡  t j|dd ¡  d S )Nc                      s   t  d¡ ˆ  ¡  d S )Nç      à?©rD   r¢   rç   r   ©r  r   r   Úfunc1–  s    
z2_TestProcess._test_wait_for_threads.<locals>.func1c                      s   t  d¡ ˆ  ¡  d S )Né   )rD   r¢   Úclearr   r  r   r   Úfunc2š  s    
z2_TestProcess._test_wait_for_threads.<locals>.func2r~   Tr€   )r°   ÚThreadrŽ   )r@   r  r  r  r   r  r   Ú_test_wait_for_threads”  s    z#_TestProcess._test_wait_for_threadsc                 C   sX   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}| ¡  | ¡  |  | 	¡ ¡ d S )NrP   rm   r‰   )
rn   ro   rp   r§   r   r  rŽ   r   rs   Úis_set)r@   r  Úprocr   r   r   Útest_wait_for_threads¡  s    
z"_TestProcess.test_wait_for_threadsc                 C   sT   |  ¡ D ]>\}}|dkr*t ¡ }| ¡  n|dks6t‚d }tt|d ƒ q| ¡  d S )Nr   Úremove)ÚitemsÚioÚStringIOr   rg   Úsetattrré   rç   )r@   r  Zbreak_std_streamsÚstream_nameÚactionÚstreamr   r   r   Ú_test_error_on_stdio_flush­  s    
z'_TestProcess._test_error_on_stdio_flushc                 C   s    t  ¡ d g}|d  ¡  dD ]~}|D ]t}tt|ƒ}tt||ƒ zJ|  ¡ }| j| j|fd}| 	¡  | 
¡  |  | ¡ ¡ |  |jd¡ W 5 tt||ƒ X q$qd S )Nr   ©ÚstdoutÚstderrr‰   )r  r  r   rC   ré   r  r§   r   r   rŽ   r   rs   r  rZ   r{   )r@   Ústreamsr  r  Ú
old_streamr  r  r   r   r   Útest_error_on_stdio_flush_1¹  s     
ÿz(_TestProcess.test_error_on_stdio_flush_1c                 C   s‚   dD ]x}dD ]n}t t|ƒ}zP|  ¡ }| j| j|||ifd}| ¡  | ¡  |  | 	¡ ¡ |  
|jd¡ W 5 tt||ƒ X qqd S )Nr!  )r   r  r‰   r   )rC   ré   r  r§   r   r   rŽ   r   rs   r  rZ   r{   )r@   r  r  r%  r  r  r   r   r   Útest_error_on_stdio_flush_2Ì  s    

ÿz(_TestProcess.test_error_on_stdio_flush_2r*   c                 C   s   t  |¡ | ¡  d S r   r  )r@   r  rº   r   r   r   Ú_sleep_and_set_eventÝ  s    
z!_TestProcess._sleep_and_set_eventc           
      C   s  | j dkr|  d | j ¡¡ t ¡ }|dkr<|  d |¡¡ ddlm} | ¡  d}|  ¡ }| j	| j
||fd}| ¡  |j}t ||¡ t |d ¡ |  ¡ }| j	| j
|fd}	|	 ¡  |	 ¡  |  | ¡ ¡ |  |	jd¡ | ¡  |  | ¡ ¡ |  |jd	¡ d S )
NrP   rm   Ú
forkserverr   )Ú_forkserverr  r‰   ç       @)r   éÿ   )rn   ro   rp   r   rû   Zmultiprocess.forkserverr*  Úensure_runningr§   r   r(  rŽ   Z_forkserver_pidr6   rÍ   rD   r¢   r   rs   r  rZ   r{   r¬   )
r@   Úsignumrþ   r*  rº   r  r  r†   Zevt2r„   r   r   r   Úcheck_forkserver_deathâ  s.    
z#_TestProcess.check_forkserver_deathc                 C   s   |   tj¡ d S r   )r/  rÄ   ÚSIGINTrc   r   r   r   Útest_forkserver_sigint  s    z#_TestProcess.test_forkserver_sigintc                 C   s   t jdkr|  tj¡ d S rÈ   )r6   r"   r/  rÄ   rÎ   rc   r   r   r   Útest_forkserver_sigkill  s    
z$_TestProcess.test_forkserver_sigkill)r   N)r*   )/rJ   rK   rL   r_   r}   r…   Úclassmethodr‚   r•   r   r    r   r¡   r¯   r:   Ú
skipUnlessr°   Ú_HAVE_THREAD_NATIVE_IDrµ   r³   r¹   r»   rÇ   rÌ   rÏ   rÒ   rÖ   rØ   ÚskipIfrß   rã   rè   rì   ró   r  r  r  r  r  r  r   r&  r'  r(  r/  r1  r2  r   r   r   r   rk   ì   sl   
	


(



3




 $

&rk   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_UpperCaserc                 C   s    t j | ¡ t  ¡ \| _| _d S r   )r   r   rA   rŒ   Ú
child_connÚparent_connrc   r   r   r   rA     s    z_UpperCaser.__init__c                 C   s<   | j  ¡  t| jjd ƒD ]}| j | ¡ ¡ q| j ¡  d S r   )r9  r   Úiterr8  r   r˜   Úupper©r@   r   r   r   r   Úrun  s    
z_UpperCaser.runc                 C   s&   t |ƒtkst‚| j |¡ | j ¡ S r   )rª   Ústrrg   r9  r˜   r   r<  r   r   r   Úsubmit"  s    z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )r9  r˜   r   r8  rc   r   r   r   Ústop'  s    
z_UpperCaser.stopN)rJ   rK   rL   rA   r=  r?  r@  r   r   r   r   r7    s   r7  c                   @   s@   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
d„ Z	dS )Ú_TestSubclassingProcess©rN   c                 C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTr¥   ZHELLOZworldZWORLD)r7  ru   rŽ   rZ   r?  r@  r   )r@   Z
uppercaserr   r   r   Útest_subclassing0  s    z(_TestSubclassingProcess.test_subclassingc              	   C   sœ   | j dkr|  d | j ¡¡ tjj}|  tjj|¡ | j| j	|fd}| 
¡  | ¡  t|dƒ2}| ¡ }|  d|¡ |  d|¡ |  d|¡ W 5 Q R X d S )NrP   rm   r‰   ÚrÚZeroDivisionErrorz__init__.pyz1/0 # MARKER)rn   ro   rp   r  r   ÚTESTFNræ   Úunlinkr   Ú_test_stderr_flushrŽ   r   ÚopenÚreadr¬   )r@   Útestfnr  ÚfÚerrr   r   r   Útest_stderr_flush9  s    
z)_TestSubclassingProcess.test_stderr_flushc                 C   s6   t  |t jt jB t jB ¡}t|dddt_dd  d S )NÚwF©ÚclosefdrR   r   )r6   rI  ÚO_WRONLYÚO_CREATÚO_EXCLré   r#  )r‡   rK  Úfdr   r   r   rH  J  s    z*_TestSubclassingProcess._test_stderr_flushc                 C   s8   t  |t jt jB t jB ¡}t|dddt_t |¡ d S )NrO  FrP  )r6   rI  rR  rS  rT  ré   r#  rê   )r‡   ÚreasonrK  rU  r   r   r   Ú_test_sys_exitQ  s    z&_TestSubclassingProcess._test_sys_exitc              
   C   s   | j dkr|  d | j ¡¡ tjj}|  tjj|¡ dddgdfD ]x}| j| j	||fd}d|_
| ¡  t|ƒ |  |jd¡ t|d	ƒ}| ¡ }W 5 Q R X |  | ¡ t|ƒ¡ t |¡ qBd
D ]:}| jtj|fd}d|_
| ¡  t|ƒ |  |j|¡ qÀd S )NrP   rm   rR   r£   é   zignore thisr‰   TrD  )TFé   )rn   ro   rp   r  r   rF  ræ   rG  r   rW  ru   rŽ   r   rZ   r{   rI  rJ  Úrstripr>  r6   ré   rê   )r@   rK  rV  r“   rL  Úcontentr   r   r   Útest_sys_exitW  s,    
þz%_TestSubclassingProcess.test_sys_exitN)
rJ   rK   rL   r_   rC  rN  r3  rH  rW  r\  r   r   r   r   rA  ,  s   	

rA  c                 C   s"   t | dƒr|  ¡ S |  ¡ dkS d S )NÚemptyr   )rÃ   r]  Úqsizer
  r   r   r   Úqueue_emptyz  s    
r_  c                 C   s"   t | dƒr|  ¡ S |  ¡ |kS d S )NÚfull)rÃ   r`  r^  )ri   Úmaxsizer   r   r   Ú
queue_full€  s    
rb  c                   @   sŒ   e Zd Zedd„ ƒZdd„ Zedd„ ƒZdd„ Zed	d
„ ƒZdd„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
_TestQueuec                 C   s*   |  ¡  tdƒD ]}| ¡  q| ¡  d S )Né   )r)   r×   r­   rç   )r‡   r   Úchild_can_startÚparent_can_continuerÚ   r   r   r   Ú	_test_putŠ  s    
z_TestQueue._test_putc                 C   sü  d}| j |d}|  ¡ }|  ¡ }| j| j|||fd}d|_| ¡  |  t|ƒd¡ |  t||ƒd¡ | 	d¡ | 	dd¡ | 	ddd ¡ | 	d	d¡ | 	d
dd ¡ | 
d¡ t t¡ |  t|ƒd¡ |  t||ƒd¡ t|j	ƒ}t|j
ƒ}|  tj|dd¡ |  |jd¡ |  tj|ddd ¡ |  |jd¡ |  tj|d¡ |  |jd¡ |  tj|ddt¡ |  |jt¡ |  tj|ddt¡ |  |jd¡ | jtj|ddtd |  |jt¡ | ¡  | ¡  |  t|ƒd¡ |  t||ƒd¡ | ¡  t|ƒ d S )Nrd  ©ra  r‰   TFrR   r£   rX  é   rf   é   r   r   )r   r§   r   rg  ru   rŽ   rZ   r_  rb  rh   Ú
put_nowaitrD   r¢   rÔ   r=   rä   ÚpyqueueÚFullrX   r?   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3rç   r)   r   r   )r@   ÚMAXSIZEr   re  rf  r  rh   rk  r   r   r   Útest_put‘  sR    þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr£   rX  ri  rf   )r)   rh   rç   ©r‡   r   re  rf  r   r   r   Ú	_test_getÌ  s    



z_TestQueue._test_getc                 C   s²  |   ¡ }|  ¡ }|  ¡ }| j| j|||fd}d|_| ¡  |  t|ƒd¡ | ¡  | 	¡  t
 t¡ |  t|ƒd¡ |  | dd ¡d¡ |  | d¡d¡ |  |jddd¡ |  | ¡ d	¡ |  t|ƒd¡ t|jƒ}t|jƒ}|  tj|d¡ |  |jd
¡ |  tj|dd ¡ |  |jd
¡ |  tj|¡ |  |jd
¡ |  tj|dt¡ |  |jt¡ |  tj|dt¡ |  |jd
¡ | jtj|td |  |jt¡ | ¡  t|ƒ d S )Nr‰   TFr£   rX  rR   r   ri  rf   r   )r   r§   r   rt  ru   rŽ   rZ   r_  rç   r)   rD   r¢   rÔ   r­   Ú
get_nowaitr=   rä   rl  ÚEmptyrX   r?   rn  ro  rp  r   r   )r@   r   re  rf  r  r­   ru  r   r   r   Útest_getÖ  sF    þ


z_TestQueue.test_getc                 C   s   t ddƒD ]}| |¡ q
d S )NrÂ   r  )r×   rh   )r‡   r   rÚ   r   r   r   Ú
_test_fork  s    z_TestQueue._test_forkc                 C   sŽ   |   ¡ }tdƒD ]}| |¡ qt t¡ | j| j|fd}d|_| 	¡  tdƒD ]}|  
| ¡ |¡ qR|  tj|jd¡ | ¡  t|ƒ d S )NrÂ   r‰   Tr  F)r   r×   rh   rD   r¢   rÔ   r   rx  ru   rŽ   rZ   r­   rä   rl  rv  r   r   )r@   r   rÚ   r“   r   r   r   Ú	test_fork  s    
z_TestQueue.test_forkc                 C   s¬   |   ¡ }z|  | ¡ d¡ W n tk
r:   |  d¡ Y nX | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ t|ƒ d S )Nr   zqsize method not implementedrR   rf   r£   )r   rZ   r^  rY   ro   rh   r­   r   ©r@   ri   r   r   r   Ú
test_qsize/  s    

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )r:  r­   rD   r¢   rÔ   Ú	task_done)r‡   ri   Úobjr   r   r   Ú_test_task_done?  s    
z_TestQueue._test_task_donec                    sŠ   ˆ  ¡ ‰ ‡ ‡fdd„tdƒD ƒ}|D ]}d|_| ¡  q$tdƒD ]}ˆ  |¡ q@ˆ  ¡  |D ]}ˆ  d ¡ q\|D ]}| ¡  qptˆ ƒ d S )Nc                    s   g | ]}ˆj ˆjˆ fd ‘qS r  )r   r~  rö   ©r   r@   r   r   rø   H  s   ÿz-_TestQueue.test_task_done.<locals>.<listcomp>ri  TrÂ   )ÚJoinableQueuer×   ru   rŽ   rh   r   r   )r@   Úworkersr“   rÚ   r   r  r   Útest_task_doneE  s    ÿ

z_TestQueue.test_task_donec              
   C   sŒ   t j ¡ x d}t|d dƒ}| d¡ W 5 Q R X t j t ¡ ¡4 zt|ƒ W n  t	j
k
rr   |  d¡ Y nX W 5 Q R X W 5 Q R X d S )NZimported_by_an_imported_modulez.pyrO  a  if 1:
                    import multiprocess as 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  r   Ztemp_cwdrI  ÚwriteZDirsOnSysPathr6   ÚgetcwdÚ
__import__rl  rv  Úfail)r@   Úmodule_namerL  r   r   r   Útest_no_import_lock_contention[  s    
z)_TestQueue.test_no_import_lock_contentionc                 C   sX   t  ¡ }ttdtjƒƒ }|  tj|jdd¡ ttdtjƒƒ | }|  |d¡ t	|ƒ d S )NrB   Tgš™™™™™É?r%   )
r   r   rC   rD   rä   rl  rv  r­   ÚassertGreaterEqualr   )r@   ri   rŽ   Údeltar   r   r   Útest_timeoutp  s    z_TestQueue.test_timeoutc              	   C   s  | j dkr|  d | j ¡¡ G dd„ dtƒ}tj ¡ > |  ¡ }| |ƒ ¡ | d¡ |  	|j
td¡ t|ƒ W 5 Q R X tj ¡ z | jdd}| |ƒ ¡ | d¡ z|  | ¡ d¡ W n tk
rÐ   Y nX |  	|j
d	d¡ |  	| ¡ ¡ t|ƒ W 5 Q R X d S )
NrN   rm   c                   @   s   e Zd Zdd„ ZdS )zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec                 S   s   t ‚d S r   )r8   rc   r   r   r   r^     s    zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N©rJ   rK   rL   r^   r   r   r   r   ÚNotSerializable€  s   r  Tr   rR   rh  ç      ð?)rn   ro   rp   Úobjectr  r   Úcaptured_stderrr   rh   rs   r­   r   r   rZ   r^  rY   r]  )r@   r  ri   r   r   r   Ú"test_queue_feeder_donot_stop_onexc{  s(    


z-_TestQueue.test_queue_feeder_donot_stop_onexcc              	      s°   | j dkr|  d | j ¡¡ G dd„ dtƒ‰ G ‡ fdd„dtjjƒ}ˆ ƒ }tj 	¡ : |t 
¡ d}| |¡ | d¡ |  |jd	d
¡ W 5 Q R X |  |j¡ |  |j¡ d S )NrN   rm   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc                 S   s   d| _ d| _d S ©NF)Úreduce_was_calledÚ on_queue_feeder_error_was_calledrc   r   r   r   rA   ¤  s    zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s   d| _ t‚d S ©NT)r“  r8   rc   r   r   r   r^   ¨  s    zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rJ   rK   rL   Ú__doc__rA   r^   r   r   r   r   r  ¢  s   r  c                       s    e Zd ZdZe‡ fdd„ƒZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                    s   t | tƒrt |ˆ ƒrd|_d S r•  )r   r8   r”  )r®   r}  ©r  r   r   Ú_on_queue_feeder_error®  s    
ÿz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rJ   rK   rL   r–  Ústaticmethodr˜  r   r—  r   r   Ú	SafeQueue¬  s   rš  )ÚctxTrŽ  r   )rn   ro   rp   r  r   r   r   r  r   r  Úget_contextrh   rs   r­   r“  r”  )r@   rš  Znot_serializable_objri   r   r—  r   Ú'test_queue_feeder_on_queue_feeder_errorœ  s    



z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc              
   C   sd   t  ¡ t  ¡ fD ]N}| ¡  |  td¡ | d¡ W 5 Q R X |  td¡ | ¡  W 5 Q R X qd S )Nz	is closedÚfoo)r   r   r€  r   ÚassertRaisesRegexr9   rh   r­   rz  r   r   r   Ú$test_closed_queue_put_get_exceptionsÂ  s    z/_TestQueue.test_closed_queue_put_get_exceptionsN)rJ   rK   rL   r3  rg  rr  rt  rw  rx  ry  r{  r~  r‚  rˆ  r‹  r‘  r  r   r   r   r   r   rc  ‡  s$   
;
	5

!&rc  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	_TestLockc                 C   sR   |   ¡ }|  | ¡ d¡ |  | d¡d¡ |  | ¡ d ¡ |  ttjf|j¡ d S )NTF)ÚLockrZ   ÚacquireÚreleaserä   r9   r°   ÚThreadError©r@   Úlockr   r   r   Ú	test_lockÏ  s
    z_TestLock.test_lockc                 C   s~   |   ¡ }|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d ¡ |  | ¡ d ¡ |  | ¡ d ¡ |  ttf|j¡ d S r•  )ÚRLockrZ   r£  r¤  rä   rg   r¾   r¦  r   r   r   Ú
test_rlockÖ  s    z_TestLock.test_rlockc              	   C   s   |   ¡  W 5 Q R X d S r   )r¢  rc   r   r   r   Útest_lock_contextà  s    
z_TestLock.test_lock_contextN)rJ   rK   rL   r¨  rª  r«  r   r   r   r   r¡  Í  s   
r¡  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_TestSemaphorec                 C   sª   |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | d¡d¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ d S )Nr£   TrR   r   F)r]   ra   rZ   r£  r¤  ©r@   Úsemr   r   r   Ú_test_semaphoreç  s    z_TestSemaphore._test_semaphorec                 C   sT   |   d¡}|  |¡ |  | ¡ d ¡ |  dt|¡ |  | ¡ d ¡ |  dt|¡ d S )Nr£   rX  ri  )Ú	Semaphorer¯  rZ   r¤  r]   ra   r­  r   r   r   Útest_semaphoreô  s    

z_TestSemaphore.test_semaphorec                 C   s   |   d¡}|  |¡ d S ©Nr£   )ÚBoundedSemaphorer¯  r­  r   r   r   Útest_bounded_semaphoreü  s    
z%_TestSemaphore.test_bounded_semaphorec                 C   sÒ   | j dkr|  d | j ¡¡ |  d¡}t|jƒ}|  |dƒd¡ |  |jd¡ |  |dd ƒd¡ |  |jd¡ |  |dt	ƒd¡ |  |jd¡ |  |dt
ƒd¡ |  |jt
¡ |  |tdd¡ |  |jt¡ d S )NrN   rm   r   Fr*   Tr   )rn   ro   rp   r°  r=   r£  rZ   rX   r?   rn  ro  rp  )r@   r®  r£  r   r   r   r‹    s    


z_TestSemaphore.test_timeoutN)rJ   rK   rL   r¯  r±  r´  r‹  r   r   r   r   r¬  å  s   r¬  c                   @   sž   e Zd Zeddd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
edd„ ƒZe ed¡dd„ ƒZedd„ ƒZe ed¡dd„ ƒZedd„ ƒZdd„ ZdS )Ú_TestConditionNc                 C   s.   |  ¡  | ¡  | |¡ | ¡  | ¡  d S r   )r£  r¤  r)   )r‡   ÚcondÚsleepingÚwokenr   r   r   r   rL    s
    
z_TestCondition.fc              	   C   sb   t dƒD ]>}z|ƒ |krW  qHW n tk
r:   Y  qHY nX t t¡ qt t¡ |  ||¡ d S ©NrÂ   )r×   rY   rD   r¢   rÔ   r]   )r@   r>   r[   rÚ   r   r   r   ÚassertReachesEventually%  s    


z&_TestCondition.assertReachesEventuallyc                 C   sZ   | j dkrVz6|j ¡ |j ¡  }|  |d¡ |  |j ¡ d¡ W n tk
rT   Y nX d S )NrN   r   )rn   Z_sleeping_countra   Z_woken_countrZ   Z_wait_semaphorerY   )r@   r¶  Zsleepersr   r   r   Úcheck_invariant0  s    
ÿz_TestCondition.check_invariantc                 C   s  |   ¡ }|  d¡}|  d¡}| j| j|||fd}d|_| ¡  |  |j¡ tj	| j|||fd}d|_| ¡  |  |j¡ | 
¡  | 
¡  t t¡ |  dt|¡ | 
¡  | ¡  | ¡  t t¡ |  dt|¡ | 
¡  | ¡  | ¡  t t¡ |  dt|¡ |  |¡ | ¡  d S )Nr   r‰   TrR   r£   )Ú	Conditionr°  r   rL  ru   rŽ   ræ   r   r°   r  r£  rD   r¢   rÔ   r]   ra   Únotifyr¤  r»  )r@   r¶  r·  r¸  r“   r   r   r   Útest_notify;  s6    





z_TestCondition.test_notifyc                    sª  |   ¡ }|  d¡}|  d¡‰ tdƒD ]h}| j| j||ˆ tfd}d|_| ¡  |  |j	¡ t
j| j||ˆ tfd}d|_| ¡  |  |j	¡ q$tdƒD ]}| ¡  q–tdƒD ]}ˆ  ¡  q¬|  dtˆ ¡ |  |¡ tdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j	¡ t
j| j||ˆ fd}d|_| ¡  |  |j	¡ qÚtdƒD ]}| ¡  qHt t¡ |  dtˆ ¡ | ¡  | ¡  | ¡  |  ‡ fdd„d¡ |  |¡ d S )Nr   rX  r‰   Trd  c                      s   t ˆ ƒS r   ©ra   r   ©r¸  r   r   Ú<lambda>¡  ó    z0_TestCondition.test_notify_all.<locals>.<lambda>)r¼  r°  r×   r   rL  rn  ru   rŽ   ræ   r   r°   r  r£  r]   ra   r»  rD   r¢   rÔ   Ú
notify_allr¤  rº  ©r@   r¶  r·  rÚ   r“   rG   r   rÀ  r   Útest_notify_allh  sP    


ÿ
ÿ



z_TestCondition.test_notify_allc                    sP  |   ¡ }|  d¡}|  d¡‰ tdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j¡ t	j
| j||ˆ fd}d|_| ¡  |  |j¡ q$tdƒD ]}| ¡  q’t t¡ |  dtˆ ¡ | ¡  |jdd | ¡  |  ‡ fdd	„d¡ | ¡  |jd
d | ¡  |  ‡ fdd	„d¡ | ¡  |jdd | ¡  |  dtˆ ¡ |  |¡ d S )Nr   rX  r‰   Trd  r£   )Únc                      s   t ˆ ƒS r   r¿  r   rÀ  r   r   rÁ  Å  rÂ  z._TestCondition.test_notify_n.<locals>.<lambda>ri  c                      s   t ˆ ƒS r   r¿  r   rÀ  r   r   rÁ  Ì  rÂ  )r¼  r°  r×   r   rL  ru   rŽ   ræ   r   r°   r  r£  rD   r¢   rÔ   r]   ra   r½  r¤  rº  r»  rÄ  r   rÀ  r   Útest_notify_n¦  s:    



z_TestCondition.test_notify_nc                 C   sH   |   ¡ }t|jƒ}| ¡  |tƒ}| ¡  |  |d¡ |  |jt¡ d S r’  )	r¼  r=   r)   r£  rn  r¤  rZ   rX   r?   )r@   r¶  r)   r\   r   r   r   r‹  Ø  s    
z_TestCondition.test_timeoutc              	      sL   |> dˆ _ | ¡  | ‡ fdd„¡}|r4ˆ j dkr>t d¡ W 5 Q R X d S )Nr   c                      s
   ˆ j dkS ©Nri  ©r[   r   ©Ústater   r   rÁ  æ  rÂ  z0_TestCondition._test_waitfor_f.<locals>.<lambda>ri  rR   )r[   r½  Úwait_forré   rê   )r‡   r¶  rË  rÝ   r   rÊ  r   Ú_test_waitfor_fá  s    z_TestCondition._test_waitfor_fzneeds sharedctypesc              
      sÈ   |   ¡ }|  dd¡‰ | j| j|ˆ fd}d|_| ¡  |0 | ‡ fdd„¡}|  |¡ |  ˆ j	d¡ W 5 Q R X t
dƒD ]4}t d	¡ | ˆ  j	d
7  _	| ¡  W 5 Q R X qxt|ƒ |  |jd¡ d S )NrÚ   r5   r‰   Tc                      s
   ˆ j dkS ©Nr   rÉ  r   rÊ  r   r   rÁ  õ  rÂ  z-_TestCondition.test_waitfor.<locals>.<lambda>r   ri  rõ   rR   )r¼  r   r   rÍ  ru   rŽ   rÌ  rs   rZ   r[   r×   rD   r¢   r½  r   r{   )r@   r¶  r“   rÝ   rÚ   r   rÊ  r   Útest_waitforê  s     

z_TestCondition.test_waitforc              	      s„   |  ¡  |n d}ttdtjƒƒ }|j‡ fdd„|d}ttdtjƒƒ | }|sv|d |  k rl|d k rvn nd|_W 5 Q R X d S )	Nr%   rB   c                      s
   ˆ j dkS rÈ  rÉ  r   rÊ  r   r   rÁ    rÂ  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r   g333333ã?rà   T)r¤  rC   rD   rÌ  r[   )r‡   r¶  rË  Úsuccessr®  rÞ   ÚdtrÝ   r   rÊ  r   Ú_test_waitfor_timeout_f  s    $z&_TestCondition._test_waitfor_timeout_fc              
   C   s¸   |   ¡ }|  dd¡}|  dd¡}|  d¡}| j| j||||fd}d|_| ¡  |  |jt	d¡ t
dƒD ]4}t d¡ | | jd	7  _| ¡  W 5 Q R X qjt|ƒ |  |j¡ d S )
NrÚ   r   Fr‰   Tr   rX  rõ   rR   )r¼  r   r°  r   rÒ  ru   rŽ   rs   r£  r   r×   rD   r¢   r[   r½  r   )r@   r¶  rË  rÐ  r®  r“   rÚ   r   r   r   Útest_waitfor_timeout  s"    

ÿ
z#_TestCondition.test_waitfor_timeoutc              	   C   s<   | |  ¡  W 5 Q R X t d¡ |d k	r8t |tj¡ d S rQ   )r½  rD   r¢   r6   rÍ   rÄ   r0  )r‡   rj   r†   r   r   r   Ú_test_wait_result&  s
    
z _TestCondition._test_wait_resultc              	   C   sª   t | tƒrtjdkrt ¡ }nd }|  ¡ }|r |  | d¡¡ |  | d¡¡ | j	| j
||fd}| ¡  |  | d¡¡ |d k	r”|  t|jd¡ | ¡  W 5 Q R X d S )Nr'   r   r%   r‰   rš   )r   ÚProcessesMixinré   rý   r6   rz   r¼  rƒ   r)   r   rÔ  rŽ   rs   rä   ÚKeyboardInterruptr   )r@   r†   rj   r“   r   r   r   Útest_wait_result.  s    
z_TestCondition.test_wait_result)N)rJ   rK   rL   r3  rL  rº  r»  r¾  rÅ  rÇ  r‹  rÍ  r:   r4  ÚHAS_SHAREDCTYPESrÏ  rÒ  rÓ  rÔ  r×  r   r   r   r   rµ    s&   ->2	






rµ  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú
_TestEventc                 C   s   t  t¡ | ¡  d S r   )rD   r¢   ro  rç   rá   r   r   r   Ú_test_eventE  s    
z_TestEvent._test_eventc                 C   sò   |   ¡ }t|jƒ}|  | ¡ d¡ |  |dƒd¡ |  |jd¡ |  |tƒd¡ |  |jt¡ | ¡  |  | ¡ d¡ |  |ƒ d¡ |  |jd¡ |  |tƒd¡ |  |jd¡ | 	¡  | j
| j|fd}d|_| ¡  |  |ƒ d¡ | ¡  d S )NFr*   Tr‰   )r§   r=   r)   rZ   r  rX   r?   rn  rç   r  r   rÚ  ru   rŽ   r   )r@   râ   r)   r“   r   r   r   Ú
test_eventJ  s&    
z_TestEvent.test_eventN)rJ   rK   rL   r3  rÚ  rÛ  r   r   r   r   rÙ  C  s   
rÙ  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
_DummyListc                 C   s6   t j t d¡¡}t  ¡ }|  ||f¡ d| jd< d S )NrÚ   r   )r   ÚheapÚBufferWrapperÚstructÚcalcsizer¢  Ú__setstate__Ú
_lengthbuf)r@   Úwrapperr§  r   r   r   rA   x  s    z_DummyList.__init__c                 C   s"   |\| _ | _| j  ¡  d¡| _d S )NrÚ   )Ú_wrapperÚ_lockZcreate_memoryviewÚcastrâ  )r@   rË  r   r   r   rá  ~  s    z_DummyList.__setstate__c                 C   s   | j | jfS r   )rä  rå  rc   r   r   r   Ú__getstate__‚  s    z_DummyList.__getstate__c              	   C   s(   | j  | jd  d7  < W 5 Q R X d S ©Nr   rR   ©rå  râ  )r@   Ú_r   r   r   rÜ   …  s    z_DummyList.appendc              
   C   s(   | j  | jd W  5 Q R £ S Q R X d S rÎ  ré  rc   r   r   r   Ú__len__‰  s    z_DummyList.__len__N)rJ   rK   rL   rA   rá  rç  rÜ   rë  r   r   r   r   rÜ  v  s
   rÜ  c                   C   s   t  d¡ d S )Nrõ   r·   r   r   r   r   Ú_wait  s    rì  c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚBunchz
    A bunch of threads.
    Fc           
      C   s’   || _ || _|| _| ¡ | _| ¡ | _| ¡ | _|s>| j ¡  g }t	|ƒD ]*}|j
| jd}d|_| ¡  | |¡ qJdd„ }	t | |	|¡| _dS )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                 S   s   | D ]}|  ¡  qd S r   )r   )rP   r“   r   r   r   Úfinalize¬  s    z Bunch.__init__.<locals>.finalizeN)rL  rE   rÆ  Ú	DummyListÚstartedÚfinishedr§   Ú	_can_exitrç   r×   r   Útaskru   rŽ   rÜ   rí   rî  Ú
_finalizer)
r@   Ú	namespacerL  rE   rÆ  Zwait_before_exitrP   rÚ   r“   rî  r   r   r   rA   –  s     



zBunch.__init__c              	   C   sR   t  ¡ }| j |¡ z| j	| j
Ž  W 5 | j |¡ | j d¡ | j ¡ sLt‚X d S )Né   )r6   rz   rð  rÜ   rñ  rò  r)   r  rg   rL  rE   ©r@   r†   r   r   r   ró  ²  s    z
Bunch.taskc                 C   s   t | jƒ| jk rtƒ  q d S r   )rx   rð  rÆ  rì  rc   r   r   r   Úwait_for_started¼  s    zBunch.wait_for_startedc                 C   s   t | jƒ| jk rtƒ  q d S r   )rx   rñ  rÆ  rì  rc   r   r   r   Úwait_for_finishedÀ  s    zBunch.wait_for_finishedc                 C   s   | j  ¡  d S r   )rò  rç   rc   r   r   r   Ú	do_finishÄ  s    zBunch.do_finishc                 C   s   |   ¡  d S r   )rô  rc   r   r   r   r   Ç  s    zBunch.closeN)F)
rJ   rK   rL   r–  rA   ró  rø  rù  rú  r   r   r   r   r   rí  ’  s   

rí  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
AppendTruec                 C   s
   || _ d S r   )r}  )r@   r}  r   r   r   rA   Ì  s    zAppendTrue.__init__c                 C   s   | j  d¡ d S r•  )r}  rÜ   rc   r   r   r   rH   Î  s    zAppendTrue.__call__NrI   r   r   r   r   rû  Ë  s   rû  c                   @   sþ   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	e
dd„ ƒZd6dd„Zdd„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdd„ Ze
dd „ ƒZd!d"„ Ze
d#d$„ ƒZd%d&„ Ze
d'd(„ ƒZd)d*„ Ze
d+d,„ ƒZd-d.„ Zd/d0„ Ze
d1d2„ ƒZd3d4„ Zd5S )7Ú_TestBarrierz$
    Tests for Barrier objects.
    rf   g      >@c                 C   s   | j | j| jd| _d S r   )ÚBarrierrÿ   ÚdefaultTimeoutÚbarrierrc   r   r   r   ÚsetUpÙ  s    z_TestBarrier.setUpc                 C   s   | j  ¡  d | _ d S r   )rÿ  Úabortrc   r   r   r   ÚtearDownÜ  s    
z_TestBarrier.tearDownc                 C   s,   | j dkrg S | j dkr"| j ¡ S tƒ S d S )NrP   rO   )rn   rO   r«   rÜ  rc   r   r   r   rï  à  s
    


z_TestBarrier.DummyListc                 C   s8   t | ||| jd ƒ}z||Ž  | ¡  W 5 | ¡  X d S rQ   )rí  rÿ   r   rù  )r@   rL  rE   rW   r   r   r   Úrun_threadsè  s
    z_TestBarrier.run_threadsc                 C   s¸   |j }|| jkst‚t|ƒD ]d}|d  d¡ t|d ƒ|| ksFt‚| ¡  |d  d¡ t|d ƒ|d | ksxt‚| ¡  qz|jdks’t‚W n tk
r¨   Y nX |j	r´t‚d S )Nr   TrR   )
Úpartiesrÿ   rg   r×   rÜ   rx   r)   Ú	n_waitingrY   Úbroken)r‡   rÿ  ÚresultsrÆ  ÚmrÚ   r   r   r   Ú	multipassð  s    
z_TestBarrier.multipassrR   c                 C   s*   |   ¡ |   ¡ g}|  | j| j||f¡ dS )z;
        Test that a barrier is passed in lockstep
        N)rï  r  r	  rÿ  )r@   Úpassesr  r   r   r   Útest_barrier  s    z_TestBarrier.test_barrierc                 C   s
   |   d¡S )zC
        Test that a barrier works for 10 consecutive runs
        rÂ   )r  rc   r   r   r   Útest_barrier_10  s    z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r)   rh   )r‡   rÿ  r   r\   r   r   r   Ú_test_wait_return_f  s    z _TestBarrier._test_wait_return_fc                    sR   |   ¡ ‰ |  | j| jˆ f¡ ‡ fdd„t| jƒD ƒ}|  | d¡d¡ tˆ ƒ dS )z9
        test the return value from barrier.wait
        c                    s   g | ]}ˆ   ¡ ‘qS r   r	  rö   r   r   r   rø     s     z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rR   N)	r   r  r  rÿ  r×   rÿ   rZ   Úcountr   ©r@   r  r   r   r   Útest_wait_return  s
    z_TestBarrier.test_wait_returnc                 C   s   |  ¡  t|ƒdkrt‚d S rQ   )r)   rx   r¾   )r‡   rÿ  r  r   r   r   Ú_test_action_f  s    z_TestBarrier._test_action_fc                 C   sB   |   ¡ }| j| jt|ƒd}|  | j||f¡ |  t|ƒd¡ dS )z,
        Test the 'action' callback
        )r  rR   N)rï  rý  rÿ   rû  r  r  rZ   rx   )r@   r  rÿ  r   r   r   Útest_action#  s    z_TestBarrier.test_actionc                 C   sp   z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n: tjk
rP   | d¡ Y n tk
rj   | ¡  Y nX d S ©Nr£   T)r)   rÿ   r¾   rÜ   r°   ÚBrokenBarrierErrorr  )r‡   rÿ  Úresults1Úresults2rÚ   r   r   r   Ú_test_abort_f,  s    z_TestBarrier._test_abort_fc                 C   s^   |   ¡ }|   ¡ }|  | j| j||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  | jj¡ dS )zK
        Test that an abort will put the barrier in a broken state
        r   rR   N)	rï  r  r  rÿ  rZ   rx   rÿ   rs   r  )r@   r  r  r   r   r   Ú
test_abort9  s    
ÿz_TestBarrier.test_abortc                 C   sŠ   |  ¡ }|| jd kr<|j| jd k r2t d¡ q| ¡  n8z|  ¡  | d¡ W n  tjk
rr   | d¡ Y nX |  ¡  | d¡ d S )Nr£   rR   rù   T)	r)   rÿ   r  rD   r¢   ÚresetrÜ   r°   r  )r‡   rÿ  r  r  Úresults3rÚ   r   r   r   Ú_test_reset_fE  s    
z_TestBarrier._test_reset_fc                 C   sl   |   ¡ }|   ¡ }|   ¡ }|  | j| j|||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   rR   N)rï  r  r  rÿ  rZ   rx   rÿ   )r@   r  r  r  r   r   r   Ú
test_resetW  s    ÿz_TestBarrier.test_resetc                 C   s¤   z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n: tjk
rP   | d¡ Y n tk
rj   | ¡  Y nX |  ¡ | jd kr†| ¡  |  ¡  |  ¡  | d¡ d S r  )r)   rÿ   r¾   rÜ   r°   r  r  r  )r‡   rÿ  Úbarrier2r  r  r  rÚ   r   r   r   Ú_test_abort_and_reset_fd  s    z$_TestBarrier._test_abort_and_reset_fc                 C   sz   |   ¡ }|   ¡ }|   ¡ }|  | j¡}|  | j| j||||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ dS )zF
        Test that a barrier can be reset after being broken.
        r   rR   N)rï  rý  rÿ   r  r  rÿ  rZ   rx   )r@   r  r  r  r  r   r   r   Útest_abort_and_resetz  s    ÿz!_TestBarrier.test_abort_and_resetc                 C   sT   |  ¡ }|| jd kr t d¡ z|  d¡ W n  tjk
rN   | d¡ Y nX d S )Nr£   rŽ  r  T)r)   rÿ   rD   r¢   r°   r  rÜ   ©r‡   rÿ  r  rÚ   r   r   r   Ú_test_timeout_f‰  s    
z_TestBarrier._test_timeout_fc                 C   s4   |   ¡ }|  | j| j|f¡ |  t|ƒ| jj¡ dS )z$
        Test wait(timeout)
        N)rï  r  r!  rÿ  rZ   rx   r  r  r   r   r   r‹  ”  s    z_TestBarrier.test_timeoutc                 C   sV   |  | j¡}|| jd kr$t d¡ z|  ¡  W n  tjk
rP   | d¡ Y nX d S )Nr£   rŽ  T)r)   rþ  rÿ   rD   r¢   r°   r  rÜ   r   r   r   r   Ú_test_default_timeout_fœ  s    
z$_TestBarrier._test_default_timeout_fc                 C   s@   | j | jdd}|  ¡ }|  | j||f¡ |  t|ƒ|j¡ dS )z4
        Test the barrier's default timeout
        r  r   N)rý  rÿ   rï  r  r"  rZ   rx   r  )r@   rÿ  r  r   r   r   Útest_default_timeout§  s    z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rQ   )rý  r)   )r@   rW   r   r   r   Útest_single_thread°  s    
z_TestBarrier.test_single_threadc              
   C   s4   t |ƒD ]&}| ¡  | | |¡ W 5 Q R X qd S r   )r×   r)   r˜   )r‡   rÿ  r
  Úconnr§  rÚ   r   r   r   Ú_test_thousand_fµ  s    z_TestBarrier._test_thousand_fc                 C   s¦   | j dkr|  d | j ¡¡ d}|  ¡ }|  d¡\}}t| jƒD ]2}| j| j| j	|||fd}| 
¡  |  |j¡ q@t|ƒD ]$}t| jƒD ]}|  | ¡ |¡ qŠq|d S )NrO   rm   éè  Fr‰   )rn   ro   rp   r¢  rŒ   r×   rÿ   r   r&  rÿ  rŽ   ræ   r   rZ   r   )r@   r
  r§  r%  r8  Újr“   rÚ   r   r   r   Útest_thousand¼  s    
ÿz_TestBarrier.test_thousandN)rR   )rJ   rK   rL   r–  rÿ   rþ  r   r  rï  r  r3  r	  r  r  r  r  r  r  r  r  r  r  r  r  r!  r‹  r"  r#  r$  r&  r)  r   r   r   r   rü  Ò  sH   




	






	
rü  c                   @   sZ   e Zd ZdZdddddedƒedƒfgZd	d
„ Zedd„ ƒZddd„Z	dd„ Z
dd„ ZdS )Ú
_TestValuerB  )rÚ   i÷  iª^  )Údg      @g      À)Úhiÿÿÿéê   )ri   ì        ì        rj   ÚxÚyc                 C   s   t s|  d¡ d S ©Nz"requires multiprocess.sharedctypes©rØ  ro   rc   r   r   r   r   Ü  s    z_TestValue.setUpc                 C   s$   t || jƒD ]\}}|d |_qd S r²  )ÚzipÚcodes_valuesr[   )r‡   ÚvaluesÚsvÚcvr   r   r   r‚   à  s    z_TestValue._testFc                    sª   |r‡ fdd„ˆ j D ƒ}n‡ fdd„ˆ j D ƒ}t|ˆ j ƒD ]\}}ˆ  |j|d ¡ q:ˆ jˆ j|fd}d|_| ¡  | ¡  t|ˆ j ƒD ]\}}ˆ  |j|d ¡ qŠd S )Nc                    s   g | ]\}}}ˆ   ||¡‘qS r   )ÚRawValue©r÷   Úcoder[   rê  rc   r   r   rø   è  s   ÿz)_TestValue.test_value.<locals>.<listcomp>c                    s   g | ]\}}}ˆ   ||¡‘qS r   )r   r:  rc   r   r   rø   ë  s   ÿrR   r‰   Tr£   )	r5  r4  rZ   r[   r   r‚   ru   rŽ   r   )r@   Úrawr6  r7  r8  r  r   rc   r   Ú
test_valueæ  s    
ÿ
ÿz_TestValue.test_valuec                 C   s   | j dd d S ©NT)r<  )r=  rc   r   r   r   Útest_rawvalueù  s    z_TestValue.test_rawvaluec                 C   sæ   |   dd¡}| ¡ }| ¡ }| j ddd d}| ¡ }| ¡ }|  ¡ }| j dd|d}| ¡ }	| ¡ }
|  ||	¡ | j dddd}|  t|dƒ¡ |  t|dƒ¡ | jt| j dddd |  	dd¡}|  t|dƒ¡ |  t|dƒ¡ d S )NrÚ   rf   ©r§  FÚget_lockÚget_objZnavalue)
r   rA  rB  r¢  rZ   rƒ   rÃ   rä   r8   r9  )r@   Zval1Úlock1Úobj1Zval2Úlock2Úobj2r§  Zval3Úlock3Úobj3Úarr4Úarr5r   r   r   Útest_getobj_getlockü  s$    z_TestValue.test_getobj_getlockN)F)rJ   rK   rL   r_   r
   r5  r   r3  r‚   r=  r?  rK  r   r   r   r   r*  Ð  s   û

r*  c                   @   s~   e Zd ZdZedd„ ƒZe edkd¡ddd„ƒZ	e edkd¡d	d
„ ƒZ
e edkd¡dd„ ƒZe edkd¡dd„ ƒZdS )Ú
_TestArrayrB  c                 C   s0   t dt|ƒƒD ]}||  ||d  7  < qd S rQ   )r×   rx   )r‡   ÚseqrÚ   r   r   r   rL    s    z_TestArray.fNzrequires _ctypesFc              
   C   s  ddddddddd	d
g
}|r*|   d|¡}n|  d|¡}|  t|ƒt|ƒ¡ |  |d |d ¡ |  t|dd… ƒt|dd… ƒ¡ t dddddg¡ |dd…< |dd…< |  t|d d … ƒ|¡ |  |¡ | j| j|fd}d|_| 	¡  | 
¡  |  t|d d … ƒ|¡ d S )Ni¨  ir  i¦  i5  é–   éé   i$  iÖ  iÊ  i?  rÚ   rX  r£   rj  rR   ri  rY  r‰   T)ÚRawArrayÚArrayrZ   rx   r«   ÚarrayrL  r   ru   rŽ   r   )r@   r<  rM  Úarrr“   r   r   r   Ú
test_array  s    $(
z_TestArray.test_arrayc                 C   sr   d}t dƒD ]`}|  d|¡}|  t|ƒ|¡ |  t|ƒdg| ¡ t dƒ|d d …< |  t|ƒtt dƒƒ¡ ~qd S )NrÂ   rX  rÚ   r   )r×   rQ  rZ   rx   r«   )r@   Úsizerê  rS  r   r   r   Útest_array_from_size8  s    z_TestArray.test_array_from_sizec                 C   s   | j dd d S r>  )rT  rc   r   r   r   Útest_rawarrayG  s    z_TestArray.test_rawarrayc                 C   s
  |   dttdƒƒ¡}| ¡ }| ¡ }| j dttdƒƒd d}| ¡ }| ¡ }|  ¡ }| j dttdƒƒ|d}| ¡ }	| ¡ }
|  ||	¡ | j dtdƒdd}|  t|dƒ¡ |  t|dƒ¡ | j	t
| j dtdƒdd |  dtdƒ¡}|  t|dƒ¡ |  t|dƒ¡ d S )NrÚ   rÂ   r@  FrA  rB  Znotalock)rQ  r«   r×   rA  rB  r¢  rZ   rƒ   rÃ   rä   r8   rP  )r@   Zarr1rC  rD  Zarr2rE  rF  r§  Zarr3rG  rH  rI  rJ  r   r   r   Útest_getobj_getlock_objK  s.       ÿz"_TestArray.test_getobj_getlock_obj)F)rJ   rK   rL   r_   r3  rL  r:   r6  r1   rT  rV  rW  rX  r   r   r   r   rL    s   


rL  c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú_TestContainers©rO   c                 C   s¶  |   t tdƒƒ¡}|  |d d … t tdƒƒ¡ |   ¡ }|  |d d … g ¡ | t tdƒƒ¡ |  |d d … t tdƒƒ¡ |  |d d¡ |  |dd… dddg¡ |d9 }|  |d d … ddddddddddg
¡ |  |ddg ddddddddddddg¡ |  |d d … t tdƒƒ¡ ||g}|   |¡}|  d	d
„ |D ƒddddddddddg
ddddddddddg
g¡ |   |g¡}| d¡ |  |d d d … dddddddddddg¡ d S )NrÂ   rf   r£   rX  ri  r   rR   rd  c                 S   s   g | ]}|d d … ‘qS r   r   )r÷   Úelementr   r   r   rø   „  s     z-_TestContainers.test_list.<locals>.<listcomp>rj  rY  é	   r¥   )r«   r×   rZ   ÚextendrÜ   )r@   rV   rW   r+  r®   rL  r   r   r   Ú	test_listm  s*    (,
.þ
z_TestContainers.test_listc                 C   sf   |   t tdƒƒ¡}t|ƒ}|  t |ƒt tdƒƒ¡ |  t |ƒg ¡ t|ƒ}d|d< |  t|ƒd¡ d S )NrÂ   r¶   r   )r«   r×   r:  rZ   Únext)r@   rV   Úitr   r   r   Útest_list_iterŒ  s    z_TestContainers.test_list_iterc                    sþ   ˆ   ‡ fdd„tdƒD ƒ¡}ˆ  dd„ |D ƒdddggd ¡ d|d d	< ˆ  |d d d … dddg¡ tddƒD ]"}ˆ  || d d … dddg¡ qrˆ  |d  ¡ d¡ ˆ  t|d ƒd¡ tdddƒD ]}ˆ  t|| ƒd¡ qÊ~ˆ   ¡ }| |¡ ~d S )
Nc                    s   g | ]}ˆ   td ƒ¡‘qS )rX  )r«   r×   )r÷   Z_irc   r   r   rø   —  s     z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rX  c                 S   s   g | ]}|d d … ‘qS r   r   )r÷   Úinnerr   r   r   rø   ˜  s     r   rR   r£   é7   r5   )r«   r×   rZ   Úpoprx   rÜ   )r@   rV   rÚ   rW   r   rc   r   Útest_list_proxy_in_list–  s    " 
z'_TestContainers.test_list_proxy_in_listc                 C   sž   |   ¡ }ttddƒƒ}|D ]}t|ƒ||< q|  | ¡ t dd„ |D ƒƒ¡ |  t| ¡ ƒ|¡ |  t| ¡ ƒdd„ |D ƒ¡ |  t| 	¡ ƒdd„ |D ƒ¡ d S )NéA   éF   c                 s   s   | ]}|t |ƒfV  qd S r   ©Úchrrö   r   r   r   Ú	<genexpr>¯  s     z,_TestContainers.test_dict.<locals>.<genexpr>c                 S   s   g | ]}t |ƒ‘qS r   rh  rö   r   r   r   rø   ±  s     z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |ƒf‘qS r   rh  rö   r   r   r   rø   ²  s     )
Údictr«   r×   ri  rZ   r   ÚsortedÚkeysr6  r  )r@   r+  ÚindicesrÚ   r   r   r   Ú	test_dictª  s    z_TestContainers.test_dictc                 C   sv   |   ¡ }ttddƒƒ}|D ]}t|ƒ||< qt|ƒ}|  t|ƒ|¡ |  t|ƒg ¡ t|ƒ}| ¡  |  tt	|¡ d S )Nrf  rg  )
rk  r«   r×   ri  r:  rZ   r  rä   r¾   r_  )r@   r+  rn  rÚ   r`  r   r   r   Útest_dict_iter´  s    z_TestContainers.test_dict_iterc                 C   sî  | j ddd}| j ddd}| j ||d}|  |d d¡ |  |d	 d d¡ d
|d	 d< |  |d d
¡ |  |d	 d d
¡ d|d	 d< |  |d d¡ |  |d	 d d¡ ~~|  |d d d¡ d|d	 d< |  |d	 d d¡ |d }|d	 }d|d< |  |d d¡ |  |d	 d d¡ | ¡  |  t|ƒd¡ |  |d d¡ |  |d d¡ |  ||g¡}d|d d< |  |d d¡ |  |d d d¡ ~~|  |d d d¡ |  ddg|g¡}|  |d t¡ |  |d d d d¡ d S )Nr£   ri  )ÚferretsÚhamstersrÂ   rX  )ÚwaterÚfeed)ÚpetsÚsuppliesrs  rv  rf   Zblanketsrj  ru  rq  é   r   rr  rR   ZmarmotséX   éc   r5   rt  )rk  rZ   r  rx   r«   rv   )r@   ru  rv  r+  ÚlÚouterr   r   r   Útest_dict_proxy_nestedÁ  sF    z&_TestContainers.test_dict_proxy_nestedc                 C   sh   |   ¡ }d|_d|_d|_|  |j|jfd¡ |`|  t|ƒd¡ |  t|dƒ¡ |  t|dƒ ¡ d S )NÚBobÚBuilderZhidden)r}  r~  zNamespace(name='Bob')r"   Újob)Ú	Namespacer"   r  Z_hiddenrZ   r>  rs   rÃ   )r@   rÆ  r   r   r   Útest_namespaceï  s    z_TestContainers.test_namespaceN)rJ   rK   rL   r_   r^  ra  re  ro  rp  r|  r  r   r   r   r   rY  i  s   

.rY  r*   c                 C   s   t  |¡ | |  S r   r·   )r0  r)   r   r   r   Úsqrþ  s    
r‚  c                 C   s   | | S r   r   )r0  r1  r   r   r   Úmul	  s    rƒ  c                 C   s   t  | ¡ tdd ƒ‚d S )Nr0  i   )rD   r¢   r9   r(   r   r   r   Úraise_large_valuerror	  s    
r„  c                 C   s   | S r   r   ©r0  r   r   r   Úidentity		  s    r†  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCountedObjectr   c                 C   s   |  j d7  _ t | ¡S rQ   )Ún_instancesr  Ú__new__r¸   r   r   r   r‰  	  s    zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rQ   )rª   rˆ  rc   r   r   r   Ú__del__	  s    zCountedObject.__del__N)rJ   rK   rL   rˆ  r‰  rŠ  r   r   r   r   r‡  	  s   r‡  c                   @   s   e Zd ZdS )ÚSayWhenErrorN©rJ   rK   rL   r   r   r   r   r‹  	  s    r‹  c                 c   s8   |dkrt dƒ‚t| ƒD ]}||kr,t dƒ‚|V  qd S )Nr5   zSomebody said when)r‹  r×   )ÚtotalÚwhenrÚ   r   r   r   Úexception_throwing_generator	  s    r  c                       s(  e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zed+d,„ ƒZe d-d.¡d/d0„ ƒZed1d2„ ƒZe d-d.¡d3d4„ ƒZd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"‡  Z#S )=Ú	_TestPoolc                    s   t ƒ  ¡  |  d¡| _d S rÈ  )ÚsuperÚ
setUpClassÚPoolÚpoolr¸   ©Ú	__class__r   r   r’  #	  s    
z_TestPool.setUpClassc                    s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S r   )r”  rŸ   r   r‘  ÚtearDownClassr¸   r•  r   r   r—  (	  s    

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rf   rf   r   r0  rX  r…  )r”  ÚapplyrZ   r‚  )r@   Zpapplyr   r   r   Ú
test_apply/	  s    z_TestPool.test_applyc              	   C   sh   | j j}|  |tttdƒƒƒtttttdƒƒƒƒ¡ |  |tttdƒƒddtttttdƒƒƒƒ¡ d S )NrÂ   r¶   r  ©Ú	chunksize)r”  ÚmaprZ   r‚  r«   r×   )r@   Zpmapr   r   r   Útest_map4	  s
    ,ÿz_TestPool.test_mapc                 C   s€   | j j}tttdƒtdddƒƒƒ}|  |t|ƒtt t|¡ƒ¡ tttdƒtdddƒƒƒ}|  |t|ddtt t|¡ƒ¡ d S )NrÂ   r\  r5   r¶   ry  r  rš  )r”  Ústarmapr«   r4  r×   rZ   rƒ  Ú	itertools)r@   ZpsmapÚtuplesr   r   r   Útest_starmap:	  s    ÿÿz_TestPool.test_starmapc                 C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )Nr¶   ry  r5   )
r«   r4  r×   rZ   r”  Zstarmap_asyncrƒ  r­   rŸ  rž  )r@   r   r   r   r   Útest_starmap_asyncC	  s    ÿz_TestPool.test_starmap_asyncc              	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S r¹  )rZ   r”  Ú	map_asyncr‚  r«   r×   r­   rœ  rc   r   r   r   Útest_map_asyncH	  s    ÿz_TestPool.test_map_asyncc                 C   sš   | j dkr| j ¡ ng }| jjtdg|j|jd ¡  |  dt	|ƒ¡ |  dg|d ¡ | jjtdg|j|jd ¡  |  dt	|ƒ¡ |  
|d t¡ d S )NrO   Ú1)ÚcallbackÚerror_callbackrR   r   rV   r£   )rn   rO   r«   r”  r£  rÑ   rÜ   r)   rZ   rx   rv   r9   )r@   Z	call_argsr   r   r   Útest_map_async_callbacksL	  s    þ
þ
z"_TestPool.test_map_async_callbacksc              	   C   s\   | j dkr|  d | j ¡¡ G dd„ dtƒ}|  t¡ | j t|ƒ gd ¡ W 5 Q R X d S )NrP   rm   c                   @   s   e Zd Zdd„ ZdS )z*_TestPool.test_map_unplicklable.<locals>.Ac                 S   s   t dƒ‚d S )Nzcannot pickler½   rc   r   r   r   r^   ^	  s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__NrŒ  r   r   r   r   ÚA]	  s   r©  rÂ   )	rn   ro   rp   r  rä   r¾   r”  rœ  r‚  )r@   r©  r   r   r   Útest_map_unplicklableY	  s
    
z_TestPool.test_map_unplicklablec                 C   sD   z| j jtg ddjtd W n  tjk
r>   |  d¡ Y nX d S )NrR   rš  r   z2pool.map_async with chunksize stalled on null list)r”  r£  r‚  r­   rn  r   ÚTimeoutErrorr†  rc   r   r   r   Útest_map_chunksizec	  s    z_TestPool.test_map_chunksizec              	   C   s  | j dkr|  d | j ¡¡ |  t¡ | j ttddƒd¡ W 5 Q R X |  t¡ | j ttddƒd¡ W 5 Q R X |  t¡ | j ttddƒd¡ W 5 Q R X G dd„ dƒ}|  t¡ | j t|ƒ d¡ W 5 Q R X |  t¡ | j t|ƒ d¡ W 5 Q R X d S )	NrO   rm   rR   r5   rÂ   rX  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                 S   s   | S r   r   rc   r   r   r   Ú__iter__x	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c                 S   s   t ‚d S r   )r‹  rc   r   r   r   Ú__next__z	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c                 S   s   dS rQ   r   rc   r   r   r   rë  |	  s    zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rJ   rK   rL   r­  r®  rë  r   r   r   r   ÚSpecialIterablew	  s   r¯  )	rn   ro   rp   rä   r‹  r”  rœ  r‚  r  )r@   r¯  r   r   r   Ú"test_map_handle_iterable_exceptioni	  s    
   z,_TestPool.test_map_handle_iterable_exceptionc                 C   s<   | j  tdtf¡}t|jƒ}|  |ƒ d¡ |  |jt¡ d S )Nrj  é1   )	r”  Úapply_asyncr‚  rn  r=   r­   rZ   rX   r?   ©r@   r\   r­   r   r   r   Ú
test_asyncƒ	  s    
z_TestPool.test_asyncc                 C   sD   | j  tdtd f¡}t|jƒ}| jtj|td |  	|j
t¡ d S )Nrd  rŽ  r   )r”  r²  r‚  ro  r=   r­   rä   r   r«  rX   r?   r³  r   r   r   Útest_async_timeout‰	  s    
z_TestPool.test_async_timeoutc              	   C   sÌ   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j  tttdƒƒ¡}tdƒD ]}|  t|ƒ|| ¡ qV|  t	|j
¡ | j jtttdƒƒdd}tdƒD ]}|  t|ƒ|| ¡ q |  t	|j
¡ d S ©NrÂ   r'  r¶   rš  )r”  Úimapr‚  r«   r×   rZ   rœ  r_  rä   ÚStopIterationr®  ©r@   r`  rÚ   r   r   r   Ú	test_imap	  s    "z_TestPool.test_imapc                 C   s<  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ q‚|  t|j	¡ | j ttddƒd	¡}t
d
ƒD ]}|  t|ƒ|| ¡ qÈ|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ q|  t|j	¡ d S )NrO   rm   rR   r5   rÂ   rX  r  rj  r£   rd  ri  )rn   ro   rp   r”  r·  r‚  r  rä   r‹  r®  r×   rZ   r_  r¹  r   r   r   Ú#test_imap_handle_iterable_exception	  s$    
z-_TestPool.test_imap_handle_iterable_exceptionc              	   C   sx   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j jtttdƒƒdd}|  t|ƒtttttdƒƒƒƒ¡ d S r¶  )r”  Úimap_unorderedr‚  r«   r×   rZ   rl  rœ  )r@   r`  r   r   r   Útest_imap_unordered·	  s    "z_TestPool.test_imap_unorderedc              	   C   sF  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}t
ttt
tdƒƒƒƒ}|  t¡2 tdƒD ]"}t|ƒ}|  ||¡ | |¡ q¤W 5 Q R X | j ttddƒd	¡}t
ttt
tdƒƒƒƒ}|  t¡4 tdƒD ]$}t|ƒ}|  ||¡ | |¡ qW 5 Q R X d S )
NrO   rm   rR   r5   rÂ   rX  r  rj  r£   )rn   ro   rp   r”  r¼  r‚  r  rä   r‹  r®  r«   rœ  r×   r_  r¬   r  )r@   r`  Zexpected_valuesrÚ   r[   r   r   r   Ú-test_imap_unordered_handle_iterable_exception¾	  s@    
þþþþz7_TestPool.test_imap_unordered_handle_iterable_exceptionc                 C   st   | j dkrtnt}|  || jd¡ |  || jd¡ | j dkrp|  d¡}z|  dt|j	ƒ¡ W 5 | ¡  | ¡  X d S )NrO   r5   r   rX  )
rn   ÚRemoteErrorr9   rä   r“  r   r   rZ   rx   Ú_pool)r@   Zexpected_errorr“   r   r   r   Útest_make_poolâ	  s    ÿ

z_TestPool.test_make_poolc                 C   sP   | j jtjdd„ tdƒD ƒdd}| j  ¡  t| j jƒ}|ƒ  |  |j	d¡ d S )Nc                 S   s   g | ]}d ‘qS )r%   r   rö   r   r   r   rø   ó	  s     z,_TestPool.test_terminate.<locals>.<listcomp>i'  rR   rš  r+  )
r”  r£  rD   r¢   r×   rŸ   r=   r   Ú
assertLessr?   )r@   rÝ   r   r   r   r   rÌ   ñ	  s      ÿ
z_TestPool.test_terminatec                 C   sz   |   d¡}|  | tg ¡g ¡ |  t| tg ¡ƒg ¡ |  t| tg ¡ƒg ¡ |  | tg ¡ ¡ g ¡ | 	¡  | 
¡  d S rQ   )r“  rZ   rœ  r‚  r«   r·  r¼  r£  r­   r   r   rÕ   r   r   r   Útest_empty_iterableû	  s    
z_TestPool.test_empty_iterablec              	   C   st   | j dkrpttdƒƒ}dd„ |D ƒ}|  d¡"}| t|¡}|  | ¡ |¡ W 5 Q R X | ¡  |  	t
|jt|¡ d S )NrN   rÂ   c                 S   s   g | ]}t |ƒ‘qS r   )r‚  rö   r   r   r   rø   

  s     z*_TestPool.test_context.<locals>.<listcomp>r£   )rn   r«   r×   r“  r£  r‚  rZ   r­   r   rä   r9   )r@   ÚLrÞ   r“   rD  r   r   r   Útest_context
  s    
z_TestPool.test_contextc                 C   s   t dƒ‚d S )Né{   r½   r¸   r   r   r   Ú_test_traceback
  s    z_TestPool._test_tracebackTrÛ   c                 C   s  | j dkrŒ|  d¡H}z| | j¡ W n& tk
rN } z|}W 5 d }~X Y nX |  d¡ W 5 Q R X | ¡  |  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ tj ¡ 2}z|‚W n" t	k
rè   tjt ¡ Ž  Y nX W 5 Q R X |  d| ¡ ¡ |  d¡p}z| ttddƒd¡ W n( tk
rP } z|}W 5 d }~X Y nX |  d¡ |  t|ƒt¡ |  |jd ¡ W 5 Q R X | ¡  d S )NrN   rR   zexpected RuntimeError)rÆ  z&raise RuntimeError(123) # some commentr5   zexpected SayWhenError)rn   r“  r˜  rÇ  Ú	Exceptionr†  r   rñ   rª   r¾   rZ   rE   Ú	__cause__r   r”  ZRemoteTracebackr¬   Útbr  r   r  ré   Ú
excepthookÚexc_infoÚgetvaluerœ  r‚  r  r‹  )r@   r“   r®   ÚexcÚcauseÚf1r   r   r   Útest_traceback
  s<    ÿ
z_TestPool.test_tracebackc                 C   s   t dƒ‚d S )Nrž  r½   r¸   r   r   r   Ú_test_wrapped_exception<
  s    z!_TestPool._test_wrapped_exceptionc              
   C   sD   |   d¡(}|  t¡ | | j¡ W 5 Q R X W 5 Q R X | ¡  d S rQ   )r“  rä   r¾   r˜  rÒ  r   rÕ   r   r   r   Útest_wrapped_exception@
  s     z _TestPool.test_wrapped_exceptionc                 C   sŽ   t tdtjƒƒ }|  t¡N |  d¡8}z| t	ddg¡ W 5 t d¡ | ¡  | ¡  X W 5 Q R X W 5 Q R X |  
t tdtjƒƒ | d¡ d S )NrB   r£   r  r   rR   gÍÌÌÌÌÌì?)rC   rD   rä   r9   r“  r¢   r   r   rœ  r„  ÚassertGreater)r@   Zt_startr“   r   r   r   Útest_map_no_failfastH
  s    
z_TestPool.test_map_no_failfastc                 C   sh   dd„ t dƒD ƒ}dd„ |D ƒ}| j t|¡ ~t t¡ |  tdd„ |D ƒƒd h¡ |  t	j
d¡ d S )Nc                 S   s   g | ]
}t ƒ ‘qS r   )r‡  rö   r   r   r   rø   _
  s     z4_TestPool.test_release_task_refs.<locals>.<listcomp>rÂ   c                 S   s   g | ]}t  |¡‘qS r   )rí   rî   )r÷   Úor   r   r   rø   `
  s     c                 s   s   | ]}|ƒ V  qd S r   r   )r÷   rò   r   r   r   rj  e
  s     z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )r×   r”  rœ  r†  rD   r¢   rÔ   rZ   rç   r‡  rˆ  )r@   ZobjsÚrefsr   r   r   Útest_release_task_refs\
  s    
z _TestPool.test_release_task_refsc              
   C   s`   | j dkr|  d¡ |  d¡}| W 5 Q R X |  t¡ | W 5 Q R X W 5 Q R X | ¡  d S )NrO   útest not applicable to managerrR   )rn   ro   r“  rä   r9   r   ©r@   r”  r   r   r   Ú
test_enterj
  s    



z_TestPool.test_enterc              	   C   sb   | j dkr|  d¡ |  d¡}| ¡  | ¡  tjj|_t	 
dtf¡ d }t	 ¡  W 5 Q R X d S )NrO   rÙ  rR   z%unclosed running multiprocessing pool)rn   ro   r“  rŸ   r   r   r”  ZRUNÚ_stater   Zcheck_warningsÚResourceWarningÚ
gc_collectrÚ  r   r   r   Útest_resource_warningz
  s    



ÿz_TestPool.test_resource_warning)$rJ   rK   rL   r3  r’  r—  r™  r  r¡  r¢  r¤  r¨  rª  r¬  r°  r´  rµ  rº  r»  r½  r¾  rÁ  rÌ   rÃ  rÅ  rÇ  r:   r6  rÑ  rÒ  rÓ  rÕ  rØ  rÛ  rß  Ú__classcell__r   r   r•  r   r  !	  sF   	
$




&


r  c                   C   s   t dƒ‚d S )NÚkey)ÚKeyErrorr   r   r   r   ÚraisingŠ
  s    rã  c                   C   s   dd„ S )Nc                   S   s   dS )Né*   r   r   r   r   r   rÁ  Ž
  rÂ  z%unpickleable_result.<locals>.<lambda>r   r   r   r   r   Úunpickleable_result
  s    rå  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestPoolWorkerErrorsrB  c                    sj   t  d¡}d g‰ ‡ fdd„}|jt|d}|  t|j¡ |  ˆ d ¡ |  ˆ d t¡ | 	¡  | 
¡  d S )Nr£   c                    s   | ˆ d< d S rÎ  r   ©rÎ  ©Z
scratchpadr   r   Úerrback—
  s    z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback©r§  r   )r   r“  r²  rã  rä   râ  r­   rs   rv   r   r   )r@   r“   ré  r\   r   rè  r   Útest_async_error_callback“
  s    
z/_TestPoolWorkerErrors.test_async_error_callbackc                    s    ddl m} t d¡}tdƒD ]l}d g‰ ‡ fdd„}|jt|d}|  ||j¡ ˆ d }|  	|¡ |  
ˆ d |¡ |  |j¡ |  |j¡ q| ¡  | ¡  d S )Nr   )ÚMaybeEncodingErrorr£   r  c                    s   | ˆ d< d S rÎ  r   rç  rè  r   r   ré  ª
  s    z@_TestPoolWorkerErrors._test_unpickleable_result.<locals>.errbackrê  )Úmultiprocess.poolrì  r   r“  r×   r²  rå  rä   r­   rs   rv   ZassertIsNotNonerÎ  r[   r   r   )r@   rì  r“   Ú	iterationré  r\   Úwrappedr   rè  r   Ú_test_unpickleable_result¢
  s    

z/_TestPoolWorkerErrors._test_unpickleable_resultN)rJ   rK   rL   r_   rë  rð  r   r   r   r   ræ  
  s   ræ  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_TestPoolWorkerLifetimerB  c           	      C   s  t jddd}|  dt|jƒ¡ dd„ |jD ƒ}g }tdƒD ]}| | t|f¡¡ q<t	|ƒD ]\}}|  | 
¡ t|ƒ¡ q^| ¡  d}|r´tdd	„ |jD ƒƒs´|d
8 }t t¡ qˆdd„ |jD ƒ}|  d |¡ |  d |¡ |  t|ƒt|ƒ¡ | ¡  | ¡  d S )NrX  rÂ   ©Zmaxtasksperchildc                 S   s   g | ]
}|j ‘qS r   ©r†   ©r÷   rO  r   r   r   rø   ¾
  s     zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r¶   é2   c                 s   s   | ]}|  ¡ V  qd S r   ©rt   rô  r   r   r   rj  Ì
  s     zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rR   c                 S   s   g | ]
}|j ‘qS r   ró  rô  r   r   r   rø   Ï
  s     )r   r“  rZ   rx   rÀ  r×   rÜ   r²  r‚  Ú	enumerater­   Z_repopulate_poolÚallrD   r¢   rÔ   r¨   r´   rl  r   r   )	r@   r“   Zorigworkerpidsr  rÚ   r(  r\   Z	countdownZfinalworkerpidsr   r   r   Útest_pool_worker_lifetime»
  s&    z1_TestPoolWorkerLifetime.test_pool_worker_lifetimec                 C   sp   t jddd}g }tdƒD ]}| | t|df¡¡ q| ¡  | ¡  t|ƒD ]\}}|  	| 
¡ t|ƒ¡ qNd S )NrX  rR   rò  rd  g333333Ó?)r   r“  r×   rÜ   r²  r‚  r   r   r÷  rZ   r­   )r@   r“   r  rÚ   r(  r\   r   r   r   Ú%test_pool_worker_lifetime_early_closeØ
  s    z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec                 C   s.   d}t jjjd|ftŽ\}}}|  |d¡ d S )Na‹  if 1:
            from multiprocess import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        ú-cr   )r  r   Úscript_helperÚassert_python_okÚENVrZ   ©r@   Úcmdrë   ÚoutrM  r   r   r   Ú>test_worker_finalization_via_atexit_handler_of_multiprocessingå
  s    zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rJ   rK   rL   r_   rù  rú  r  r   r   r   r   rñ  ¸
  s   rñ  )ÚBaseManagerÚ	BaseProxyr¿  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFooBarc                 C   s   dS )Núf()r   rc   r   r   r   rL  þ
  s    zFooBar.fc                 C   s   t ‚d S r   )r9   rc   r   r   r   Úg   s    zFooBar.gc                 C   s   dS )Nú_h()r   rc   r   r   r   Ú_h  s    z	FooBar._hN)rJ   rK   rL   rL  r  r	  r   r   r   r   r  ý
  s   r  c                  c   s   t dƒD ]} | |  V  qd S r¹  )r×   )rÚ   r   r   r   Úbaz  s    r
  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚIteratorProxy)r®  c                 C   s   | S r   r   rc   r   r   r   r­    s    zIteratorProxy.__iter__c                 C   s
   |   d¡S )Nr®  )Ú_callmethodrc   r   r   r   r®    s    zIteratorProxy.__next__N)rJ   rK   rL   Z	_exposed_r­  r®  r   r   r   r   r  	  s   r  c                   @   s   e Zd ZdS )Ú	MyManagerNrŒ  r   r   r   r   r    s   r  ÚFoo)ÚcallableÚBar)rL  r	  )r  Zexposed)r  Z	proxytypec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú_TestMyManagerrZ  c                 C   s<   t ƒ }| ¡  |  |¡ | ¡  |  |jjdtj f¡ d S rÎ  )	r  rŽ   ÚcommonÚshutdownr¬   Ú_processr{   rÄ   rÊ   ©r@   rO   r   r   r   Útest_mymanager  s
    
z_TestMyManager.test_mymanagerc              	   C   s8   t ƒ }|  |¡ W 5 Q R X |  |jjdtj f¡ d S rÎ  )r  r  r¬   r  r{   rÄ   rÊ   r  r   r   r   Útest_mymanager_context'  s    z%_TestMyManager.test_mymanager_contextc              	   C   s<   t ƒ }| ¡  | |  |¡ W 5 Q R X |  |jjd¡ d S rÎ  )r  rŽ   r  rZ   r  r{   r  r   r   r   Ú!test_mymanager_context_prestarted/  s
    z0_TestMyManager.test_mymanager_context_prestartedc                    s  |  ¡ ‰| ¡ ‰ | ¡ }‡fdd„dD ƒ}‡ fdd„dD ƒ}|  |ddg¡ |  |ddg¡ |  ˆ ¡ d¡ |  tˆj¡ |  ˆ d¡d¡ |  t	ˆjd¡ |  ˆ  ¡ d¡ |  ˆ  
¡ d	¡ |  ˆ  d¡d¡ |  ˆ  d¡d	¡ |  t|ƒd
d„ tdƒD ƒ¡ d S )Nc                    s   g | ]}t ˆ |ƒr|‘qS r   ©rÃ   ©r÷   r"   )rž  r   r   rø   ;  s     
 z)_TestMyManager.common.<locals>.<listcomp>)rL  r  r	  c                    s   g | ]}t ˆ |ƒr|‘qS r   r  r  )Úbarr   r   rø   <  s     
 rL  r  r	  r  r  c                 S   s   g | ]}|| ‘qS r   r   rö   r   r   r   rø   K  s     rÂ   )r  r  r
  rZ   rL  rä   r9   r  r  r¿  r	  r«   r×   )r@   rO   r
  Zfoo_methodsZbar_methodsr   )r  rž  r   r  6  s     z_TestMyManager.commonN)rJ   rK   rL   r_   r  r  r  r  r   r   r   r   r    s
   r  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queueS  s    r  c                   @   s   e Zd ZdZdS )ÚQueueManagerz$manager class used by server processN©rJ   rK   rL   r–  r   r   r   r   r  V  s   r  c                   @   s   e Zd ZdZdS )ÚQueueManager2z@manager class which specifies the same interface as QueueManagerNr  r   r   r   r   r   Z  s   r   Ú	xmlrpclibc                   @   sB   e Zd ZdZdddddddgZedd… Zed	d
„ ƒZdd„ ZdS )Ú_TestRemoteManagerrZ  úhello worldNTç      @u   hallÃ¥ vÃ¤rldenu   Ð¿Ñ€Ð¸Ð²Ñ–Ñ‚ ÑÐ²Ñ–Ñ‚s   hallå världenc                 C   s2   t ||td}| ¡  | ¡ }| t| jƒ¡ d S )N©Úaddressrr   Ú
serializer)r   Ú
SERIALIZERÚconnectr  rh   Útupler6  ©r‡   r&  rr   rO   r   r   r   r   Ú_putterk  s      ÿz_TestRemoteManager._putterc                 C   s¢   t  d¡}ttjjdf|td}| ¡  |  |j	¡ | j
| j|j|fd}d|_| ¡  t|j|td}| ¡  | ¡ }|  | ¡ | j¡ |  t|jtj¡ ~d S )Né    r   r%  r‰   T)r6   Úurandomr  r  r   ÚHOSTr(  rŽ   ræ   r  r   r,  r&  ru   r   r)  r  rZ   r­   rÝ   rä   rÈ  rh   rD   r¢   )r@   rr   rO   r“   Zmanager2r   r   r   r   Útest_remoteu  s*    

  ÿ  ÿz_TestRemoteManager.test_remote)	rJ   rK   rL   r_   r6  rÝ   r3  r,  r0  r   r   r   r   r"  a  s   ý
	r"  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú_TestManagerRestartc                 C   s,   t ||td}| ¡  | ¡ }| d¡ d S )Nr%  r#  )r  r(  r)  r  rh   r+  r   r   r   r,  “  s      ÿz_TestManagerRestart._putterc              
   C   s(  t  d¡}ttjjdf|td}zd| 	¡ }|j
}|j ¡  | ¡  | j| j|j
|fd}| ¡  | ¡  | ¡ }|  | ¡ d¡ ~W 5 t|dƒr˜| ¡  X t||td}z| ¡  |  |j¡ W nb tk
r" } zB|jtjkrâ‚ t d¡ t||td}t|dƒr|  |j¡ W 5 d }~X Y nX d S )Nr-  r   r%  r  r‰   r#  rŽ  )r6   r.  r  r  r   r/  r(  rÃ   r  Z
get_serverr&  Úlistenerr   rŽ   r   r,  r   r  rZ   r­   ræ   ÚOSErrorÚerrnoÚ
EADDRINUSErD   r¢   )r@   rr   rO   ZsrvrÚaddrr“   r   r®   r   r   r   Útest_rapid_restart›  sL    

  ÿ


  ÿ
  ÿz&_TestManagerRestart.test_rapid_restartN)rJ   rK   rL   r3  r,  r7  r   r   r   r   r1  ‘  s   
r1  Ú c                   @   sì   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	edd„ ƒZ
ed$dd„ƒZe ed¡dd„ ƒZe ed¡e ejdkd¡e edkd¡e eedƒd¡dd„ ƒƒƒƒZedd„ ƒZe ed¡e ejdkd¡dd „ ƒƒZd!d"„ Zd#S )%Ú_TestConnectionrl   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )r:  Ú
recv_bytesÚSENTINELÚ
send_bytesr   )r‡   r%  Úmsgr   r   r   Ú_echoË  s    z_TestConnection._echoc              
   C   sL  |   ¡ \}}| j| j|fd}d|_| ¡  ddd g}tdƒ}|d }t dttdƒƒ¡}| j	d	krx|  
t| ¡ ƒt¡ |  
| |¡d ¡ |  
| ¡ |¡ |  
| |¡d ¡ |  
| ¡ |¡ | j	d	kr t dd
gd ¡}t|ƒd
gdt|ƒ   }	|  
| |¡d ¡ |  
| |¡t|ƒ|j ¡ |  
t|ƒ|	¡ t dd
gd ¡}d
gd t|ƒ d
gdt|ƒ   }	|  
| |¡d ¡ |  
| |d|j ¡t|ƒ|j ¡ |  
t|ƒ|	¡ ttdƒƒ}|  
| |¡d ¡ z| |¡}
W n6 tjk
r } z|  
|j|f¡ W 5 d }~X Y nX |  d|
 ¡ t|jƒ}|  
|ƒ d¡ |  |jd
¡ |  
|dƒd¡ |  |jd
¡ |  
|tƒd¡ |  |jt¡ | d ¡ t  d¡ |  
|tƒd¡ |  |jd
¡ |  
| ¡ d ¡ tdƒd }| |¡ |  
| ¡ |¡ | t!¡ | "¡  | j	d	kr@|  
|j#d¡ |  
|j$d¡ |  %t&|j¡ |  %t&|j¡ | '¡  d S )Nr‰   TrR   r$  r#  rÂ   rÚ   ri  rN   r   rX  rj  z(                                        zexpected BufferTooShort, got %sFr5   r%   ÚXi   )(rŒ   r   r>  ru   rŽ   r
   rR  r«   r×   rn   rZ   rª   ÚfilenorÑ   r˜   r   r<  r:  rx   Zrecv_bytes_intoÚitemsizeÚ	bytearrayr   ÚBufferTooShortrE   r†  r=   rž   rX   r?   rn  rD   r¢   r;  r   ÚreadableÚwritablerä   ÚEOFErrorr   )r@   r%  r8  r“   rM  r=  ZlongmsgrS  ÚbufferrÞ   r\   r®   rž   Zreally_big_msgr   r   r   Útest_connectionÑ  sv    

ÿ$ÿ"




z_TestConnection.test_connectionc                 C   s¤   | j dd\}}|  | d¡d ¡ |  | ¡ d¡ | jdkr |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t|jd¡ |  t|j¡ |  t|j	¡ d S )NFrˆ   rR   rN   Tr£   )
rŒ   rZ   r˜   r   rn   rD  rE  rä   r3  rž   )r@   ÚreaderÚwriterr   r   r   Útest_duplex_false   s    
z!_TestConnection.test_duplex_falsec                 C   st   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  tdƒ}| |¡ |  | 	¡ |¡ | t
¡ | ¡  | ¡  d S )Nr‰   Tr¥   )rŒ   r   r>  ru   rŽ   r   r
   r<  rZ   r:  r;  r   )r@   r%  r8  r“   r=  r   r   r   Útest_spawn_close-  s    

z _TestConnection.test_spawn_closec                 C   s:  | j dkr|  d | j ¡¡ tdƒ}|  ¡ \}}| |¡ |  | ¡ |¡ | |d¡ |  | ¡ |dd … ¡ | |dd¡ |  | ¡ |dd… ¡ | |d¡ |  | ¡ td	ƒ¡ | |dd
¡ |  | ¡ td	ƒ¡ |  t	|j|d¡ |  t	|j|dd¡ |  t	|j|dd¡ |  t	|j|d¡ |  t	|j|dd¡ d S )NrN   rm   Úabcdefghijklmnopqrstuvwxyzrf   rj  rY  é   é   r8  r   é   é   rR   r5   ri  )
rn   ro   rp   r
   rŒ   r<  rZ   r:  rä   r9   )r@   r=  rV   rW   r   r   r   Útest_sendbytesB  s&    

z_TestConnection.test_sendbytesc              
   C   sR   zt  |¡ W n: tk
rH } z|jtjkr6W Y ¢
dS ‚ W 5 d }~X Y nX dS d S )NFT)r6   Úfstatr3  r4  ÚEBADF)r‡   rU  r®   r   r   r   Ú_is_fd_assignedb  s    
z_TestConnection._is_fd_assignedFc                 C   sd   |r.t ddƒD ]}|  |¡st | ¡ |¡ qt |¡}trJt |tj	¡}t 
||¡ t |¡ d S )Nr   r.   )r×   rU  r6   Údup2r@  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerR  rƒ  r   )r‡   r%  ÚdataZcreate_dummy_fdsrÚ   rU  r   r   r   Ú_writefdm  s    

z_TestConnection._writefdú$test needs multiprocessing.reductionc              	   C   sÐ   | j dkr|  d¡ | jdd\}}| j| j|dfd}d|_| ¡  |  tj	j
tj	j¡ ttj	jdƒ,}| ¡ }tr€t |¡}t |||j¡ W 5 Q R X | ¡  ttj	jdƒ}|  | ¡ d¡ W 5 Q R X d S )	NrN   úonly makes sense with processesTrˆ   s   foor‰   ÚwbÚrb)rn   ro   rŒ   r   r[  ru   rŽ   ræ   r  r   rG  rF  rI  r@  rX  Zget_osfhandler   Úsend_handler†   r   rZ   rJ  )r@   r%  r8  r“   rL  rU  r   r   r   Útest_fd_transfery  s    


z _TestConnection.test_fd_transferr'   ú*test semantics don't make sense on Windowsr.   z)largest assignable fd number is too smallrV  ztest needs os.dup2()c              
   C   s
  | j dkr|  d¡ | jdd\}}| j| j|ddfd}d|_| ¡  |  tj	j
tj	j¡ ttj	jdƒd}| ¡ }tdtƒD ]}|  |¡s~ qœq~|  d	¡ t ||¡ zt |||j¡ W 5 t |¡ X W 5 Q R X | ¡  ttj	jd
ƒ}|  | ¡ d¡ W 5 Q R X d S )NrN   r]  Trˆ   s   barr‰   r^  r.   z2could not find an unassigned large file descriptorr_  )rn   ro   rŒ   r   r[  ru   rŽ   ræ   r  r   rG  rF  rI  r@  r×   ÚMAXFDrU  r†  r6   rV  r   r   r`  r†   r   rZ   rJ  )r@   r%  r8  r“   rL  rU  Znewfdr   r   r   Útest_large_fd_transferŒ  s(    	



z&_TestConnection.test_large_fd_transferc                 C   s   t  | ¡ d¡ d S )Nó    )r6   rƒ  r@  ©r@   r%  r   r   r   Ú_send_data_without_fd­  s    z%_TestConnection._send_data_without_fdzdoesn't make sense on Windowsc                 C   s`   | j dkr|  d¡ | jdd\}}| j| j|fd}d|_| ¡  |  tt	j
|¡ | ¡  d S )NrN   r]  Trˆ   r‰   )rn   ro   rŒ   r   rg  ru   rŽ   rä   r¾   r   rW  r   ©r@   r%  r8  r“   r   r   r   Útest_missing_fd_transfer±  s    

z(_TestConnection.test_missing_fd_transferc              
   C   sª   |   ¡ \}}|R |B | d¡ |  | ¡ d¡ | jdkrT|  |j¡ |  |j¡ W 5 Q R X W 5 Q R X | jdkr¦|  |j¡ |  |j¡ |  t	|j¡ |  t	|j¡ d S ©NéÁ  rN   )
rŒ   r˜   rZ   r   rn   rƒ   Úclosedrs   rä   r3  rU   r   r   r   rÅ  À  s    

 
z_TestConnection.test_contextN)F)rJ   rK   rL   r_   r3  r>  rH  rK  rL  rR  rU  r[  r:   r4  ÚHAS_REDUCTIONra  r6  ré   rý   rc  rÃ   r6   rd  rg  ri  rÅ  r   r   r   r   r9  Ç  s<   
O 




ÿ
ÿÿ

r9  c                   @   s6   e Zd ZdZdd„ Zdd„ Ze ej	d¡dd„ ƒZ
d	S )
Ú_TestListenerrB  c                 C   sB   | j jD ]4}| j j|d}|  |j¡ |  t| j j|j|¡ qd S )N©Úfamily)Ú
connectionÚfamiliesÚListenerræ   r   rä   r3  r&  )r@   rp  rz  r   r   r   Útest_multiple_bindÔ  s     ÿz _TestListener.test_multiple_bindc                 C   sz   | j  ¡ N}| j  |j¡4}| ¡  }| d¡ |  | ¡ d¡ W 5 Q R X W 5 Q R X W 5 Q R X | jdkrv|  	t
|j¡ d S rj  ©rq  rs  ÚClientr&  Úacceptr˜   rZ   r   rn   rä   r3  )r@   rz  rj   r+  r   r   r   rÅ  Û  s    

.
z_TestListener.test_contextz"test needs abstract socket supportc                 C   s|   | j  d¡N}| j  |j¡4}| ¡  }| d¡ |  | ¡ d¡ W 5 Q R X W 5 Q R X W 5 Q R X | jdkrx|  	t
|j¡ d S )Nz
 somethingrk  rN   ru  )r@   r2  Úclientr+  r   r   r   Útest_abstract_socketå  s    

.
z"_TestListener.test_abstract_socketN)rJ   rK   rL   r_   rt  rÅ  r:   r4  r   Zabstract_sockets_supportedry  r   r   r   r   rn  Ð  s   
ÿrn  c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )Ú_TestListenerClientrl   c                 C   s"   | j  |¡}| d¡ | ¡  d S )Nr¥   )rq  rv  r˜   r   )r‡   r&  r%  r   r   r   r‚   ö  s    
z_TestListenerClient._testc                 C   sj   | j jD ]\}| j j|d}| j| j|jfd}d|_| ¡  | ¡ }|  	| 
¡ d¡ | ¡  | ¡  qd S )Nro  r‰   Tr¥   )rq  rr  rs  r   r‚   r&  ru   rŽ   rw  rZ   r   r   r   )r@   rp  rz  r“   r%  r   r   r   Útest_listener_clientü  s    z(_TestListenerClient.test_listener_clientc                 C   sj   | j  ¡ }| j| j|jfd}d|_| ¡  t d¡ | 	¡ }|  
| ¡ d¡ | ¡  | ¡  | ¡  d S )Nr‰   TrR   r¥   )rq  rs  r   r‚   r&  ru   rŽ   rD   r¢   rw  rZ   r   r   r   )r@   rz  r“   r%  r   r   r   Útest_issue14725  s    

z#_TestListenerClient.test_issue14725c                 C   sh   | j jD ]Z}| j j|d}| j  |j¡}| ¡ }| d¡ |  | d¡¡ | 	¡  | 	¡  | 	¡  qd S )Nro  ó   hellorR   )
rq  rr  rs  rv  r&  rw  r<  rs   rž   r   )r@   Úfamrz  rj   rV   r   r   r   Útest_issue16955  s    
z#_TestListenerClient.test_issue16955N)	rJ   rK   rL   r_   r3  r‚   r{  r|  r  r   r   r   r   rz  ò  s   
rz  c                   @   sT   e Zd ZdZdd„ Zedd„ ƒZdd„ Zedd	„ ƒZd
d„ Z	edd„ ƒZ
dd„ ZdS )Ú	_TestPollrl   c                 C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFrÂ  T)rŒ   rZ   rž   r<  rU   r   r   r   Útest_empty_string&  s
    
z_TestPoll.test_empty_stringc                 C   s*   |D ]}t  d¡ | |¡ q| ¡  d S ©Nr%   )rD   r¢   r<  r   )r‡   r%  Ústringsr   r   r   r   Ú_child_strings-  s    
z_TestPoll._child_stringsc                 C   sr   d}|   ¡ \}}| j| j||fd}| ¡  |D ]4}tdƒD ]}| d¡r< qPq<| ¡ }|  ||¡ q0| ¡  d S )N)r}  rÂ  ó   aó   brÂ  s   byerÂ  s   lopr‰   éÈ   rõ   )	rŒ   r   r„  rŽ   r×   rž   r:  rZ   r   )r@   rƒ  rV   rW   r“   r   rÚ   r0  r   r   r   Útest_strings4  s    
z_TestPoll.test_stringsc                 C   s   |  d¡ d S re   )rž   )r‡   rD  r   r   r   Ú_child_boundariesC  s    z_TestPoll._child_boundariesc                 C   sr   |   d¡\}}| j| j|fd}| ¡  t d¡ ddg}|D ]}| |¡ q>| ¡  | ¡  |  	| 
¡ |¡ d S )NFr‰   r£   s   firsts   second)rŒ   r   r‰  rŽ   rD   r¢   r<  r   r   r¬   r:  )r@   rD  rO  r“   rÄ  r}  r   r   r   Útest_boundariesK  s    
z_TestPoll.test_boundariesc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nr…  r†  ó   cd)r<  )r‡   rW   r   r   r   Ú_child_dont_mergeW  s    

z_TestPoll._child_dont_mergec                 C   sà   |   ¡ \}}|  | d¡d¡ |  | d¡d¡ | j| j|fd}| ¡  |  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d	¡ | ¡  d S )
Nr*   Fr%   r‰   r…  rŽ  Tr†  r‹  )rŒ   rZ   rž   r   rŒ  rŽ   r:  r   )r@   rV   rW   r“   r   r   r   Útest_dont_merge]  s    z_TestPoll.test_dont_mergeN)rJ   rK   rL   r_   r  r3  r„  rˆ  r‰  rŠ  rŒ  r  r   r   r   r   r€  "  s   


r€  r\  c                   @   sP   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
dS )Ú_TestPicklingConnectionsrB  c                 C   s   ddl m} |jtd d S )Nr   )Úresource_sharerr   )Úmultiprocessr  r@  r   )r‡   r  r   r   r   r—  y  s    z&_TestPicklingConnections.tearDownClassc                 C   s˜   |D ]@}| j j|d}| |j¡ | ¡ }| |¡ | ¡  | ¡  qt tj	j
df¡}| | ¡ ¡ | ¡ \}}| |¡ | ¡  | ¡  | ¡  d S )Nro  r   )rq  rs  r˜   r&  rw  r   ÚsocketÚcreate_serverr  r   r/  Úgetsocknamer   )r‡   r%  rr  r~  rz  Únew_connr6  r   r   r   Ú	_listener~  s    


z"_TestPicklingConnections._listenerc                 C   sx   t |jd ƒD ]*\}}| j |¡}| | ¡ ¡ | ¡  q| ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S r   )
r:  r   rq  rv  r˜   r;  r   r‘  r)  Úsendall)r‡   r%  r&  r=  rx  r   r   r   Ú_remote‘  s    

z _TestPicklingConnections._remotec                 C   s`  | j j}|  ¡ \}}| j| j||fd}d|_| ¡  | ¡  |  ¡ \}}| j| j|fd}d|_| ¡  | ¡  |D ]D}d|  	d¡}	| 
¡ }
| |
|	f¡ | 
¡ }|  | 
¡ |	 ¡ ¡ qv| d ¡ tdƒ}	| 
¡ }
| |
|	f¡ | 
¡ }g }| 
d¡}|sq| |¡ qðd |¡}|  ||	 ¡ ¡ | ¡  | d ¡ | ¡  | ¡  | ¡  | ¡  d S )Nr‰   TzThis connection uses family %sÚasciiz$This connection uses a normal socketr¶   rÂ  )rq  rr  rŒ   r   r•  ru   rŽ   r   r—  r   r   r˜   rZ   r;  r
   rÜ   r   )r@   rr  ZlconnZlconn0Zlpr‘   Zrconn0Úrpr~  r=  r&  r”  Úbufr   r   r   r   Útest_pickling   sF    



z&_TestPicklingConnections.test_picklingc                 C   sD   |  ¡ }| d¡ | ¡  |  ¡ }|  ¡ }| |d ¡ | ¡  d S )Núall is wellr£   )r   r˜   r   )r‡   r%  rO  rD  r=  r   r   r   Úchild_accessÎ  s    
z%_TestPicklingConnections.child_accessc                 C   s¾   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  | j dd\}}| |¡ | ¡  |  | ¡ d¡ | ¡  | j dd\}}| |¡ | ¡  | d¡ | ¡  |  | ¡ d¡ | 	¡  d S )Nr‰   TFrˆ   rœ  ZfoobarZfoobarfoobar)
rŒ   r   r  ru   rŽ   r   r˜   rZ   r   r   )r@   r%  r8  r“   rD  rO  r   r   r   Útest_accessÚ  s"    


z$_TestPicklingConnections.test_accessN)rJ   rK   rL   r_   r3  r—  r•  r—  r›  r  rž  r   r   r   r   rŽ  t  s   


.
rŽ  c                       s<   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Z‡  ZS )
Ú	_TestHeaprB  c                    s*   t ƒ  ¡  tjjj| _tj ¡ tjj_d S r   )r‘  r   r   rÝ  rÞ  Ú_heapÚold_heapZHeaprc   r•  r   r   r   ÿ  s    
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )r¡  r   rÝ  rÞ  r   r‘  r  rc   r•  r   r   r    s    z_TestHeap.tearDownc              
   C   sT  d}d}g }t jjj}d|_t|ƒD ]L}tt dd¡d ƒ}t j |¡}| 	|¡ t
|ƒ|krnt |¡}||= ~q$|jX g }d}	d}
t|j ¡ ƒD ]@}|D ]6\}}}| 	|j |¡|||| df¡ |	|| 7 }	qžq–|j ¡ D ]B\}}|D ]4\}}| 	|j |¡|||| df¡ |
|| 7 }
qîqâ|  |	|
 tdd	„ |jD ƒƒ¡ | ¡  tt
|ƒd ƒD ]n}|| d d
… \}}}||d  d d
… \}}}||kr¾|  ||j| j¡ |  |d¡ n|  ||¡ q^W 5 Q R X t |¡ |rô| ¡  qâ|  |j|j¡ |  t
|jƒd¡ |  t
|jƒd¡ |  t
|jƒd|j¡ |  t
|jƒd¡ d S )Néˆ  rõ  r   rR   r'  ÚfreeÚoccupiedc                 s   s   | ]}|j V  qd S r   ©rU  )r÷   Úarenar   r   r   rj  /  s     z&_TestHeap.test_heap.<locals>.<genexpr>rX  )r   rÝ  rÞ  r   Z_DISCARD_FREE_SPACE_LARGER_THANr×   rÑ   ÚrandomÚlognormvariaterÜ   rx   Ú	randrangerå  r«   Z_len_to_seqr6  Z_arenasÚindexZ_allocated_blocksr  rZ   ÚsumÚsortrU  Úshufflerd  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)r@   Z
iterationsZ	maxblocksÚblocksrÝ  rÚ   rU  rW   rø  r£  r¤  rÄ  r¦  rŽ   r@  Zarena_blocksZnarenaZnstartZnstopr   r   r   Ú	test_heap	  sd    



 ÿ ÿ
ÿ

z_TestHeap.test_heapc                 C   sv   t  ¡ st  ¡  |  t j¡ t  ¡ }| jt jf|žŽ  t  d¡ tdƒD ](}tj	 
d¡}tj	 
d¡}||_||_qHd S )NrÂ   r¢  rR   )rï   Ú	isenabledÚenableræ   ÚdisableÚget_thresholdÚset_thresholdr×   r   rÝ  rÞ  Zbuddy)r@   Z
thresholdsrÚ   rV   rW   r   r   r   Útest_free_from_gcI  s    
z_TestHeap.test_free_from_gc)	rJ   rK   rL   r_   r   r  r¯  rµ  rà  r   r   r•  r   rŸ  û  s
   @rŸ  c                   @   s"   e Zd ZdefdefdefgZdS )Ú_Foor0  r1  ÚzN)rJ   rK   rL   r1   r2   r3   Z_fields_r   r   r   r   r¶  c  s   ýr¶  c                   @   s>   e Zd ZdZdd„ Zedd„ ƒZddd„Zd	d
„ Zdd„ Z	dS )Ú_TestSharedCTypesrB  c                 C   s   t s|  d¡ d S r2  r3  rc   r   r   r   r   n  s    z_TestSharedCTypes.setUpc                 C   sz   | j d9  _ | j d9  _ | j d9  _ | jd9  _| jd9  _| j d9  _ tt|ƒƒD ]}||  d9  < q`d S r²  )r[   r0  r1  r×   rx   )r‡   r0  r1  r·  rž  rS  ÚstringrÚ   r   r   r   Ú_doubler  s    z_TestSharedCTypes._doubleFc           
      C   s  t dd|d}t td|d}t td|d}t tdd|d}| jdttd	ƒƒ|d}| jd
d|d}tdƒ|_| j	| j
||||||fd}d|_| ¡  | ¡  |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ td	ƒD ]}	|  ||	 |	d ¡ qì|  |jtdƒ¡ d S )NrÚ   rj  r@  gUUUUUUÕ?r.  rX  r£   r+  rÂ   rj   r  r¥   r‰   Té   gUUUUUUå?r/  rd  ç      @Z
hellohello)r   r2   r3   r¶  rQ  r«   r×   r
   r[   r   rº  ru   rŽ   r   rZ   rT   r0  r1  )
r@   r§  r0  r1  r·  rž  rS  r¹  r“   rÚ   r   r   r   Útest_sharedctypes}  s&    
z#_TestSharedCTypes.test_sharedctypesc                 C   s   | j dd d S )NTr@  )r½  rc   r   r   r   Útest_synchronize”  s    z"_TestSharedCTypes.test_synchronizec                 C   sT   t dddƒ}t|ƒ}d|_d|_d|_|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr£   ç      @r.  r   )r¶  r   r0  r1  r·  rZ   rT   )r@   rž  r  r   r   r   Ú	test_copy—  s    z_TestSharedCTypes.test_copyN)F)
rJ   rK   rL   r_   r   r3  rº  r½  r¾  rÀ  r   r   r   r   r¸  j  s   


r¸  z#requires multiprocess.shared_memoryc                   @   sˆ   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Ze	 
ejd
kd¡dd„ ƒZe	 
ejd
kd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_TestSharedMemoryrB  c                 C   s8   t | tƒrt | ¡}n| }||jd t|ƒ…< | ¡  d S r   )r   r>  r   ÚSharedMemoryrš  rx   r   )Zshmem_name_or_objZbinary_dataZ	local_smsr   r   r   Ú!_attach_existing_shmem_then_write§  s
    
z3_TestSharedMemory._attach_existing_shmem_then_writec                 C   s   |t t ¡ ƒ S r   )r>  r6   rz   )r@   Úprefixr   r   r   Ú_new_shm_name°  s    z_TestSharedMemory._new_shm_namec              	   C   s<  |   d¡}tj|ddd}|  |j¡ |  |j|¡ |  |jd¡ |  t	|j
ƒ|j¡ d|j
d< |  |j
d d¡ t |¡}|  |j
d d¡ | ¡  tj|d|j d}|  |jd|j ¡ | ¡  tjr>|   d	¡}tj|dd
d}|  t¡F z4|  |jd
¡ t |¡}| ¡  | ¡  | ¡  W 5 | ¡  X W 5 Q R X |  t¡ tj|ddd}W 5 Q R X tjržG dd„ dtjƒ}	|	|ƒ}
|  |
j|j¡ |
 ¡  |  t¡ t d¡}| ¡  W 5 Q R X | ¡  |  t¡ tjddd}W 5 Q R X |  t¡ tjddd}W 5 Q R X |  t¡ tjdd}W 5 Q R X d S )NZtest01_tsmbTé   ©ÚcreaterU  rä  r   r  r¥  Ztest01_dblunlinkr¢  c                   @   s   e Zd ZejejB ZdS )zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rJ   rK   rL   r6   rS  ÚO_RDWRÚ_flagsr   r   r   r   ÚOptionalAttachSharedMemory÷  s   rË  Ztest01_nottherer5   ©rÈ  )rÅ  r   rÂ  ræ   rG  rZ   r"   r‰  rU  rx   rš  r   rÂ  Z
_USE_POSIXrä   ÚFileNotFoundErrorÚFileExistsErrorr9   )r@   Z	name_tsmbÚsmsZalso_smsZsame_smsZname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsrË  Zok_if_exists_smsZnonexisting_smsZsms_invalidr   r   r   Útest_shared_memory_basics¶  sd    



ý
ý
z+_TestSharedMemory.test_shared_memory_basicsc                 C   s°   t jddd}|  |j¡ | j| j|jdfd}d|_| ¡  | 	¡  |  
t|jd d… ƒd¡ | j| j|dfd}d|_| ¡  | 	¡  |  
t|jd d… ƒd¡ | ¡  d S )NTrÆ  rÇ  s   howdyr‰   rf   s   HELLO)r   rÂ  ræ   rG  r   rÃ  r"   ru   rŽ   r   rZ   rw   rš  r   )r@   rÏ  r“   r   r   r   Ú#test_shared_memory_across_processes  s&    þþz5_TestSharedMemory.test_shared_memory_across_processesr   z#not feasible in non-posix platformsc              	   C   st   t j ¡ }| ¡  | tdƒ¡}t |jj	t
j¡ | tdƒ¡}|  t¡ t t ¡ t
j¡ W 5 Q R X | ¡  d S r¹  )r   ÚmanagersÚSharedMemoryManagerrŽ   ÚShareableListr×   r6   rÍ   r  r†   rÄ   r0  rä   rÖ  rz   r  )r@   ÚsmmÚslZsl2r   r   r   Ú4test_shared_memory_SharedMemoryServer_ignores_sigint-  s    
zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlyc                 C   s,   d}t jjjd|ftŽ\}}}|  |¡ d S )NzÞif 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        rû  )r  r   rü  rý  rþ  rƒ   rÿ  r   r   r   Ú>test_shared_memory_SharedMemoryManager_reuses_resource_trackerE  s    	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc              	      sR  t j ¡ ‰ |  t¡ ˆ jdd W 5 Q R X ˆ  ¡  ‡ fdd„tddƒD ƒ}‡ fdd„tdd	d
ƒD ƒ}tj	|d j
jd}|  t|ƒd¡ tj|d jd}|  t|jƒd¡ |d j}ˆ  ¡  tjdkrì|  t¡ tj|d}W 5 Q R X t j ¡ $}| 	d¡}|jd	d}	|j
j}W 5 Q R X tjdkrN|  t¡ tj	|d}
W 5 Q R X d S )Nr\  r¥  c                    s   g | ]}ˆ   t|ƒ¡‘qS r   )rÔ  r×   rö   ©Zsmm1r   r   rø   _  s     zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rf   rÂ   c                    s   g | ]}ˆ j |d ‘qS )r¥  )rÂ  )r÷   r(  rÙ  r   r   rø   `  s     r-  é€   é   r   ©r"   r'   Úhowdy)r   rÒ  rÓ  rä   r9   rÂ  rŽ   r×   r   rÔ  Úshmr"   rZ   rx   r‰  rš  r  ré   rý   rÍ  )r@   ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2rÖ  rÞ  Z	absent_slr   rÙ  r   Ú-test_shared_memory_SharedMemoryManager_basicsZ  s,    



z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc              
   C   sz  t  ddddd ddg¡}|  |jj¡ |  |jd¡ |  t|ƒd¡ t 	¡ B t 
d	¡ |  t¡ | d
¡ W 5 Q R X |  | d¡d¡ W 5 Q R X |  |d d¡ |  |d d¡ |  t|ƒd¡ d|d< |  |d d¡ d|d< |  |d d¡ |  |jd¡ |  td¡ d|d< W 5 Q R X |  |d d¡ d|d< |  |d d¡ |  |d d¡ |  td¡ d|d< W 5 Q R X |  |d d¡ |  td¡ d|d< W 5 Q R X |  |d d¡ t 	¡ F t 
d	¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ W 5 Q R X |  d¡}t j||d}z~|  |jj|jj¡ |  ||jj¡ |  t|ƒt|ƒ¡ |  |j|j¡ d|d< |  |d d¡ |  |d d¡ |j ¡  W 5 |j ¡  X t j|jjd}|  |jj|jj¡ d|d< |  |d d¡ |j ¡  |j ¡  t  ¡ }z^|  t|ƒd¡ |  |jd¡ |  | d ¡d¡ |  t¡ | d ¡ W 5 Q R X |j ¡  W 5 |j ¡  X d S )!NrÝ  ó   HoWdYçX9´ÈvqÀr¶   Trä  z8s8sdqxxxxxx?xxxxxxxx?qrj  ÚignoreÚ100rX  r   éþÿÿÿ)rÝ  rà  rá  r¶   NTrä  Zsomeri  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srR   u	   encodÃ©ess	   123456789r£   s   adiosZtest03_duplicaterÜ  éM   r5   ip  r8  Úany)r   rÔ  ræ   rÞ  rG  rZ   rp   rx   ÚwarningsÚcatch_warningsÚsimplefilterrä   r9   rª  r*  rŸ  r  rÅ  r´   r"   r«   r   )r@   rÖ  Zname_duplicateZsl_copyZsl_tetheredZempty_slr   r   r   Ú'test_shared_memory_ShareableList_basicsx  s    ÿ

þÿÿÿ




z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc                 C   sæ   t  tdƒ¡}|  |jj¡ t |¡}t |¡}|  	t
|t jƒ¡ |  	|d d¡ |  ||k¡ d|d< |  |d d¡ dt|jjƒ }t  tdƒ¡}|  |jj¡ t |¡}|  	t|ƒt|ƒk¡ |j ¡  |j ¡  |j ¡  d S )NrÂ   r5   r\  Úchangedri  rV   i  )r   rÔ  r×   ræ   rÞ  rG  ÚpickleÚdumpsÚloadsrs   r   rƒ   rZ   rx   r"   r   )r@   rÖ  Zserialized_slZdeserialized_slr"   Z	larger_slZserialized_larger_slr   r   r   Ú)test_shared_memory_ShareableList_picklingØ  s&    


ÿ


z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc              	   C   sò   d}t jtjdd|gt jt jdÆ}|j ¡  ¡  ¡ }| 	¡  | 
¡  ttdtjƒƒ d }d}ttdtjƒƒ |k r¸t |¡ t|d d	ƒ}ztj|d
d}W q^ tk
r´   Y qÀY q^X q^tdƒ‚tjdkrä|j ¡  ¡ }|  d|¡ W 5 Q R X d S )NaX  if 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!  rB   rš   r%   r£   rf   FrÌ  zJA SharedMemory segment was leaked after a process was abruptly terminated.r   z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)Ú
subprocessÚPopenré   Ú
executableÚPIPEr"  ÚreadlineÚstripÚdecoderŸ   r)   rC   rD   r¢   Úminr   rÂ  rÍ  rg   r6   r"   r#  rJ  r¬   )r@   r   r“   r"   ÚdeadlinerG   rÕ  rM  r   r   r   Ú4test_shared_memory_cleaned_after_process_terminationñ  s2    
þ

þzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rJ   rK   rL   r_   r™  rÃ  rÅ  rÐ  rÑ  r:   r6  r6   r"   r×  rØ  rß  rê  rï  rú  r   r   r   r   rÁ  ¢  s   
[

`rÁ  c                   @   s<   e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zd
d„ Z	dS )Ú_TestFinalizerB  c                 C   s   t j ¡ | _t j ¡  d S r   )r   Ú_finalizer_registryr   Úregistry_backupr  rc   r   r   r   r   $  s    z_TestFinalize.setUpc                 C   s   |   tj¡ tj | j¡ d S r   )rƒ   r   rü  Úupdaterý  rc   r   r   r   r  (  s    z_TestFinalize.tearDownc                 C   s  G dd„ dt ƒ}|ƒ }tj||jdd ~|ƒ }tj||jdd}|ƒ  |ƒ  ~|ƒ }tj||jdd |ƒ }tj||jddd	 |ƒ }tj||jd
dd	 |ƒ }	tj|	|jddd	 |ƒ }
tj|
|jddd	 tjd |jddd	 tjd |jddd	 t ¡  | ¡  t d¡ d S )Nc                   @   s   e Zd ZdS )z)_TestFinalize._test_finalize.<locals>.FooNrŒ  r   r   r   r   r  .  s   r  )rV   r¿   )rW   )rj   )Úd10rR   )rE   Úexitpriority)Úd01r   )Úd02)Úd03©r®   iöÿÿÿ)ÚSTOPiœÿÿÿ)r  r   ÚFinalizer˜   Z_exit_functionr   r6   Ú_exit)r‡   r%  r  rV   rW   Zclose_brj   rÿ  r  r  r  r   r   r   Ú_test_finalize,  s0    z_TestFinalize._test_finalizec              
   C   sh   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  dd„ t|jdƒD ƒ}|  |dddd	d
ddg¡ d S )Nr‰   Tc                 S   s   g | ]}|‘qS r   r   )r÷   r}  r   r   r   rø   Z  s     z/_TestFinalize.test_finalize.<locals>.<listcomp>r  rV   rW   rÿ  r  r  r  r®   )	rŒ   r   r  ru   rŽ   r   r:  r   rZ   )r@   r%  r8  r“   rÝ   r   r   r   Útest_finalizeR  s    z_TestFinalize.test_finalizec              	      sÜ   dd„ ‰G ‡fdd„dt ƒ‰ d‰d ‰‡‡fdd„}‡ ‡‡fdd	„}t ¡ }t ¡ }zft d
¡ t ddd¡ tj	|dtj	|dg}t
j |¡ t d¡ d‰W 5 Q R X ˆd k	r¶ˆ‚W 5 t |¡ tj|Ž  t ¡  X d S )Nc                   S   s   d S r   r   r   r   r   r   Úcb_  s    z,_TestFinalize.test_thread_safety.<locals>.cbc                       s   e Zd Z‡ fdd„ZdS )z-_TestFinalize.test_thread_safety.<locals>.Fooc                    s"   | | _ tj| ˆ t dd¡d d S )NrR   r¶   )r   )rî   r   r  r§  Úrandintrc   ©r
  r   r   rA   c  s    z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rJ   rK   rL   rA   r   r  r   r   r  b  s   r  Fc               
      sP   ˆsLt  t ¡ d ¡ zt ¡  W q  tk
rH }  z| ‰ W 5 d } ~ X Y q X q d S r‚  )rD   r¢   r§  r   Z_run_finalizersrÈ  r  )rÎ  Úfinishr   r   Úrun_finalizersk  s    z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc               
      sb   i } ˆs^z$‡ fdd„t dƒD ƒ| t d¡< W q tk
rZ } z|‰|  ¡  W 5 d }~X Y qX qd S )Nc                    s   h | ]
}ˆ ƒ ’qS r   r   rö   )r  r   r   Ú	<setcomp>}  s     zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÂ   rf   )r×   r§  ÚgetrandbitsrÈ  r  )r+  r®   )r  rÎ  r  r   r   Úmake_finalizersv  s    $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rf   r~   r¼  T)r  ré   Úgetswitchintervalrï   r³  Úsetswitchintervalr´  rð   r°   r  r  r   Zstart_threadsrD   r¢   )r@   r  r  Zold_intervalZold_thresholdrP   r   )r  r
  rÎ  r  r   Útest_thread_safety]  s,    


ÿ


z _TestFinalize.test_thread_safetyN)
rJ   rK   rL   r_   r   r  r3  r  r	  r  r   r   r   r   rû     s   
%rû  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_TestImportStarc                 C   sh   dd l }tj tj¡}tj | |¡d¡}|  |¡}dd„ |D ƒ}dd„ |D ƒ}| d¡ | 	d¡ |S )Nr   z*.pyc                 S   s(   g | ] }t j t j |¡d  ¡d ‘qS )rR   r   )r6   ÚpathÚsplitextÚsplit)r÷   rL  r   r   r   rø   Ÿ  s     z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zmultiprocess.r   )r÷   r  r   r   r   rø      s     zmultiprocess.__init__r  )
Úglobr6   r  Údirnamer   Ú__file__r   Úescaper  rÜ   )r@   r  ÚfolderÚpatternÚfilesÚmodulesr   r   r   Úget_module_namesš  s    


z _TestImportStar.get_module_namesc                 C   s´   |   ¡ }tjdkr2| d¡ | d¡ | d¡ n| d¡ tsJ| d¡ td kr\| d¡ |D ]N}t|ƒ tj| }|  t	|dƒ|¡ |j
D ]}|  t	||ƒd||f ¡ qŽq`d S )	Nr'   zmultiprocess.popen_forkzmultiprocess.popen_forkserverzmultiprocess.popen_spawn_posixzmultiprocess.popen_spawn_win32zmultiprocess.sharedctypesÚ__all__z%r does not have attribute %r)r!  ré   rý   r  rm  r1   r…  r   rs   rÃ   r"  )r@   r   r"   ÚmodÚattrr   r   r   Útest_import¥  s&    








þz_TestImportStar.test_importN)rJ   rK   rL   r!  r%  r   r   r   r   r  ˜  s   r  c                   @   s,   e Zd ZdZdd„ Zedd„ ƒZdd„ ZdS )	Ú_TestLoggingrB  c                 C   sD   t  ¡ }| tj¡ |  |d k	¡ | d¡ | d¡ | t¡ d S )Nzthis will not be printedznor will this)	r   Ú
get_loggerÚsetLevelr   Ú
SUBWARNINGrs   ÚdebugÚinfoÚ	LOG_LEVEL)r@   Úloggerr   r   r   Útest_enable_loggingÇ  s    

z _TestLogging.test_enable_loggingc                 C   s   t  ¡ }| | ¡ ¡ d S r   )r   r'  r˜   ÚgetEffectiveLevel)r‡   r%  r-  r   r   r   Ú_test_levelÏ  s    z_TestLogging._test_levelc           	      C   sÜ   d}d}t  ¡ }t ¡ }|j}t jdd\}}| |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | tj¡ | |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | |¡ |jtd d S )Nr-  é%   Frˆ   r‰   )Úlevel)r   r'  ÚloggingÚ	getLoggerr2  rŒ   r(  r   r0  rŽ   rZ   r   r   r   ÚNOTSETr,  )	r@   ZLEVEL1ZLEVEL2r-  Zroot_loggerÚ
root_levelrI  rJ  r“   r   r   r   Ú
test_levelÔ  s*    


z_TestLogging.test_levelN)rJ   rK   rL   r_   r.  r3  r0  r7  r   r   r   r   r&  Ã  s
   
r&  c                   @   s6   e Zd ZdZedd„ ƒZe ee	dƒd¡dd„ ƒZ
dS )	Ú_TestPollEintrrB  c                 C   s   t  d¡ t |tj¡ d S r‚  )rD   r¢   r6   rÍ   rÄ   ÚSIGUSR1)r‡   r†   r   r   r   Ú_killer  s    
z_TestPollEintr._killerr9  úrequires SIGUSR1c              
      s¨   dg‰ ‡ fdd„}t  ¡ }t tj|¡}zj| j| j|fd}| ¡  z$| jtj	dd}| ¡  | ¡  W 5 | ¡  X |  
ˆ d ¡ |  |jd¡ W 5 t tj|¡ X d S )NFc                     s   dˆ d< d S )NTr   r   r¿   ©Z
got_signalr   r   Úrecord  s    z._TestPollEintr.test_poll_eintr.<locals>.recordr‰   )r£   r   )r6   rz   rÄ   r9  r   r:  rŽ   r   rD   r¢   rs   rZ   r{   )r@   r=  r†   Z
oldhandlerZkillerr“   r   r<  r   Útest_poll_eintr  s    
z_TestPollEintr.test_poll_eintrN)rJ   rK   rL   r_   r3  r:  r:   r4  rÃ   rÄ   r>  r   r   r   r   r8    s
   
r8  c                   @   s    e Zd Ze ed¡dd„ ƒZdS )ÚTestInvalidHandleúskipped on Windowsc              	   C   sZ   t j d¡}z*z| ¡  W n ttfk
r2   Y nX W 5 d |_X |  ttft jjd¡ d S )NiÈM®r5   )r   rq  Ú
ConnectionZ_handlerž   r9   r3  rä   rf  r   r   r   Útest_invalid_handles,  s    

 ÿz&TestInvalidHandle.test_invalid_handlesN)rJ   rK   rL   r:   r6  ÚWIN32rB  r   r   r   r   r?  *  s   
r?  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	OtherTestc                 C   s,   G dd„ dt ƒ}|  tjtjj|ƒ d¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc                 S   s   dS )Nó   something bogusr   ©r@   rU  r   r   r   r:  A  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   ©r@   rZ  r   r   r   r<  C  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rJ   rK   rL   r:  r<  r   r   r   r   Ú_FakeConnection@  s   rH  ó   abc)r  rä   r   ÚAuthenticationErrorrq  Zdeliver_challenge©r@   rH  r   r   r   Ú#test_deliver_challenge_auth_failure?  s     þz-OtherTest.test_deliver_challenge_auth_failurec                 C   s,   G dd„ dt ƒ}|  tjtjj|ƒ d¡ d S )Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc                 S   s
   d| _ d S rÎ  )r  rc   r   r   r   rA   K  s    zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__c                 S   s2   |  j d7  _ | j dkr tjjS | j dkr.dS dS )NrR   r£   rE  rÂ  )r  r   rq  Z	CHALLENGErF  r   r   r   r:  M  s    

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   rG  r   r   r   r<  T  s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rJ   rK   rL   rA   r:  r<  r   r   r   r   rH  J  s   rH  rI  )r  rä   r   rJ  rq  Zanswer_challengerK  r   r   r   Ú"test_answer_challenge_auth_failureI  s     þz,OtherTest.test_answer_challenge_auth_failureN)rJ   rK   rL   rL  rM  r   r   r   r   rD  =  s   
rD  c                 C   s   |  j d7  _ d S rQ   )r  )Únsr   r   r   Úinitializer^  s    rO  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestInitializersc                 C   s"   t  ¡ | _| j ¡ | _d| j_d S rÎ  )r   ÚManagerÚmgrr€  rN  r  rc   r   r   r   r   b  s    
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )rR  r  r   rc   r   r   r   r  g  s    
zTestInitializers.tearDownc                 C   sN   t j ¡ }|  t|jd¡ | t| jf¡ |  | jj	d¡ | 
¡  | ¡  d S rQ   )r   rÒ  ÚSyncManagerrä   Ú	TypeErrorrŽ   rO  rN  rZ   r  r  r   )r@   r  r   r   r   Útest_manager_initializerk  s    
z)TestInitializers.test_manager_initializerc                 C   sH   | j ttjdd t dt| jf¡}| ¡  | ¡  |  | jj	d¡ d S )NrR   )rO  )
rä   rT  r   r“  rO  rN  r   r   rZ   r  rÕ   r   r   r   Útest_pool_initializers  s
    z&TestInitializers.test_pool_initializerN)rJ   rK   rL   r   r  rU  rV  r   r   r   r   rP  a  s   rP  c                 C   s,   z| j dd}W n tjk
r&   Y nX d S )NF)Úblock)r­   rl  rv  )ri   Úitemr   r   r   Ú_this_sub_process  s    rY  c                  C   s2   t  ¡ } t jt| fd}d|_| ¡  | ¡  d S rÓ   )r   r   r   rY  ru   rŽ   r   )r   ZsubProcr   r   r   Ú_test_process…  s
    rZ  c                 C   s   | |  S r   r   r…  r   r   r   Ú_afuncŒ  s    r[  c               
   C   s:   t jdd} |  tdddddddg¡}|  ¡  |  ¡  d S )	Nri  rB  rR   r£   rX  rf   rd  rj  )r   r“  rœ  r[  r   r   )r”  r0  r   r   r   Úpool_in_process  s    r\  c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
Ú
_file_likec                 C   s   || _ d | _d S r   )Ú	_delegateÚ_pid)r@   Zdelegater   r   r   rA   –  s    z_file_like.__init__c                 C   s$   t  ¡ }|| jkr|| _g | _| jS r   )r6   rz   r_  Ú_cacher÷  r   r   r   Úcacheš  s
    
z_file_like.cachec                 C   s   | j  |¡ d S r   )ra  rÜ   rG  r   r   r   rƒ  £  s    z_file_like.writec                 C   s   | j  d | j¡¡ g | _d S )Nr8  )r^  rƒ  r   ra  r`  rc   r   r   r   Úflush¦  s    z_file_like.flushN)rJ   rK   rL   rA   Úpropertyra  rƒ  rb  r   r   r   r   r]  •  s
   
r]  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestStdinBadfiledescriptorc                 C   s    t jtd}| ¡  | ¡  d S ©Nr~   )r   r   rZ  rŽ   r   )r@   r  r   r   r   Útest_queue_in_process¬  s    z0TestStdinBadfiledescriptor.test_queue_in_processc                 C   s    t jtd}| ¡  | ¡  d S re  )r   r   r\  rŽ   r   rÕ   r   r   r   Útest_pool_in_process±  s    z/TestStdinBadfiledescriptor.test_pool_in_processc                    sJ   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  | ¡ dksFt‚d S )Nrž  c                      s   ˆ   ¡ S r   )rb  r   ©Zfliker   r   rÁ  º  rÂ  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>r~   )	r  r  r]  rƒ  r   r   rb  rÍ  rg   )r@   Úsior  r   rh  r   Útest_flushing¶  s    
z(TestStdinBadfiledescriptor.test_flushingN)rJ   rK   rL   rf  rg  rj  r   r   r   r   rd  ª  s   rd  c                   @   sl   e Zd Zedd„ ƒZddd„Zedd„ ƒZddd	„Zd
d„ Zdd„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ ZdS )ÚTestWaitc                 C   sB   t dƒD ],}|r"t t ¡ d ¡ | |t ¡ f¡ q| ¡  d S )NrÂ   r%   )r×   rD   r¢   r§  r˜   r6   rz   r   )r‡   rO  ÚslowrÚ   r   r   r   Ú_child_test_waitÁ  s
    zTestWait._child_test_waitFc              	      s  ddl m} g }g ‰ g }tdƒD ]^}tjdd\}}tj| j||fd}d|_| ¡  | 	¡  | 
|¡ ˆ  
|¡ |  |j¡ q |rÒ||ƒD ]B}z| ¡ }	W n& tk
rÂ   | |¡ | 	¡  Y qŒX | 
|	¡ qŒq€| ¡  t‡ fdd	„td
ƒD ƒƒ}
|  ||
¡ d S )Nr   r(   ri  Frˆ   r‰   Tc                 3   s"   | ]}ˆ D ]}||j fV  q
qd S r   ró  )r÷   rÚ   r“   ©r   r   r   rj  ä  s       z%TestWait.test_wait.<locals>.<genexpr>rÂ   )Úmultiprocess.connectionr)   r×   r   rŒ   r   rm  ru   rŽ   r   rÜ   ræ   r   r   rF  r  r¬  rl  rZ   )r@   rl  r)   ÚreadersÚmessagesrÚ   rD  rO  r“   r=  rÞ   r   rn  r   Ú	test_waitÉ  s0    


zTestWait.test_waitc                 C   sV   t   ¡ }| |¡ tdƒD ].}|r4t t ¡ d ¡ | d|  d¡¡ q| ¡  d S )NrÂ   r%   ú%s
r˜  )	r‘  r)  r×   rD   r¢   r§  r–  r   r   )r‡   r&  rl  r   rÚ   r   r   r   Ú_child_test_wait_socketç  s    
z TestWait._child_test_wait_socketc                 C   s4  ddl m} t tjjdf¡}| ¡ }g }g }i }tdƒD ]<}t	j
| j||fd}	d|	_|	 ¡  | |	¡ |  |	j¡ q:tdƒD ]"}| ¡ \}
}| |
¡ g ||
< q€| ¡  |rð||ƒD ]4}
|
 d¡}|sÞ| |
¡ |
 ¡  q¸||
  |¡ q¸q¬d dd	„ td
ƒD ƒ¡ d¡}| ¡ D ]}|  d |¡|¡ qd S )Nr   r(   ri  r‰   Tr-  r8  c                 s   s   | ]}d | V  qdS )rs  Nr   rö   r   r   r   rj    s     z,TestWait.test_wait_socket.<locals>.<genexpr>rÂ   r˜  rÂ  )ro  r)   r‘  r’  r  r   r/  r“  r×   r   r   rt  ru   rŽ   rÜ   ræ   r   rw  r   r   r  r   r6  rZ   )r@   rl  r)   rz  r6  rp  r   ZdicrÚ   r“   rD  rê  r=  rÞ   Úvr   r   r   Útest_wait_socketñ  s:    ÿ





zTestWait.test_wait_socketc                 C   s   |   d¡ d S r•  )rr  rc   r   r   r   Útest_wait_slow  s    zTestWait.test_wait_slowc                 C   s   |   d¡ d S r•  )rv  rc   r   r   r   Útest_wait_socket_slow  s    zTestWait.test_wait_socket_slowc                 C   sÔ   ddl m} d}t ¡ \}}ttdtjƒƒ }|||g|ƒ}ttdtjƒƒ | }|  |g ¡ |  ||d ¡ |  ||d ¡ | 	d ¡ ttdtjƒƒ }|||gdƒ}ttdtjƒƒ | }|  ||g¡ |  |d¡ d S )	Nr   r(   rf   rB   r£   r  r  çš™™™™™Ù?)
ro  r)   r   rŒ   rC   rD   rZ   rÂ  rÔ  r˜   )r@   r)   rÞ   rV   rW   rŽ   r\   rŠ  r   r   r   Útest_wait_timeout  s    
zTestWait.test_wait_timeoutc                 C   s   |  ¡  t |¡ d S r   )r¤  rD   r¢   )r‡   r®  Zperiodr   r   r   Úsignal_and_sleep1  s    zTestWait.signal_and_sleepc                 C   s¶  ddl m} d}dd„ }t d¡}t ¡ \}}tj| j||fd}| ¡  |  |j	t
¡ |  |jdd¡ ttd	tjƒƒ }|||j	|g|d ƒ}	ttd	tjƒƒ | }
|  |	|j	g¡ |  |
|d
 ¡ |  |
|d
 ¡ | d ¡ ttd	tjƒƒ }|||j	|gdƒ}	ttd	tjƒƒ | }
|  ||	ƒ||j	|gƒ¡ |  |
d¡ | d ¡ ttd	tjƒƒ }|||j	|gdƒ}	ttd	tjƒƒ | }
|  ||	ƒ|||j	|gƒ¡ |  |
d¡ | ¡  | ¡  d S )Nr   r(   rX  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rÙ   r…  r   r   r   rÁ  :  rÂ  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)rá  )rl  )rz  r   r   r   rÁ  :  rÂ  z,TestWait.test_wait_integer.<locals>.<lambda>r‰   r  r   rB   r£   ry  )ro  r)   r   r°  rŒ   r   r{  rŽ   rv   rå   rÑ   rs   r£  rC   rD   rZ   rÂ  rÔ  r˜   rŸ   r   )r@   r)   rÞ   Zsorted_r®  rV   rW   r“   rŽ   r\   rŠ  r   r   r   Útest_wait_integer6  s>    
ÿ

zTestWait.test_wait_integerc                 C   sv   ddl m} t ¡ \}}ttdtjƒƒ }||gdd}ttdtjƒƒ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   r(   rB   r5   r   rR   )	ro  r)   r   rŒ   rC   rD   rZ   rÂ  r   )r@   r)   rV   rW   rG   r\   r   r   r   Útest_neg_timeouta  s    zTestWait.test_neg_timeoutN)F)F)rJ   rK   rL   r3  rm  rr  rt  rv  rw  rx  rz  r{  r|  r}  r   r   r   r   rk  ¿  s   


	
#
+rk  c                   @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyr@  c              	   C   s&   |   t¡ tj d¡ W 5 Q R X d S )Nz\\.\test©rä   r9   r   rq  rs  rc   r   r   r   Útest_invalid_familyr  s    z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc              	   C   s&   |   t¡ tj d¡ W 5 Q R X d S )Nz/var/test.piper  rc   r   r   r   Útest_invalid_family_win32w  s    z+TestInvalidFamily.test_invalid_family_win32N)	rJ   rK   rL   r:   r6  rC  r€  r4  r  r   r   r   r   r~  p  s   


r~  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )Ú	TestFlagsc                 C   s   |  ttjƒ¡ d S r   )r˜   r*  ré   Úflags©r‡   r%  r   r   r   Úrun_in_grandchild  s    zTestFlags.run_in_grandchildc                 C   sr   dd l }tjdd\}}tj| j|fd}| ¡  | ¡ }| ¡  | ¡  | ¡  t	t
jƒ|f}t| |¡ƒ d S )Nr   Frˆ   r‰   )Újsonr   rŒ   r   r…  rŽ   r   r   r   r*  ré   rƒ  Úprintrí  )r‡   r†  rD  rO  r“   Úgrandchild_flagsrƒ  r   r   r   Úrun_in_child…  s    zTestFlags.run_in_childc                 C   sH   dd l }d}t tjdddd|g¡}| | d¡¡\}}|  ||¡ d S )Nr   zBfrom multiprocess.tests import TestFlags; TestFlags.run_in_child()rð  z-Sz-Orû  r˜  )r†  rñ  Úcheck_outputré   ró  rî  r÷  rZ   )r@   r†  ÚprogrZ  Zchild_flagsrˆ  r   r   r   Ú_test_flags’  s    ÿzTestFlags._test_flagsN)rJ   rK   rL   r3  r…  r‰  rŒ  r   r   r   r   r‚  €  s
   

r‚  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTimeoutsc                 C   s>   t  d¡ | d¡ | ¡  tj |¡}| d¡ | ¡  d S )NrR   rÆ  éÈ  )rD   r¢   r˜   r   r   rq  rv  )r‡   Úchildr&  r%  r   r   r   Ú_test_timeout¡  s    


zTestTimeouts._test_timeoutc              	   C   s´   t  ¡ }zšt  d¡ tjdd\}}tjjdd}tj| j||j	fd}| 
¡  | ¡  |  | ¡ d¡ | ¡  | ¡ }|  | ¡ d¡ | ¡  | ¡  t|ƒ W 5 t  |¡ X d S )	Nr%   Trˆ   ÚAF_INETro  r‰   rÆ  rŽ  )r‘  ÚgetdefaulttimeoutÚsetdefaulttimeoutr   rŒ   rq  rs  r   r  r&  rŽ   r   rZ   r   rw  r   )r@   Zold_timeoutÚparentr  rz  r“   r%  r   r   r   r‹  ª  s$    
ÿzTestTimeouts.test_timeoutN)rJ   rK   rL   r3  r  r‹  r   r   r   r   r     s   
r  c                   @   s   e Zd Zdd„ ZdS )ÚTestNoForkBombc                 C   s   t  ¡ }tj tj t¡d¡}|dkrVtjj	 
||¡\}}}|  |d¡ |  d|¡ n6tjj	j||ftŽ\}}}|  | ¡ d¡ |  |d¡ d S )Nzmp_fork_bomb.pyr  rÂ  s   RuntimeErrors   123)r   rû   r6   r  r   r  r  r  r   rü  Zassert_python_failurerZ   r¬   rý  rþ  rZ  )r@   rþ   r"   rë   r  rM  r   r   r   Útest_noforkbombÃ  s    zTestNoForkBomb.test_noforkbombN)rJ   rK   rL   r–  r   r   r   r   r•  Â  s   r•  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestForkAwareThreadLockc                 C   sV   |dkr:t j| j|d |fd}| ¡  | ¡  t|ƒ n| ttj	ƒ¡ | ¡  d S )NrR   r‰   )
r   r   r  rŽ   r   r   r˜   rx   r   Ú_afterfork_registry)r‡   rÆ  r%  r“   r   r   r   r  Ø  s    
zTestForkAwareThreadLock.childc                 C   sd   t  d¡\}}t ¡ }ttjƒ}t j| jd|fd}| ¡  | 	¡  | 
¡ }t|ƒ |  ||¡ d S )NFrf   r‰   )r   rŒ   r   ZForkAwareThreadLockrx   r˜  r   r  rŽ   r   r   r   ZassertLessEqual)r@   rD  rO  rz  Zold_sizer“   Únew_sizer   r   r   r¨  ã  s    
z!TestForkAwareThreadLock.test_lockN)rJ   rK   rL   r3  r  r¨  r   r   r   r   r—  Ó  s   

r—  c                   @   s0   e Zd Zdd„ Zdd„ Zedd„ ƒZdd„ Zd	S )
ÚTestCloseFdsc                 C   sZ   t rt ¡  ¡ S t ¡  ¡ }g }|dk r>| |¡ t |¡}q |D ]}t |¡ qB|S d S )Nrõ  )rC  r‘  ÚdetachrÜ   r6   Údupr   )r@   rU  Úto_closer0  r   r   r   Úget_high_socket_fdô  s    
zTestCloseFds.get_high_socket_fdc                 C   s,   t rtjtjtj|d ¡  n
t |¡ d S )N)r@  )rC  r‘  r‘  ÚSOCK_STREAMr   r6   )r@   rU  r   r   r   r     s    zTestCloseFds.closec              
   C   sZ   zt  |t jt j¡}W n, tk
rB } z| |¡ W 5 d }~X Y nX | ¡  | d ¡ d S r   )r‘  Úfromfdr‘  rŸ  rÈ  r˜   r   )r‡   r%  rU  r   r®   r   r   r   Ú_test_closefds  s    zTestCloseFds._test_closefdsc              	   C   sÄ   t st d¡‚t ¡ \}}|  ¡ }z8tj| j||fd}| 	¡  | ¡  | 
¡ }t|ƒ W 5 |  |¡ | ¡  | ¡  X t ¡ dkr’|  |d ¡ n.d}|  |t¡ |  |jtjkpº|j|k|¡ d S )Nzrequires fd picklingr‰   r  i6'  )rm  r:   r;   r   rŒ   rž  r   r   r¡  rŽ   r   r   rû   rñ   rv   r3  rs   r4  rT  Úwinerror)r@   rI  rJ  rU  r“   r®   ZWSAENOTSOCKr   r   r   Útest_closefd  s.    
ÿ

 ÿzTestCloseFds.test_closefdN)rJ   rK   rL   rž  r   r3  r¡  r£  r   r   r   r   rš  ò  s
   
	rš  c                   @   sf   e Zd ZeejejƒZedd„ ƒZ	e
 eedƒd¡dd„ ƒZedd„ ƒZe
 eedƒd¡d	d
„ ƒZdS )ÚTestIgnoreEINTRc                 C   sF   dd„ }t   t j|¡ | d¡ | ¡ }| |¡ | d| j ¡ d S )Nc                 S   s   d S r   r   ©r.  Úframer   r   r   rÁ   ;  s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)rÄ   r9  r˜   r   r<  ÚCONN_MAX_SIZE)r‡   r%  rÁ   r0  r   r   r   Ú_test_ignore9  s    

zTestIgnoreEINTR._test_ignorer9  r;  c                 C   sØ   t  ¡ \}}z¼t j| j|fd}d|_| ¡  | ¡  |  | ¡ d¡ t	 
d¡ t |jtj¡ t	 
d¡ | d¡ |  | ¡ d¡ t	 
d¡ t |jtj¡ |  | ¡ d| j ¡ t	 
d¡ | ¡  W 5 | ¡  X d S )Nr‰   Tr§  r%   iÒ  r¨  )r   rŒ   r   r   rª  ru   rŽ   rZ   r   rD   r¢   r6   rÍ   r†   rÄ   r9  r˜   r:  r©  r   rh  r   r   r   Útest_ignoreC  s(    ÿ




zTestIgnoreEINTR.test_ignorec              	   C   sN   dd„ }t   t j|¡ tj ¡ $}| |j¡ | ¡ }| d¡ W 5 Q R X d S )Nc                 S   s   d S r   r   r¥  r   r   r   rÁ   \  s    z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerÚwelcome)rÄ   r9  r   rq  rs  r˜   r&  rw  )r‡   r%  rÁ   rz  rV   r   r   r   Ú_test_ignore_listenerZ  s    z%TestIgnoreEINTR._test_ignore_listenerc                 C   s˜   t  ¡ \}}z|t j| j|fd}d|_| ¡  | ¡  | ¡ }t 	d¡ t
 |jtj¡ t 	d¡ t j |¡}|  | ¡ d¡ | ¡  W 5 | ¡  X d S )Nr‰   Tr%   r¬  )r   rŒ   r   r   r­  ru   rŽ   r   rD   r¢   r6   rÍ   r†   rÄ   r9  rq  rv  rZ   r   )r@   r%  r8  r“   r&  rx  r   r   r   Útest_ignore_listenerd  s     ÿ

z$TestIgnoreEINTR.test_ignore_listenerN)rJ   rK   rL   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr©  r3  rª  r:   r4  rÃ   rÄ   r«  r­  r®  r   r   r   r   r¤  4  s   
	

	r¤  c                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestStartMethodc                 C   s   |  t ¡ ¡ d S r   )r˜   r   rû   r„  r   r   r   Ú_check_contextx  s    zTestStartMethod._check_contextc                 C   s^   |j dd\}}|j| j|fd}| ¡  | ¡  | ¡ }| ¡  | ¡  |  || ¡ ¡ d S )NFrˆ   r‰   )	rŒ   r   r±  rŽ   r   r   r   rZ   rû   )r@   r›  rD  rO  r“   Zchild_methodr   r   r   Úcheck_context|  s    zTestStartMethod.check_contextc              	   C   s€   dD ]v}zt  |¡}W n tk
r.   Y qY nX |  | ¡ |¡ |  | ¡ |¡ |  t|jd¡ |  t|jd ¡ |  |¡ qd S )N©r  rô   r)  rô   )	r   rœ  r9   rZ   rû   rñ   rä   Úset_start_methodr²  )r@   Úmethodr›  r   r   r   rÅ  †  s    
zTestStartMethod.test_contextc              
   C   sÞ   t  t¡ d}t  ¡ }z¦dD ]œ}zt j|dd W n tk
rJ   Y qY nX |  t  ¡ |¡ t  ¡ }|  | ¡ |¡ |  t	|ƒj
 ¡  |¡¡ |  |jj
 ¡  |¡¡ |  t ¡ |d7 }qW 5 t j|dd X |  |d¡ d S )Nr   T©Úforcer³  rR   )r   Úset_forkserver_preloadÚPRELOADrû   r´  r9   rZ   rœ  rs   rª   rJ   ÚlowerÚ
startswithr   r²  r‰  )r@   r  Z
old_methodrµ  r›  r   r   r   Útest_set_get’  s(    

ÿ
zTestStartMethod.test_set_getc                 C   s`   t  ¡ }tjdkr"|  |dg¡ n:|  |ddgkpX|ddgkpX|dddgkpX|dddgk¡ d S )Nr'   rô   r  r)  )r   Zget_all_start_methodsré   rý   rZ   rs   )r@   Úmethodsr   r   r   Útest_get_all¨  s    

ÿþýzTestStartMethod.test_get_allc                 C   s†   t  ¡ dkr|  d¡ tj tj t¡d¡}tj	j
j|ftŽ\}}}| ¡ }| ¡ }| ¡ dksh|dkr‚t|ƒ t|ƒ |  d¡ d S )Nr)  z*test only relevant for 'forkserver' methodzmp_preload.pyÚokr8  z(failed spawning forkserver or grandchild)r   rû   ro   r6   r  r   r  r  r  r   rü  rý  rþ  r÷  rZ  r‡  r†  )r@   r"   rë   r  rM  r   r   r   Útest_preload_resources²  s    
z&TestStartMethod.test_preload_resourcesN)
rJ   rK   rL   r3  r±  r²  rÅ  r¼  r¾  rÀ  r   r   r   r   r°  w  s   


r°  rb  c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	dd„ Z
dS )ÚTestResourceTrackerc                 C   s´  d}t jD ]¢}| j|dŠ |dkr4W 5 Q R £ q
t ¡ \}}tjtjdd|j	||dg|gtj
d}t |¡ t|dd	d
*}| ¡  ¡  d¡}| ¡  ¡  d¡}W 5 Q R X t||ƒ | ¡  | ¡  ttdtjƒƒ d }	ttdtjƒƒ |	k rTt d¡ zt||ƒ W qÞ tk
rP }
 z$|  |
jtjtjf¡ W Y ¢qdW 5 d }
~
X Y qÞX qÞtd|› dƒ‚|j ¡  d¡}|j ¡  d 	|¡}|  ||¡ |  |d| ¡ W 5 Q R X q
d S )Na"  if 1:
            import time, os, tempfile
            import multiprocess as mp
            from multiprocess import resource_tracker
            from multiprocess.shared_memory import SharedMemory

            mp.set_start_method("spawn")
            rand = tempfile._RandomNameSequence()


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


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

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

            time.sleep(10)
        )r#   Znooprð  rû  )rO  r#   )Úpass_fdsr#  r_  TrP  r˜  rB   rš   r  zA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)r    r!   ZsubTestr6   Úpiperñ  rò  ré   ró  rp   rô  r   rI  rõ  rZ  r÷  r$   rŸ   r)   rC   rD   r¢   r3  r¬   r4  ÚENOENTÚEINVALrg   r#  rJ  ÚassertRegex)r@   r   r#   rD  rO  r“   rL  Zname1Zname2rù  r®   rM  rÞ   r   r   r   Ú_test_resource_trackerÃ  sN      ÿý



ÿ
þz*TestResourceTracker._test_resource_trackerc           
   	   C   s4  ddl m} |j}|d k	r4t |tj¡ t |d¡ t 	¡  t 
d¡ | ¡  W 5 Q R X |j}t ||¡ t d¡ t d¡}tj	ddž}t 
d¡ | ¡ }| ¡  | ¡  t |¡}~t ¡  |  |ƒ ¡ |r|  t|ƒd	¡ |d }	|  t|	jtƒ¡ |  d
t|	jƒk¡ n|  t|ƒd¡ W 5 Q R X d S )Nr   ©Ú_resource_trackerrâ  rŽ  rô   T)r=  ÚalwaysrR   zresource_tracker: process died) Úmultiprocess.resource_trackerrÉ  r_  r6   rÍ   rÄ   rÎ   Úwaitpidrç  rè  ré  r-  rD   r¢   r   rœ  r°  r£  r¤  rí   rî   rï   rð   rŠ   rZ   rx   rs   Ú
issubclassÚcategoryÚUserWarningr>  Úmessage)
r@   r.  Z
should_dierÉ  r†   r›  Zall_warnr®  rò   Zthe_warnr   r   r   Úcheck_resource_tracker_death  s:    





ÿz0TestResourceTracker.check_resource_tracker_deathc                 C   s   |   tjd¡ d S r’  )rÑ  rÄ   r0  rc   r   r   r   Útest_resource_tracker_sigint2  s    z0TestResourceTracker.test_resource_tracker_sigintc                 C   s   |   tjd¡ d S r’  )rÑ  rÄ   rÊ   rc   r   r   r   Útest_resource_tracker_sigterm6  s    z1TestResourceTracker.test_resource_tracker_sigtermc                 C   s   |   tjd¡ d S r•  )rÑ  rÄ   rÎ   rc   r   r   r   Útest_resource_tracker_sigkill:  s    z1TestResourceTracker.test_resource_tracker_sigkillc                 C   s<   ddl m} | ¡  |jd |fk}|| ¡ M }|  |¡ d S )Nr   rÈ  )rË  rÉ  r-  r_  Z_check_aliver˜   )r%  r†   rÉ  Zreusedr   r   r   Ú_is_resource_tracker_reused>  s
    z/TestResourceTracker._is_resource_tracker_reusedc                 C   st   ddl m} | ¡  |j}tjdd\}}tj| j||fd}| ¡  | 	¡ }| 
¡  | ¡  | ¡  |  |¡ d S )Nr   rÈ  Frˆ   r‰   )rË  rÉ  r-  r_  r   rŒ   r   rÕ  rŽ   r   r   r   rs   )r@   rÉ  r†   rD  rO  r“   Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reusedH  s    ÿz0TestResourceTracker.test_resource_tracker_reusedN)rJ   rK   rL   rÇ  rÑ  rÒ  rÓ  rÔ  r™  rÕ  rÖ  r   r   r   r   rÁ  ¿  s   J%
	rÁ  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestSimpleQueuec                 C   s8   |  ¡  z | | ¡ ¡ | | ¡ ¡ W 5 | ¡  X d S r   )r)   rç   rh   r]  rs  r   r   r   Ú_test_empty]  s
    zTestSimpleQueue._test_emptyc                 C   s¢   t  ¡ }t  ¡ }t  ¡ }t j| j|||fd}d|_| ¡  |  | ¡ ¡ | 	¡  | 
¡  |  | ¡ ¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ ¡ | ¡  d S )Nr‰   TF)r   ÚSimpleQueuer§   r   rØ  ru   rŽ   rs   r]  rç   r)   rƒ   rZ   r­   r   )r@   r   re  rf  r  r   r   r   Ú
test_emptyg  s"    þzTestSimpleQueue.test_emptyN)rJ   rK   rL   r3  rØ  rÚ  r   r   r   r   r×  [  s   
	r×  c                   @   s   e Zd Zdd„ ZdS )ÚTestPoolNotLeakOnFailurec              	      sz   d‰g ‰ G ‡ ‡fdd„dƒ}|   td¡0 tjjdtjj|dd}| ¡  | 	¡  W 5 Q R X |  
tdd	„ ˆ D ƒƒ¡ d S )
NrX  c                       s<   e Zd Z‡ fdd„Z‡fdd„Zdd„ Zdd„ Zd	d
„ ZdS )zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                    s    d| _ d | _d | _ˆ  | ¡ d S )NzFake Process)r"   r{   rË  rÜ   )r@   r¦   )Úforked_processesr   r   rA   ‰  s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__c                    s"   ˆ dkrt dƒ‚ˆ d8 ‰ d| _d S )Nr   úManually induced OSErrorrR   rð  )r3  rË  rc   )Úwill_fail_inr   r   rŽ     s    zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startc                 S   s
   d| _ d S )NÚstoppingrÊ  rc   r   r   r   rŸ   –  s    z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatec                 S   s   | j dkrd| _ d S )Nrß  ÚstoppedrÊ  rc   r   r   r   r   ™  s    
zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joinc                 S   s   | j dkp| j dkS )Nrð  rß  rÊ  rc   r   r   r   rt     s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rJ   rK   rL   rA   rŽ   rŸ   r   rt   r   ©rÜ  rÞ  r   r   ÚFailingForkProcessˆ  s
   râ  rÝ  rf   )r   )Úcontextc                 s   s   | ]}|  ¡ V  qd S r   rö  )r÷   r   r   r   r   rj  ¦  s     zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)rŸ  r3  r   r”  r“  r:   ZmockZ	MagicMockr   r   rƒ   ræ  )r@   râ  r“   r   rá  r   Útest_release_unused_processes‚  s    ÿ
ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rJ   rK   rL   rä  r   r   r   r   rÛ  €  s   rÛ  c                   @   sd  e Zd ZdZejjZdd„ Zdd„ Z	e
dd„ ƒZeZdd	„ Zd
d„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdHdd„Ze
dd„ ƒZdIdd„Ze
dd„ ƒZdJdd„Zdd„ Ze
d d!„ ƒZd"d#„ Ze
d$d%„ ƒZd&d'„ Ze
d(d)„ ƒZd*d+„ Ze
d,d-„ ƒZdKd/d0„Zd1d2„ Z e
d3d4„ ƒZ!d5d6„ Z"e
d7d8„ ƒZ#d9d:„ Z$e
d;d<„ ƒZ%d=d>„ Z&e
d?d@„ ƒZ'dAdB„ Z(e
dCdD„ ƒZ)dEdF„ Z*dGS )LÚTestSyncManagerTypesa}  Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

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

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

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c                 C   s   |   ¡ | _| j ¡  d | _d S r   )Úmanager_classrO   rŽ   r  rc   r   r   r   r   Á  s    

zTestSyncManagerTypes.setUpc                 C   sB   | j d k	r(| j  ¡ r(| j  ¡  | j  ¡  | j ¡  d | _d | _ d S r   )r  rt   rŸ   r   rO   r  rc   r   r   r   r  Æ  s    


zTestSyncManagerTypes.tearDownc                 C   s   t  ¡  d S r   )r   Zreap_childrenr¸   r   r   r   r’  Î  s    zTestSyncManagerTypes.setUpClassc                 C   sˆ   t | jƒ ttdtjƒƒ }d}tt ¡ ƒdkr„t |¡ |d9 }ttdtjƒƒ | }|dkrdtj	_
t	 dt ¡ › d|› d	¡ q„qd S )
NrB   rõ   rR   r£   r¿  Túmultiprocess.Manager still has ú active children after ú seconds)r   r  rC   rD   rx   r   r©   r¢   r  r   Úenvironment_alteredÚprint_warning)r@   Ú
start_timerG   rÑ  r   r   r   Úwait_proc_exitÔ  s    

z#TestSyncManagerTypes.wait_proc_exitc                 C   s@   t j||fd| _d| j_| j ¡  |  ¡  |  | jjd¡ d S )Nr‰   Tr   )r   r   r  ru   rŽ   rí  rZ   r{   )r@   Zworkerr}  r   r   r   Ú
run_workeræ  s
    
zTestSyncManagerTypes.run_workerc                 C   s*   |  ¡ st‚| ¡  | ¡  | d¡ d S ©Nrù   )r  rg   r)   r  ©r‡   r}  r   r   r   rÚ  í  s    z TestSyncManagerTypes._test_eventc                 C   s:   | j  ¡ }| ¡  |  | j|¡ | ¡ r,t‚| d¡ d S rï  )rO   r§   rç   rî  rÚ  r  rg   r)   ©r@   rÖ  r   r   r   rÛ  ô  s
    
zTestSyncManagerTypes.test_eventc                 C   s   |  ¡  d S r   ©r£  rð  r   r   r   Ú
_test_lockû  s    zTestSyncManagerTypes._test_lockr¢  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )rC   rO   rî  ró  r¤  rä   r¾   ©r@   ÚlnamerÖ  r   r   r   r¨  ÿ  s    zTestSyncManagerTypes.test_lockc                 C   s   |  ¡  | ¡  d S r   ©r£  r¤  rð  r   r   r   Ú_test_rlock  s    z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )rC   rO   rî  r÷  rô  r   r   r   rª  
  s    zTestSyncManagerTypes.test_rlockc                 C   s   |  ¡  d S r   rò  rð  r   r   r   r¯    s    z$TestSyncManagerTypes._test_semaphorer°  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )rC   rO   rî  r¯  r¤  )r@   ÚsnamerÖ  r   r   r   r±    s    z#TestSyncManagerTypes.test_semaphorec                 C   s   | j dd d S )Nr³  )rø  )r±  rc   r   r   r   r´    s    z+TestSyncManagerTypes.test_bounded_semaphorec                 C   s   |  ¡  | ¡  d S r   rö  rð  r   r   r   Ú_test_condition  s    z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rO   r¼  rî  rù  rñ  r   r   r   Útest_condition  s    
z#TestSyncManagerTypes.test_conditionc                 C   s   |j dkst‚| ¡  d S re   )r  rg   r  rð  r   r   r   Ú_test_barrier#  s    z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S re   )rO   rý  rî  rû  rñ  r   r   r   r  (  s    z!TestSyncManagerTypes.test_barrierc              	   C   s   | W 5 Q R X d S r   r   rð  r   r   r   Ú
_test_pool,  s    zTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nri  rB  )rO   r“  rî  rü  rñ  r   r   r   Ú	test_pool2  s    zTestSyncManagerTypes.test_poolc                 C   sd   |  ¡ dkst‚| ¡ st‚| ¡ r(t‚| ¡ dks8t‚| ¡ rDt‚| ¡ dksTt‚| ¡ s`t‚d S ©Nr£   rf   rd  )r^  rg   r`  r]  r­   rð  r   r   r   Ú_test_queue6  s    z TestSyncManagerTypes._test_queuer   c                 C   sN   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ | ¡ s>t‚| ¡ rJt‚d S rþ  )rC   rO   rh   rî  rÿ  r]  rg   r`  )r@   ZqnamerÖ  r   r   r   Ú
test_queue@  s    

zTestSyncManagerTypes.test_queuec                 C   s   |   d¡ d S )Nr€  )r   rc   r   r   r   Útest_joinable_queueH  s    z(TestSyncManagerTypes.test_joinable_queuec                 C   st   |d dkst ‚| d¡dks"t ‚| d¡dks4t ‚| ¡  | ¡  |D ]}qHt|ƒdks^t ‚| d¡dkspt ‚d S )Nr   rf   rR   )rg   r  rª  r¬  Úreverserx   rd  )r‡   r}  r0  r   r   r   Ú
_test_listK  s    zTestSyncManagerTypes._test_listc                 C   s>   | j  ¡ }| d¡ |  | j|¡ |r*t‚|  t|ƒd¡ d S )Nrf   r   )rO   r«   rÜ   rî  r  rg   rZ   rx   rñ  r   r   r   r^  W  s
    

zTestSyncManagerTypes.test_listc                 C   sœ   t |ƒdkst‚|d dks t‚| d¡dks2t‚t| ¡ ƒdgksHt‚t| ¡ ƒdgks^t‚t| ¡ ƒdgkstt‚| ¡ ddiksˆt‚| ¡ dks˜t‚d S )NrR   rž  rf   )rž  rf   )	rx   rg   r­   r«   r  rm  r6  r   Úpopitemrð  r   r   r   Ú
_test_dict^  s    zTestSyncManagerTypes._test_dictc                 C   s<   | j  ¡ }d|d< |  | j|¡ |r(t‚|  t|ƒd¡ d S )Nrf   rž  r   )rO   rk  rî  r  rg   rZ   rx   rñ  r   r   r   ro  i  s
    
zTestSyncManagerTypes.test_dictc                 C   s,   |j dkst‚| ¡ dkst‚| d¡ d S )NrR   r£   )r[   rg   r­   rç   rð  r   r   r   Ú_test_valuep  s    z TestSyncManagerTypes._test_valuec                 C   s>   | j  dd¡}|  | j|¡ |  |jd¡ |  | ¡ d¡ d S )NrÚ   rR   r£   )rO   r   rî  r  rZ   r[   r­   rñ  r   r   r   r=  v  s    zTestSyncManagerTypes.test_valuec                 C   sH   |d dkst ‚|d dks t ‚t|ƒdks0t ‚t|ƒddgksDt ‚d S )Nr   rR   r£   )rg   rx   r«   rð  r   r   r   Ú_test_array|  s    z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )NrÚ   r   rR   )rO   rQ  rî  r  rñ  r   r   r   rT  ƒ  s    zTestSyncManagerTypes.test_arrayc                 C   s    |j dkst‚|jdkst‚d S rè  )r0  rg   r1  rð  r   r   r   Ú_test_namespace‡  s    z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S rè  )rO   r€  r0  r1  rî  r  rñ  r   r   r   r  Œ  s    
z#TestSyncManagerTypes.test_namespaceN)r¢  )r¢  )r°  )r   )+rJ   rK   rL   r–  r   rÒ  rS  ræ  r   r  r3  r’  r—  rí  rî  rÚ  rÛ  ró  r¨  r÷  rª  r¯  r±  r´  rù  rú  rû  r  rü  rý  rÿ  r   r  r  r^  r  ro  r  r=  r  rT  r  r  r   r   r   r   rå  ©  sd   











	






rå  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s    t j| ttjddddgd d S )NZSUBDEBUGr)  ÚlicenseZcitation)ÚextraZ	blacklist)r   Zcheck__all__r   r"  rc   r   r   r   Útest__all__”  s     ÿÿzMiscTestCase.test__all__N)rJ   rK   rL   r  r   r   r   r   r	  “  s   r	  c                   @   s$   e Zd Zedd„ ƒZedd„ ƒZdS )Ú	BaseMixinc                 C   s   t jj ¡ tj ¡ f| _d S r   )r   r   Ú	_danglingr   r°   Údanglingr¸   r   r   r   r’     s    
ÿzBaseMixin.setUpClassc                 C   s€   t j ¡  ttjjƒt| jd ƒ }|r@dt j_t 	d|› ¡ d }tt
jƒt| jd ƒ }|rxdt j_t 	d|› ¡ d }d S )Nr   TúDangling processes: rR   úDangling threads: )r  r   rÞ  rç   r   r   r  r  rê  rë  r°   )r‡   rN   rP   r   r   r   r—  ¥  s    
zBaseMixin.tearDownClassN)rJ   rK   rL   r3  r’  r—  r   r   r   r   r  Ÿ  s   
r  c                   @   sÐ   e Zd ZdZejZejZeejƒZeej	ƒZ	eej
ƒZ
eejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZdS )rÕ  rN   N)rJ   rK   rL   rn   r   r   rq  r™  rq   r‹   r©   r“  rŒ   r   r€  r¢  r©  r°  r³  r¼  r§   rý  r   rQ  r9  rP  r   r   r   r   rÕ  ¸  s*   
















rÕ  c                       s
  e Zd ZdZejZee d¡ƒZ	ee d¡ƒZ
ee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d	¡ƒZee d
¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZedd„ ƒZe‡ fdd„ƒZe‡ fdd„ƒZ‡  ZS )ÚManagerMixinrO   zmanager.Queuezmanager.JoinableQueuezmanager.Lockzmanager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionzmanager.Eventzmanager.Barrierzmanager.Valuezmanager.Arrayzmanager.listzmanager.dictzmanager.Namespacec                 O   s   | j j||ŽS r   )rO   r“  )r‡   rE   rF   r   r   r   r“  â  s    zManagerMixin.Poolc                    s   t ƒ  ¡  t ¡ | _d S r   )r‘  r’  r   rQ  rO   r¸   r•  r   r   r’  æ  s    
zManagerMixin.setUpClassc                    sÚ   t tdtjƒƒ }d}tt ¡ ƒdkrzt |¡ |d9 }t tdtjƒƒ | }|dkrdtj_t 	dt ¡ › d|› d	¡ qzqt
 ¡  | j ¡ d
kr²dtj_t 	d¡ t 	| j ¡ ¡ | j ¡  | j ¡  d | _tƒ  ¡  d S )NrB   rõ   rR   r£   r¿  Trç  rè  ré  r   z5Shared objects which still exist at manager shutdown:)rC   rD   rx   r   r©   r¢   r  r   rê  rë  rï   rð   rO   Z_number_of_objectsZ_debug_infor  r   r‘  r—  )r‡   rì  rG   rÑ  r•  r   r   r—  ë  s&    



zManagerMixin.tearDownClass)rJ   rK   rL   rn   r   r   rc  ÚoperatorÚ
attrgetterr   r€  r¢  r©  r°  r³  r¼  r§   rý  r   rQ  r«   rk  r€  r3  r“  r’  r—  rà  r   r   r•  r   r  Ð  s,   
r  c                   @   sÔ   e Zd ZdZejjZejjZeejj	ƒZ	eejj
ƒZ
eejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZdS )ÚThreadsMixinrP   N)rJ   rK   rL   rn   r   Údummyr   rq  r™  rq   r©   r“  rŒ   r   r€  r¢  r©  r°  r³  r¼  r§   rý  r   rQ  r   r   r   r   r    s$   r  c                    s@  | d }t ƒ }dddh}| ¡ D ]Þ\}}t|tƒs4q t|tƒrÆ|tkrHq t|jƒ|ks`t|jƒ‚|jD ]\}d| 	¡  |dd …  }|| 	¡ d  }	G dd	„ d	||	t
jƒ}
| |
_|
_||
_|
| |< qfq t|t
jƒr G d
d	„ d	|tƒ}
| |
_|
_||
_|
| |< q d d g‰ d g‰‡ ‡‡fdd„}‡ ‡fdd„}|| d< || d< d S )NrJ   rN   rP   rO   ÚWithrR   ÚMixinc                   @   s   e Zd ZdS ©z*install_tests_in_module_dict.<locals>.TempNrŒ  r   r   r   r   ÚTemp4  s   r  c                   @   s   e Zd ZdS r  rŒ  r   r   r   r   r  :  s   c                     sÐ   t  t¡ t j ¡  t jj ¡ ˆ d< tj ¡ ˆ d< t jddˆd< zt j	ˆdd W n" t
k
rv   t ˆd ¡‚Y nX tj d¡r°zt  ¡ } W n tk
r®   t d¡‚Y nX tƒ  t ¡  t  ¡  t¡ d S )	Nr   rR   T)Ú
allow_noner¶  z start method not supportedÚlinuxz1OSError raises on RLock creation, see issue 3111!)r   r¸  r¹  r   Ú_cleanupr  r   r°   rû   r´  r9   r:   r;   ré   rý   r»  r©  r3  r<   r   Zget_temp_dirr'  r(  r,  r@  ©r  Úold_start_methodÚstart_methodr   r   ÚsetUpModuleC  s&    

ÿz1install_tests_in_module_dict.<locals>.setUpModulec                     s²   d} t j ¡  tjˆd dd ttjjƒtˆ d ƒ }|rXd} dt j_t 	d|› ¡ d }tt
jƒtˆ d ƒ }|r’d} dt j_t 	d|› ¡ d }| r¤t d¡ tj ¡  d S )	NFr   Tr¶  r  rR   r  r  )r  r   rÞ  r   r´  rç   r   r  rê  rë  r°   rD   r¢   r   Z_cleanup_tests)Z
need_sleeprN   rP   )r  r  r   r   ÚtearDownModuleY  s$    

z4install_tests_in_module_dict.<locals>.tearDownModuler!  r"  )Úglobalsr  r   rª   rÍ  rM   rç   r_   rg   Ú
capitalizer:   ÚTestCaserJ   rL   rK   r  )Zremote_globsr   rK   Zlocal_globsZ	ALL_TYPESr"   ÚbaseÚtype_Znewnamer  r  r!  r"  r   r  r   Úinstall_tests_in_module_dict%  s8    




r(  )r*   )¶r:   Zunittest.mockr   rl  rD   r  rŸ  ré   r6   rï   r4  rÄ   rR  r‘  r§  r3  rñ  rß  r  rì  rí   rç  Ztest.supportr  Ztest.support.script_helperr   Úimport_moduler   r°   r  r   ro  Zmultiprocess.dummyZmultiprocess.heapZmultiprocess.managersrí  Zmultiprocess.queuesr   r   ZHAVE_SEND_HANDLErm  ÚImportErrorZmultiprocess.sharedctypesr   r   rØ  r   Z	HAS_SHMEMrX  rk  rþ  rü   r­   r   r
   r   r   r"   r    r$   r)  r,  rÔ   rS   rn  ro  rp  rC   ZHAVE_GETVALUErý   rC  r)   r,   r7   rc  r¹  Úctypesr0   r1   r2   r3   r  r<   r=   rM   ra   rd   rk   r   r7  rA  r_  rb  rc  r¡  r¬  rµ  rÙ  rÜ  rì  rí  rû  rü  r*  rL  rY  r‚  rƒ  r„  r†  r‡  r9   r‹  r  r  rã  rå  ræ  rñ  r  r  r¿  r  r
  r  r  Úregisterr  r   r  r  r  r   r(  r"  r1  r;  r9  rn  rz  r€  r4  rŽ  rŸ  r¶  r¸  rÁ  rû  r%  r  r&  r8  r?  rD  rO  rP  rY  rZ  r[  r\  r]  rd  rk  r~  r‚  r  r•  r—  rš  r¤  r°  r6  rÁ  r×  rÛ  rå  r	  r  rÕ  r  r  r(  r   r   r   r   Ú<module>   sž  





 ÿ

    .N  H6  *39   FS 

	  k(C:
04  "0R
 h8
    x+E"! 2 "BCHÿ %) k=