a
    ¼3j™ë ã                   @   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 d dlmZ d dlmZ ej d¡Ze ¡  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+yb   dZ*Y n0 zd d	l,m-Z-m.Z. d
Z/W n e+y”   dZ/Y n0 zd dl!m0Z0 d
Z1W n e+yÂ   dZ1Y n0 zd dl2Z2W n e+yè   dZ2Y n0 dd„ Z3dd„ Z4dd„ Z5ej6dkr"d dl!m7Z7 dd„ Z8e'j9Z:dZ;dZ<e<rBd\Z=Z>Z?n
d\Z=Z>Z?e@eddƒ ZAejBdkZCd dl mDZD dd„ ZEze Fd¡ZGW n   dZGY n0 d d!gZHzd d"lImJZJmKZKmLZLmMZM W n$ e+yà   eNZJd ZK ZLZMY n0 d#d$„ ZOG d%d&„ d&eNƒZPG d'd(„ d(eNƒZQd)d*„ ZRG d+d,„ d,ƒZSG d-d.„ d.eQƒZTG d/d0„ d0e!jUƒZVG d1d2„ d2eQƒZWd3d4„ ZXd5d6„ ZYG d7d8„ d8eQƒZZG d9d:„ d:eQƒZ[G d;d<„ d<eQƒZ\G d=d>„ d>eQƒZ]G d?d@„ d@eQƒZ^G dAdB„ dBeNƒZ_dCdD„ Z`G dEdF„ dFeNƒZaG dGdH„ dHeNƒZbG dIdJ„ dJeQƒZcG dKdL„ dLeQƒZdG dMdN„ dNeQƒZeG dOdP„ dPeQƒZfdßdRdS„ZgdTdU„ ZhdVdW„ ZidXdY„ ZjG dZd[„ d[eNƒZkG d\d]„ d]elƒZmd^d_„ ZnG d`da„ daeQƒZodbdc„ Zpddde„ ZqG dfdg„ dgeQƒZrG dhdi„ dieQƒZsd djl$mtZtmuZumvZv G dkdl„ dleNƒZwdmdn„ ZxG dodp„ dpeuƒZyG dqdr„ dretƒZzezj{dsewdt ezj{duewdvdw ezj{dnexeydx G dydz„ dzeQƒZ|e }¡ Z~d{d|„ ZG d}d~„ d~etƒZ€e€j{d|edt G dd€„ d€etƒZe {d|¡ dZ‚G d‚dƒ„ dƒeQƒZƒe „d„¡G d…d†„ d†eQƒƒZ…e3d‡ƒZ†G dˆd‰„ d‰eQƒZ‡G dŠd‹„ d‹eQƒZˆG dŒd„ deQƒZ‰G dŽd„ deQƒZŠe  ‹e*d¡e „d„¡G d‘d’„ d’eQƒƒƒZŒG d“d”„ d”eQƒZG d•d–„ d–eJƒZŽG d—d˜„ d˜eQƒZe  ‹e1d™¡e „d„¡G dšd›„ d›eQƒƒƒZG dœd„ deQƒZ‘G dždŸ„ dŸe j’ƒZ“G d d¡„ d¡eQƒZ”G d¢d£„ d£eQƒZ•G d¤d¥„ d¥e j’ƒZ–e „d„¡G d¦d§„ d§e j’ƒƒZ—d¨d©„ Z˜e „d„¡G dªd«„ d«e j’ƒƒZ™d¬d­„ Zšd®d¯„ Z›d°d±„ Zœd²d³„ ZG d´dµ„ dµeNƒ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jBdkdÊ¡G dËdÌ„ dÌe j’ƒƒZªG dÍdÎ„ dÎe j’ƒZ«G dÏdÐ„ dÐe j’ƒZ¬e „d„¡G dÑdÒ„ dÒe j’ƒƒZ­G dÓdÔ„ dÔe j’ƒZ®G dÕdÖ„ dÖeNƒ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)Úhashlib_helper)Úsocket_helperÚ_multiprocessing)Úutil)Ú	reductionF)ÚValueÚcopyT)Úshared_memoryc                 C   s
   |   d¡S )NÚlatin)Úencode)Ús© r   úV/www/server/python_manager/versions/3.9.10/lib/python3.9/test/_test_multiprocessing.pyr   H   s    r   c                 C   s"   t | tjjƒr|  ¡  |  ¡  d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueL   s    r   c                 C   s   t  | ¡ d S r   )r   r   )Úprocessr   r   r   Újoin_processR   s    r   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r   Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlink[   s    r!   çš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)r"   r"   r"   ZHAVE_BROKEN_SEM_GETVALUEÚwin32©Úwaitc                 C   s    |d ur|dk rd }t | g|ƒS )Nç        r$   )ÚhandleÚtimeoutr   r   r   Úwait_for_handlew   s    r)   ÚSC_OPEN_MAXé   Ú__main__z$test.test_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc               	   C   sR   d} zt  d¡}W n ttfy*   Y dS 0 |dks<|| kr@d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    ÿr9   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  ¡ }z | j|i |¤ŽW t  ¡ | | _S t  ¡ | | _0 d S r   )ÚtimeÚ	monotonicr;   r<   )r=   ÚargsÚkwdsÚtr   r   r   Ú__call__¨   s    þzTimingWrapper.__call__N©Ú__name__Ú
__module__Ú__qualname__r>   rD   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   s0   z||Ž }W n t y   Y n0 |  ||¡S d S r   )ÚNotImplementedErrorÚassertEqual)r=   Úvaluer;   rA   Úresr   r   r   ÚassertReturnsIfImplemented»   s
    z'BaseTestCase.assertReturnsIfImplementedc                 G   s   t dƒ‚d S )Nz#shouldn't try to pickle a test case)rU   )r=   rA   r   r   r   Ú
__reduce__Å   s    zBaseTestCase.__reduce__N)rF   rG   rH   ÚALLOWED_TYPESrT   rY   rZ   Ú__reduce_ex__r   r   r   r   rI   ³   s
   
rI   c                 C   sj   z
|   ¡ W S  tyd   z| jW  Y S  ty^   z| jW  Y  Y S  tyX   t‚Y n0 Y n0 Y n0 d S r   )Ú	get_valuer5   Z_Semaphore__valueÚ_valuerU   ©r=   r   r   r   r]   Î   s    
r]   c                   @   s   e Zd Zdd„ ZdS )ÚDummyCallablec                 C   s   |  d¡ d S ©Né   )Úput)r=   ÚqÚcr   r   r   rD   ß   s    zDummyCallable.__call__N)rF   rG   rH   rD   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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d)d*„ Zed+d,„ ƒZd-d.„ ZedPd1d2„ƒZd3d4„ Z d5d6„ Z!d7d8„ Z"ed9d:„ ƒZ#d;d<„ Z$ed=d>„ ƒZ%d?d@„ Z&ei fdAdB„ƒZ'dCdD„ Z(dEdF„ Z)edQdHdI„ƒZ*dJdK„ Z+dLdM„ Z,dNdO„ Z-d0S )RÚ_TestProcess©rJ   rL   c                 C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )NrL   útest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrV   Úidentr3   ÚgetpidÚexitcode)r=   Úcurrentrm   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 )NrL   rh   ©ÚtargetT©rz   rp   F)
ri   rj   rk   ÚProcessÚ_testrV   rp   rl   rn   Ú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 )NrL   )rl   rc   r   ri   rr   rm   Úpid)Úclsrd   rA   rB   rw   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 )NrL   rh   F©Úduplex©rz   rA   )ri   rj   rk   ÚassertIsNoneÚparent_processÚPiper|   Ú_test_send_parent_processÚstartÚjoinÚrecvrV   rl   r   r3   ru   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‡   )Úmultiprocessing.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tj	ds\t
dƒ‚| ¡ }|  |d¡ | ¡  | ¡  |jtj	ds–t
dƒ‚| ¡ }|  |d	¡ d S )
NrL   rh   Frƒ   r…   ©r(   z(Could not communicate with child processÚaliveú	not alive)ri   rj   rk   rˆ   r|   Ú_test_create_grandchild_processrŠ   Úpollr   ÚLONG_TIMEOUTÚAssertionErrorrŒ   rV   Ú	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Š   r?   Úsleep)r‚   rŽ   r   r   r   r   r™   9  s    z,_TestProcess._test_create_grandchild_processc                 C   sP   ddl m} | |ƒ  ¡ rdnd¡ |ƒ jtjd | |ƒ  ¡ rFdnd¡ d S )Nr   r’   r—   r˜   r–   )r“   r‡   r”   ro   r‹   r   ÚSHORT_TIMEOUTr•   r   r   r   rŸ   ?  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u ¡ |  |jd ¡ | ¡  |  |jd ¡ |  | 	¡ d¡ |  ||  ¡ ¡ |  | ¡ |dd … ¡ |  | ¡ |¡ |  | ¡ |j¡ | jd	krX|  | ¡ |j¡ |  | ¡ |j¡ | ¡  |  |jd¡ |  | 	¡ d
¡ |  
||  ¡ ¡ t|ƒ d S )NrN   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)rz   rA   Úkwargsr   TrL   Fr   )r   ÚEventr|   r}   rp   rl   ri   rV   rm   ro   ÚassertNotInÚactive_childrenrn   ÚtypeÚlistrv   rŠ   ÚassertInÚgetr   r   r‹   r   )r=   rd   ÚerA   r¥   r   r   rw   r   r   r   Útest_processF  s@    



ÿ
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 )NrL   rh   rN   r…   )ri   rj   rk   Ú	threadingÚmain_threadÚ	native_idr   r|   Ú"_test_process_mainthread_native_idrŠ   r¬   r‹   r   ÚassertNotEqual)r=   Zcurrent_mainthread_native_idrd   r   Zchild_mainthread_native_idr   r   r   Ú!test_process_mainthread_native_idn  s    


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  ¡ j}| |¡ d S r   )r¯   r°   r±   rc   )r‚   rd   Zmainthread_native_idr   r   r   r²     s    
z/_TestProcess._test_process_mainthread_native_idc                 C   s   t  d¡ d S )Néd   ©r?   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	ƒrV‡ fd
d„}t tj|¡}z4t d¡ |  |ƒ d ¡ W t d¡ t tj|¡ nt d¡ t tj|¡ 0 n|  |ƒ d ¡ |  |jd¡ |  ˆ  ¡ d¡ |  ˆ |  
¡ ¡ ˆ  ¡  ˆ jS )NrL   rh   ry   Tr   r&   r2   rN   Úalarmc                     s   t dˆ  ƒ‚d S )Nzjoin took too long: %s©ÚRuntimeError©rA   ©r   r   r   Úhandlerª  s    z+_TestProcess._kill_process.<locals>.handleré
   F)ri   rj   rk   r|   r¸   rp   rŠ   rV   ro   r«   r¨   rv   r:   r‹   rT   r<   r?   r    ÚhasattrÚsignalÚSIGALRMr»   r§   )r=   Úmethr‹   rÀ   Zold_handlerr   r¿   r   Ú_kill_processŒ  sB    




ÿ
z_TestProcess._kill_processc                 C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S ©NÚnt)	rÆ   r   r|   r   r3   r   rV   rÃ   ÚSIGTERM©r=   rv   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|   Úkillr3   r   rV   rÃ   ÚSIGKILLrÊ   r   r   r   Ú	test_killÄ  s    
z_TestProcess.test_killc                 C   sH   zt  ¡ }W n ty"   d}Y n0 |  t|ƒtu ¡ |  |dk¡ d S rM   )r   Ú	cpu_countrU   rn   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)rV   r©   r¨   rª   r|   r?   r    ÚDELTAr§   rp   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”   rs   Úranger|   Ú_test_recursionrŠ   r‹   )r‚   rŽ   ÚidÚir   r   r   r   r×   Þ  s    
ÿz_TestProcess._test_recursionc                 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   rN   )	rˆ   r×   r?   r    rÓ   rš   ÚappendrŒ   rV   )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 d   ƒ n1 s\0    Y  | 	¡  |  
|j¡ |j}|  |t¡ |  t|dd¡ | ¡  | ¡  |  t|dd¡ d S )NrL   rh   r…   r&   r–   rN   )ri   rj   rk   r¦   r|   rá   ÚassertRaisesr6   ÚsentinelrŠ   Ú
addCleanupr‹   rq   rÐ   r~   r)   Úsetrn   )r=   rà   r   rã   r   r   r   Útest_sentinel  s    
$z_TestProcess.test_sentinelr   Nc                 C   s   |d ur|  ¡  t |¡ d S r   )r¬   ÚsysÚexit)r‚   Úrcrd   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 d   ƒ n1 s~0    Y  | d ¡ | ¡  |  | 	¡ d¡ |  |jd¡ | ¡  |  
t¡ | 	¡  W d   ƒ n1 sè0    Y  |  
t¡ | ¡  W d   ƒ n1 s0    Y  |  
t¡ | ¡  W d   ƒ n1 sP0    Y  | ¡  t |¡}~t ¡  |  |ƒ d ¡ t|ƒ d S )NrL   rh   rd   )rz   r¥   TFr   )ri   rj   rk   r   r|   rê   rp   rŠ   rV   ro   râ   r6   r   rc   r‹   rv   r   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )r=   rd   r   Úwrr   r   r   Ú
test_close  s4    
&
&((
z_TestProcess.test_closec                    s*  ˆ j dkrˆ  d ˆ j ¡¡ t ¡ }|dkr0dnd}‡ fdd„t|ƒD ƒ}|D ]}| ¡  qN|D ]}t|ƒ q`|D ]}ˆ  |j	d¡ qr‡ 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 )NrL   rh   Úspawnrb   rµ   c                    s   g | ]}ˆ j ˆ jd d‘qS ))ç{®Gáz„?r…   )r|   rº   ©Ú.0rÙ   r_   r   r   Ú
<listcomp>?  s   ÿz4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]}ˆ j ˆ jd ‘qS )ry   )r|   r¸   rô   r_   r   r   rö   H  s   ÿçü©ñÒMbP?rÈ   Údarwin)ri   rj   rk   r   Úget_start_methodrÖ   rŠ   r   rV   rv   r?   r    r   r3   r   rÃ   rÉ   rç   ÚplatformrÚ   rÍ   r«   )r=   ÚsmÚNÚprocsr   Z	exitcodesr   r_   r   Útest_many_processes7  s:    

ÿ


ÿ




z _TestProcess.test_many_processesc                 C   sn   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  t ¡  |  	|ƒ d ¡ |  
| ¡ d¡ t|ƒ d S )Nr…   rb   )r`   rë   rì   r   r|   rŠ   r‹   rí   rî   rï   rV   r¬   r   )r=   re   rð   rd   r   r   r   r   Útest_lose_target_refZ  s    
z!_TestProcess.test_lose_target_refc                 C   s   |  tj ¡ ¡ | ¡  d S r   )rc   Útestr   Zfd_countr%   )r=   Úevtrd   r   r   r   Ú_test_child_fd_inflationg  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 ]}| ¡  qnzR‡fdd„t|ƒD ƒ}ˆ 	t
t|ƒƒd|¡ W ˆ  ¡  |D ]}| ¡  q¸tˆƒ n$ˆ  ¡  |D ]}| ¡  qÜtˆƒ 0 d S )	NrL   rh   Úforkrb   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r…   )r|   r  rô   ©r  rd   r=   r   r   rö   |  s   ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    s   g | ]}ˆ   ¡ ‘qS r   ©r¬   rô   ©rd   r   r   rö   ‚  ó    rN   )ri   rj   rk   r   rù   r¦   r   rÖ   rŠ   rV   rs   rå   r‹   r   )r=   rû   rü   rý   r   Z	fd_countsr   r  r   Útest_child_fd_inflationl  s0    
ÿ


ý
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ç      à?©r?   r    rå   r   ©r  r   r   Úfunc1  s    
z2_TestProcess._test_wait_for_threads.<locals>.func1c                      s   t  d¡ ˆ  ¡  d S )Né   )r?   r    Úclearr   r  r   r   Úfunc2‘  s    
z2_TestProcess._test_wait_for_threads.<locals>.func2ry   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 )NrL   rh   r…   )
ri   rj   rk   r¦   r|   r  rŠ   r‹   rn   Úis_set)r=   r  Úprocr   r   r   Útest_wait_for_threads˜  s    
z"_TestProcess.test_wait_for_threadsc                 C   sH   |  ¡ D ]2\}}|dkr*t ¡ }| ¡  nd }tt|d ƒ q| ¡  d S )Nr   )ÚitemsÚioÚStringIOr   Ú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||ƒ zV|  ¡ }| j| j|fd}| 	¡  | 
¡  |  | ¡ ¡ |  |jd¡ W tt||ƒ q$tt||ƒ 0 q$qd S )Nr   ©ÚstdoutÚstderrr…   )r  r  r   Úgetattrrç   r  r¦   r|   r  rŠ   r‹   rn   r  rV   rv   )r=   Z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 ]„}dD ]z}t t|ƒ}z\|  ¡ }| j| j|||ifd}| ¡  | ¡  |  | ¡ ¡ |  	|j
d¡ W tt||ƒ qtt||ƒ 0 qqd S )Nr  )r   Úremover…   r   )r!  rç   r¦   r|   r  rŠ   r‹   rn   r  rV   rv   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 )
NrL   rh   Ú
forkserverr   )Ú_forkserverr
  r…   ç       @)r   éÿ   )ri   rj   rk   r   rù   Zmultiprocessing.forkserverr(  Úensure_runningr¦   r|   r&  rŠ   Z_forkserver_pidr3   rÌ   r?   r    r‹   rn   r  rV   rv   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Ã   ÚSIGINTr_   r   r   r   Útest_forkserver_sigintÿ  s    z#_TestProcess.test_forkserver_sigintc                 C   s   t jdkr|  tj¡ d S rÇ   )r3   r   r-  rÃ   rÍ   r_   r   r   r   Útest_forkserver_sigkill  s    
z$_TestProcess.test_forkserver_sigkill)r   N)r&   ).rF   rG   rH   r[   rx   r€   Úclassmethodr}   r‘   r‰   rž   r™   rŸ   r®   r7   Ú
skipUnlessr¯   Ú_HAVE_THREAD_NATIVE_IDr´   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-  r/  r0  r   r   r   r   rf   ä   sj   
	


(



3


 #

&rf   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|   r>   rˆ   Ú
child_connÚparent_connr_   r   r   r   r>     s    z_UpperCaser.__init__c                 C   s<   | j  ¡  t| jjd ƒD ]}| j | ¡ ¡ q| j ¡  d S r   )r6  r   Úiterr5  rŒ   r”   Úupper©r=   r   r   r   r   Úrun  s    
z_UpperCaser.runc                 C   s   | j  |¡ | j  ¡ S r   )r6  r”   rŒ   r9  r   r   r   Úsubmit  s    z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )r6  r”   r   r5  r_   r   r   r   Ústop  s    
z_UpperCaser.stopN)rF   rG   rH   r>   r:  r;  r<  r   r   r   r   r4    s   r4  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©rJ   c                 C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTr¤   ZHELLOZworldZWORLD)r4  rp   rŠ   rV   r;  r<  r‹   )r=   Z
uppercaserr   r   r   Útest_subclassing'  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ƒ<}| ¡ }|  d|¡ |  d|¡ |  d|¡ W d   ƒ n1 s¢0    Y  d S )NrL   rh   r…   ÚrÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)ri   rj   rk   r   r   ÚTESTFNrä   Úunlinkr|   Ú_test_stderr_flushrŠ   r‹   ÚopenÚreadr«   )r=   Útestfnr  ÚfÚerrr   r   r   Útest_stderr_flush0  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©ÚclosefdrN   r   )r3   rE  ÚO_WRONLYÚO_CREATÚO_EXCLrç   r   )r‚   rG  Úfdr   r   r   rD  A  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 )NrK  FrL  )r3   rE  rN  rO  rP  rç   r   rè   )r‚   ÚreasonrG  rQ  r   r   r   Ú_test_sys_exitH  s    z&_TestSubclassingProcess._test_sys_exitc           	   	   C   sJ  | j dkr|  d | j ¡¡ tjj}|  tjj|¡ g d¢dfD ]Œ}| j| j	||fd}d|_
| ¡  t|ƒ |  |jd¡ t|dƒ}| ¡ }W d   ƒ n1 s¤0    Y  |  | ¡ t|ƒ¡ t |¡ q@g d	¢}|D ]j\}}| j|d
D | jtj|d}d|_
| ¡  t|ƒ |  |j|¡ W d   ƒ qÚ1 s:0    Y  qÚd S )NrL   rh   )rN   r¢   é   zignore thisr…   TrN   r@  )))TrN   ))Fr   ))é   rU  )r   r   )r   r   r¾   )ri   rj   rk   r   r   rB  rä   rC  r|   rS  rp   rŠ   r   rV   rv   rE  rF  ÚrstripÚstrr3   ÚsubTestrç   rè   )	r=   rG  rR  r   rH  ZcontentZcasesrA   rÜ   r   r   r   Útest_sys_exitN  s0    
þ&z%_TestSubclassingProcess.test_sys_exitN)
rF   rG   rH   r[   r?  rJ  r1  rD  rS  rY  r   r   r   r   r=  #  s   	

r=  c                 C   s"   t | dƒr|  ¡ S |  ¡ dkS d S )NÚemptyr   )rÂ   rZ  Úqsizer  r   r   r   Úqueue_emptyz  s    
r\  c                 C   s"   t | dƒr|  ¡ S |  ¡ |kS d S )NÚfull)rÂ   r]  r[  )rd   Úmaxsizer   r   r   Ú
queue_full€  s    
r_  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 )Nra  ©r^  r…   TFrN   r¢   rT  é   rb   é   r   r–   )r   r¦   r|   rd  rp   rŠ   rV   r\  r_  rc   Ú
put_nowaitr?   r    rÓ   r:   râ   ÚpyqueueÚFullrT   r<   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3rå   r%   r‹   r   )r=   ZMAXSIZEr   rb  rc  r  rc   rh  r   r   r   Útest_put‘  sR    þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr¢   rT  rf  rb   )r%   rc   rå   ©r‚   r   rb  rc  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¢   rT  rN   r–   rf  rb   r   )r   r¦   r|   rp  rp   rŠ   rV   r\  rå   r%   r?   r    rÓ   r¬   Ú
get_nowaitr:   râ   ri  ÚEmptyrT   r<   rk  rl  rm  r‹   r   )r=   r   rb  rc  r  r¬   rq  r   r   r   Útest_getÖ  sF    þ


z_TestQueue.test_getc                 C   s   t ddƒD ]}| |¡ q
d S )NrÁ   r  )rÖ   rc   )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Ö   rc   r?   r    rÓ   r|   rt  rp   rŠ   rV   r¬   râ   ri  rr  r‹   r   )r=   r   rÙ   r   r   r   r   Ú	test_fork  s    
z_TestQueue.test_forkc                 C   sª   |   ¡ }z|  | ¡ d¡ W n ty8   |  d¡ Y n0 | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ t|ƒ d S )Nr   zqsize method not implementedrN   rb   r¢   )r   rV   r[  rU   rj   rc   r¬   r   ©r=   rd   r   r   r   Ú
test_qsize/  s    

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )r7  r¬   r?   r    rÓ   Ú	task_done)r‚   rd   Ú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|   rz  rô   ©r   r=   r   r   rö   H  s   ÿz-_TestQueue.test_task_done.<locals>.<listcomp>rf  TrÁ   )ÚJoinableQueuerÖ   rp   rŠ   rc   r‹   r   )r=   Úworkersr   rÙ   r   r{  r   Útest_task_doneE  s    ÿ

z_TestQueue.test_task_donec              
   C   sÆ   t j ¡ ¨ d}t|d dƒ}| d¡ W d   ƒ n1 s>0    Y  t j t ¡ ¡< zt|ƒ W n t	j
y„   |  d¡ Y n0 W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  d S )NZimported_by_an_imported_modulez.pyrK  zøif 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r   r   Ztemp_cwdrE  ÚwriteZDirsOnSysPathr3   ÚgetcwdÚ
__import__ri  rr  Úfail)r=   Úmodule_namerH  r   r   r   Útest_no_import_lock_contention[  s    (
z)_TestQueue.test_no_import_lock_contentionc                 C   sH   t  ¡ }t ¡ }|  tj|jdd¡ t ¡ | }|  |d¡ t	|ƒ d S )NTgš™™™™™É?r"   )
r   r   r?   r@   râ   ri  rr  r¬   ÚassertGreaterEqualr   )r=   rd   rŠ   Údeltar   r   r   Útest_timeoutp  s    z_TestQueue.test_timeoutc              	   C   s4  | j dkr|  d | j ¡¡ G dd„ dtƒ}tj ¡ J |  ¡ }| |ƒ ¡ | d¡ |  	|j
tjd¡ t|ƒ W d   ƒ n1 s†0    Y  tj ¡ „ | jdd}| |ƒ ¡ | d¡ z|  | ¡ d¡ W n tyä   Y n0 |  	|j
tjd¡ |  	| ¡ ¡ t|ƒ W d   ƒ n1 s&0    Y  d S )	NrJ   rh   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   )r5   r_   r   r   r   rZ     s    zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N©rF   rG   rH   rZ   r   r   r   r   ÚNotSerializable€  s   r‰  Tr–   rN   re  )ri   rj   rk   Úobjectr   r   Úcaptured_stderrr   rc   rn   r¬   r¡   r   rV   r[  rU   rZ  )r=   r‰  rd   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 	¡ F |t 
¡ d}| |¡ | d¡ |  |jtjd	¡ W d   ƒ n1 s 0    Y  |  |j¡ |  |j¡ d S )
NrJ   rh   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_calledr_   r   r   r   r>   £  s    zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s   d| _ t‚d S ©NT)rŽ  r5   r_   r   r   r   rZ   §  s    zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rF   rG   rH   Ú__doc__r>   rZ   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   r5   r  )r­   ry  ©r‰  r   r   Ú_on_queue_feeder_error­  s    
ÿz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rF   rG   rH   r‘  Ústaticmethodr“  r   r’  r   r   Ú	SafeQueue«  s   r•  )ÚctxTr–   )ri   rj   rk   rŠ  r   r   r   r   r   r‹  Úget_contextrc   rn   r¬   r¡   rŽ  r  )r=   r•  Znot_serializable_objrd   r   r’  r   Ú'test_queue_feeder_on_queue_feeder_error›  s    



2z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc              	   C   sŒ   t  ¡ t  ¡ fD ]v}| ¡  |  td¡ | d¡ W d   ƒ n1 sH0    Y  |  td¡ | ¡  W d   ƒ q1 s|0    Y  qd S )Nz	is closedÚfoo)r   r   r|  r   ÚassertRaisesRegexr6   rc   r¬   rv  r   r   r   Ú$test_closed_queue_put_get_exceptionsÁ  s    (z/_TestQueue.test_closed_queue_put_get_exceptionsN)rF   rG   rH   r1  rd  rn  rp  rs  rt  ru  rw  rz  r~  r„  r‡  rŒ  r˜  r›  r   r   r   r   r`  ‡  s$   
;
	5

 &r`  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)ÚLockrV   ÚacquireÚreleaserâ   r6   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  )ÚRLockrV   rž  rŸ  râ   rœ   r½   r¡  r   r   r   Ú
test_rlockÕ  s    z_TestLock.test_rlockc                 C   s,   |   ¡  W d   ƒ n1 s0    Y  d S r   )r  r_   r   r   r   Útest_lock_contextß  s    
z_TestLock.test_lock_contextN)rF   rG   rH   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¢   TrN   r   F)rY   r]   rV   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¢   rT  rf  )Ú	Semaphorerª  rV   rŸ  rY   r]   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 )NrJ   rh   r   Fr&   Tr–   )ri   rj   rk   r«  r:   rž  rV   rT   r<   rk  rl  rm  )r=   r©  rž  r   r   r   r‡    s    


z_TestSemaphore.test_timeoutN)rF   rG   rH   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   rH    s
    
z_TestCondition.fc              	   C   s`   t dƒD ]<}z|ƒ |krW  qFW n ty8   Y  qFY n0 t t¡ qt t¡ |  ||¡ d S ©NrÁ   )rÖ   rU   r?   r    rÓ   rY   )r=   r;   rW   rÙ   r   r   r   ÚassertReachesEventually$  s    


z&_TestCondition.assertReachesEventuallyc                 C   sX   | j dkrTz6|j ¡ |j ¡  }|  |d¡ |  |j ¡ d¡ W n tyR   Y n0 d S )NrJ   r   )ri   Ú_sleeping_countr]   Ú_woken_countrV   Ú_wait_semaphorerU   )r=   r±  Úsleepersr   r   r   Úcheck_invariant/  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…   TrN   r¢   )Ú	Conditionr«  r|   rH  rp   rŠ   rä   r‹   r¯   r  rž  r?   r    rÓ   rY   r]   Ú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   rT  r…   Tra  c                      s   t ˆ ƒS r   ©r]   r   ©r³  r   r   Ú<lambda>   r  z0_TestCondition.test_notify_all.<locals>.<lambda>)r»  r«  rÖ   r|   rH  rk  rp   rŠ   rä   r‹   r¯   r  rž  rY   r]   rº  r?   r    rÓ   Ú
notify_allrŸ  rµ  ©r=   r±  r²  rÙ   r   rC   r   r¿  r   Útest_notify_allg  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   rT  r…   Tra  r¢   )Únc                      s   t ˆ ƒS r   r¾  r   r¿  r   r   rÀ  Ä  r  z._TestCondition.test_notify_n.<locals>.<lambda>rf  c                      s   t ˆ ƒS r   r¾  r   r¿  r   r   rÀ  Ë  r  )r»  r«  rÖ   r|   rH  rp   rŠ   rä   r‹   r¯   r  rž  r?   r    rÓ   rY   r]   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ž  rk  rŸ  rV   rT   r<   )r=   r±  r%   rX   r   r   r   r‡  ×  s    
z_TestCondition.test_timeoutc                    s`   |H dˆ _ | ¡  | ‡ fdd„¡}|r4ˆ j dkr>t d¡ W d   ƒ n1 sR0    Y  d S )Nr   c                      s
   ˆ j dkS ©Nrf  ©rW   r   ©Ústater   r   rÀ  å  r  z0_TestCondition._test_waitfor_f.<locals>.<lambda>rf  rN   )rW   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|_| ¡  |: | ‡ fdd„¡}|  |¡ |  ˆ j	d¡ W d   ƒ n1 sz0    Y  t
dƒD ]H}t d	¡ |& ˆ  j	d
7  _	| ¡  W d   ƒ qŒ1 sÊ0    Y  qŒt|ƒ |  |jd¡ d S )NrÙ   r2   r…   Tc                      s
   ˆ j dkS ©Nr   rÇ  r   rÈ  r   r   rÀ  ô  r  z-_TestCondition.test_waitfor.<locals>.<lambda>r   rf  ró   rN   )r»  r   r|   rË  rp   rŠ   rÊ  rn   rV   rW   rÖ   r?   r    r¼  r   rv   )r=   r±  r   rÛ   rÙ   r   rÈ  r   Útest_waitforé  s     
,
(z_TestCondition.test_waitforc                    sˆ   |  ¡  |h d}t ¡ }|j‡ fdd„|d}t ¡ | }|sf|d |  k r\|d k rfn nd|_W d   ƒ n1 sz0    Y  d S )Nr"   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Ÿ  r?   r@   rÊ  rW   )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	j
d¡ tdƒD ]H}t d¡ |& | jd	7  _| ¡  W d   ƒ ql1 sª0    Y  qlt|ƒ |  |j¡ d S )
NrÙ   r   Fr…   Tr–   rT  ró   rN   )r»  r   r«  r|   rÐ  rp   rŠ   rn   rž  r   r›   rÖ   r?   r    rW   r¼  r   )r=   r±  rÉ  rÎ  r©  r   rÙ   r   r   r   Útest_waitfor_timeout  s"    

ÿ
(z#_TestCondition.test_waitfor_timeoutc                 C   sP   | |  ¡  W d   ƒ n1 s"0    Y  t d¡ |d urLt |tj¡ d S rM   )r¼  r?   r    r3   rÌ   rÃ   r.  )r‚   re   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 }|  ¡ }|| |  | d¡¡ |  | d¡¡ | j	| j
||fd}| ¡  |  | d¡¡ |d ur”|  t|jd¡ | ¡  W d   ƒ n1 s°0    Y  d S )Nr#   r   r"   r…   é<   )r   ÚProcessesMixinrç   rú   r3   ru   r»  r~   r%   r|   rÒ  rŠ   rn   râ   ÚKeyboardInterruptr‹   )r=   r   re   r   r   r   r   Útest_wait_result-  s    
z_TestCondition.test_wait_result)N)rF   rG   rH   r1  rH  rµ  rº  r½  rÃ  rÅ  r‡  rË  r7   r2  Ú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   )r?   r    rl  rå   rß   r   r   r   Ú_test_eventD  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%   rV   r  rT   r<   rk  rå   r  r|   rÙ  rp   rŠ   r‹   )r=   rà   r%   r   r   r   r   Ú
test_eventI  s&    
z_TestEvent.test_eventN)rF   rG   rH   r1  rÙ  rÚ  r   r   r   r   rØ  B  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   r>   w  s    z_DummyList.__init__c                 C   s"   |\| _ | _| j  ¡  d¡| _d S )NrÙ   )Ú_wrapperÚ_lockÚcreate_memoryviewÚcastrá  )r=   rÉ  r   r   r   rà  }  s    z_DummyList.__setstate__c                 C   s   | j | jfS r   )rã  rä  r_   r   r   r   Ú__getstate__  s    z_DummyList.__getstate__c                 C   s<   | j " | jd  d7  < W d   ƒ n1 s.0    Y  d S ©Nr   rN   ©rä  rá  )r=   Ú_r   r   r   rÚ   „  s    z_DummyList.appendc                 C   s4   | j  | jd W  d   ƒ S 1 s&0    Y  d S rÌ  ré  r_   r   r   r   Ú__len__ˆ  s    z_DummyList.__len__N)rF   rG   rH   r>   rà  rç  rÚ   rë  r   r   r   r   rÛ  u  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.
        ry   Tc                 S   s   | D ]}|  ¡  qd S r   )r‹   )rL   r   r   r   r   Úfinalize«  s    z Bunch.__init__.<locals>.finalizeN)rH  rA   rÄ  Ú	DummyListÚstartedÚfinishedr¦   Ú	_can_exitrå   rÖ   r|   Útaskrp   rŠ   rÚ   rë   rî  Ú
_finalizer)
r=   Ú	namespacerH  rA   rÄ  Zwait_before_exitrL   rÙ   r   rî  r   r   r   r>   •  s     



zBunch.__init__c              	   C   s\   t  ¡ }| j |¡ z(| j| jŽ  W | j |¡ | j d¡ n| j |¡ | j d¡ 0 d S )Né   )	r3   ru   rð  rÚ   rH  rA   rñ  rò  r%   ©r=   r   r   r   r   ró  ±  s    þz
Bunch.taskc                 C   s   t | jƒ| jk rtƒ  q d S r   )rs   rð  rÄ  rì  r_   r   r   r   Úwait_for_started»  s    zBunch.wait_for_startedc                 C   s   t | jƒ| jk rtƒ  q d S r   )rs   rñ  rÄ  rì  r_   r   r   r   Úwait_for_finished¿  s    zBunch.wait_for_finishedc                 C   s   | j  ¡  d S r   )rò  rå   r_   r   r   r   Ú	do_finishÃ  s    zBunch.do_finishc                 C   s   |   ¡  d S r   )rô  r_   r   r   r   r   Æ  s    zBunch.closeN)F)
rF   rG   rH   r‘  r>   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   )ry  )r=   ry  r   r   r   r>   Ë  s    zAppendTrue.__init__c                 C   s   | j  d¡ d S r  )ry  rÚ   r_   r   r   r   rD   Í  s    zAppendTrue.__call__NrE   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.
    rb   g      >@c                 C   s   | j | j| jd| _d S )Nr–   )ÚBarrierrü   ÚdefaultTimeoutÚbarrierr_   r   r   r   ÚsetUpØ  s    z_TestBarrier.setUpc                 C   s   | j  ¡  d | _ d S r   )rÿ  Úabortr_   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 )NrL   rK   )ri   rK   rª   rÛ  r_   r   r   r   rï  ß  s
    


z_TestBarrier.DummyListc                 C   s@   t | ||| jd ƒ}z||Ž  | ¡  W | ¡  n
| ¡  0 d S rM   )rí  rü   rù  r   )r=   rH  rA   rS   r   r   r   Úrun_threadsç  s
    
z_TestBarrier.run_threadsc                 C   s\   |j }t|ƒD ]0}|d  d¡ | ¡  |d  d¡ | ¡  qzW n tyV   Y n0 d S )Nr   TrN   )ÚpartiesrÖ   rÚ   r%   rU   )r‚   rÿ  ÚresultsrÄ  ÚmrÙ   r   r   r   Ú	multipassï  s    
z_TestBarrier.multipassrN   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	  r_   r   r   r   Útest_barrier_10  s    z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r%   rc   )r‚   rÿ  r   rX   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ö     r  z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rN   N)	r   r  r  rÿ  rÖ   rü   rV   Úcountr   ©r=   r  r   r   r   Útest_wait_return  s
    z_TestBarrier.test_wait_returnc                 C   s   |  ¡  t|ƒdkrt‚d S rM   )r%   rs   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  rN   N)rï  rý  rü   rû  r  r  rV   rs   )r=   r  rÿ  r   r   r   Útest_action"  s    z_TestBarrier.test_actionc                 C   sl   z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n6 tjyN   | d¡ Y n tyf   | ¡  Y n0 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   rN   N)	rï  r  r  rÿ  rV   rs   rü   rn   Úbroken)r=   r  r  r   r   r   Ú
test_abort8  s    
ÿz_TestBarrier.test_abortc                 C   sˆ   |  ¡ }|| jd kr<|j| jd k r2t d¡ q| ¡  n6z|  ¡  | d¡ W n tjyp   | d¡ Y n0 |  ¡  | d¡ d S )Nr¢   rN   r÷   T)	r%   rü   Ú	n_waitingr?   r    ÚresetrÚ   r¯   r  )r‚   rÿ  r  r  Úresults3rÙ   r   r   r   Ú_test_reset_fD  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   rN   N)rï  r  r  rÿ  rV   rs   rü   )r=   r  r  r  r   r   r   Ú
test_resetV  s    ÿz_TestBarrier.test_resetc                 C   s    z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n6 tjyN   | d¡ Y n tyf   | ¡  Y n0 |  ¡ | 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_fc  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   rN   N)rï  rý  rü   r  r  rÿ  rV   rs   )r=   r  r  r  r  r   r   r   Útest_abort_and_resety  s    ÿz!_TestBarrier.test_abort_and_resetc                 C   sR   |  ¡ }|| jd kr t d¡ z|  d¡ W n tjyL   | d¡ Y n0 d S )Nr¢   ç      ð?r
  T)r%   rü   r?   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ÿ  rV   rs   r  r  r   r   r   r‡  “  s    z_TestBarrier.test_timeoutc                 C   sT   |  | j¡}|| jd kr$t d¡ z|  ¡  W n tjyN   | d¡ Y n0 d S )Nr¢   r   T)r%   rþ  rü   r?   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#  rV   rs   r  )r=   rÿ  r  r   r   r   Útest_default_timeout¦  s    z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rM   )rý  r%   )r=   rS   r   r   r   Útest_single_thread¯  s    
z_TestBarrier.test_single_threadc              	   C   sH   t |ƒD ]:}| ¡  | | |¡ W d   ƒ q1 s80    Y  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 )NrK   rh   éè  Fr…   )ri   rj   rk   r  rˆ   rÖ   rü   r|   r'  rÿ  rŠ   rä   r‹   rV   rŒ   )r=   r  r¢  r&  r5  Újr   rÙ   r   r   r   Útest_thousand»  s    
ÿz_TestBarrier.test_thousandN)rN   )rF   rG   rH   r‘  rü   rþ  r   r  rï  r  r1  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 )Ú
_TestValuer>  )rÙ   i÷  iª^  )Údg      @g      À)Úhiÿÿÿéê   )rd   ì        ì        re   ÚxÚyc                 C   s   t s|  d¡ d S ©Nz%requires multiprocessing.sharedctypes©r×  rj   r_   r   r   r   r   Û  s    z_TestValue.setUpc                 C   s$   t || jƒD ]\}}|d |_qd S r­  )ÚzipÚcodes_valuesrW   )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õ   ÚcoderW   rê  r_   r   r   rö   ç  s   ÿz)_TestValue.test_value.<locals>.<listcomp>c                    s   g | ]\}}}ˆ   ||¡‘qS r   )r   r;  r_   r   r   rö   ê  s   ÿrN   r…   Tr¢   )	r6  r5  rV   rW   r|   r}   rp   rŠ   r‹   )r=   Úrawr7  r8  r9  r  r   r_   r   Ú
test_valueå  s    
ÿ
ÿz_TestValue.test_valuec                 C   s   | j dd d S ©NT)r=  )r>  r_   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Ù   rb   ©r¢  FÚget_lockÚget_objZnavalue)
r   rB  rC  r  rV   r~   rÂ   râ   r5   r:  )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)rF   rG   rH   r[   r   r6  r   r1  r}   r>  r@  rL  r   r   r   r   r+  Ï  s   û

r+  c                   @   s~   e Zd ZdZedd„ ƒZe edu d¡ddd„ƒZ	e edu d¡d	d
„ ƒZ
e edu d¡dd„ ƒZe edu d¡dd„ ƒZdS )Ú
_TestArrayr>  c                 C   s0   t dt|ƒƒD ]}||  ||d  7  < qd S rM   )rÖ   rs   )r‚   ÚseqrÙ   r   r   r   rH    s    z_TestArray.fNzrequires _ctypesFc                 C   sü   g d¢}|r|   d|¡}n|  d|¡}|  t|ƒt|ƒ¡ |  |d |d ¡ |  t|dd… ƒt|dd… ƒ¡ t dg d¢¡ |dd…< |dd…< |  t|d d … ƒ|¡ |  |¡ | j| j|fd	}d
|_| 	¡  | 
¡  |  t|d d … ƒ|¡ d S )N)
i¨  ir  i¦  i5  é–   éé   i$  iÖ  iÊ  i?  rÙ   rT  r¢   rg  )rN   r¢   rT  rf  rf  rU  r…   T)ÚRawArrayÚArrayrV   rs   rª   ÚarrayrH  r|   rp   rŠ   r‹   )r=   r=  rN  Ú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Á   rT  rÙ   r   )rÖ   rR  rV   rs   rª   )r=   Úsizerê  rT  r   r   r   Útest_array_from_size7  s    z_TestArray.test_array_from_sizec                 C   s   | j dd d S r?  )rU  r_   r   r   r   Útest_rawarrayF  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Á   rA  FrB  rC  Znotalock)rR  rª   rÖ   rB  rC  r  rV   r~   rÂ   râ   r5   rQ  )r=   Zarr1rD  rE  Zarr2rF  rG  r¢  Zarr3rH  rI  rJ  rK  r   r   r   Útest_getobj_getlock_objJ  s(    ÿz"_TestArray.test_getobj_getlock_obj)F)rF   rG   rH   r[   r1  rH  r7   ÚskipIfr.   rU  rW  rX  rY  r   r   r   r   rM    s   


rM  c                   @   sP   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d„ ZdS )Ú_TestContainers©rK   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… g d¢¡ |d9 }|  |d d … g d¢¡ |  |ddg g d¢¡ |  |d d … t tdƒƒ¡ ||g}|   |¡}|  dd	„ |D ƒg d
¢g d¢g¡ |   |g¡}| d¡ |  |d d d … g d¢¡ d S )NrÁ   rb   r¢   )r¢   rT  rf  )
r   rN   r¢   rT  rf  r   rN   r¢   rT  rf  ra  )r   rN   r¢   rT  rf  r   rN   r¢   rT  rf  rb   ra  c                 S   s   g | ]}|d d … ‘qS r   r   )rõ   Úelementr   r   r   rö   ƒ  r  z-_TestContainers.test_list.<locals>.<listcomp>)
r   rN   r¢   rT  rf  rb   ra  rg  rU  é	   r¤   r   )r   rN   r¢   rT  rf  rb   ra  rg  rU  r^  r¤   )rª   rÖ   rV   ÚextendrÚ   )r=   rR   rS   r,  r­   rH  r   r   r   Ú	test_listl  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Ö   r7  rV   Únext)r=   rR   Úitr   r   r   Útest_list_iter‹  s    z_TestContainers.test_list_iterc                    sø   ˆ   ‡ fdd„tdƒD ƒ¡}ˆ  dd„ |D ƒg d¢gd ¡ d|d d< ˆ  |d d d … g d	¢¡ td
dƒD ] }ˆ  || d d … g d¢¡ qnˆ  |d
  ¡ d¡ ˆ  t|d
 ƒd¡ tdddƒD ]}ˆ  t|| ƒd¡ qÄ~ˆ   ¡ }| |¡ ~d S )Nc                    s   g | ]}ˆ   td ƒ¡‘qS )rT  )rª   rÖ   )rõ   Z_ir_   r   r   rö   –  r  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rT  c                 S   s   g | ]}|d d … ‘qS r   r   )rõ   Úinnerr   r   r   rö   —  r  )r   rN   r¢   é7   r   r2   )r   rN   re  rN   r¢   )rª   rÖ   rV   Úpoprs   rÚ   )r=   rR   rÙ   rS   r   r_   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>®  r  z,_TestContainers.test_dict.<locals>.<genexpr>c                 S   s   g | ]}t |ƒ‘qS r   rj  rô   r   r   r   rö   °  r  z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |ƒf‘qS r   rj  rô   r   r   r   rö   ±  r  )
Údictrª   rÖ   rk  rV   r	   ÚsortedÚkeysr7  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 )Nrh  ri  )
rm  rª   rÖ   rk  r7  rV   r  râ   r½   ra  )r=   r,  rp  rÙ   rb  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¢   rf  )ÚferretsÚhamstersrÁ   rT  )ÚwaterÚfeed)ÚpetsÚsuppliesru  rx  rb   Zblanketsrg  rw  rs  é   r   rt  rN   ZmarmotséX   éc   r2   rv  )rm  rV   r  rs   rª   rq   )r=   rw  rx  r,  ÚlZouterr   r   r   Útest_dict_proxy_nestedÀ  sF    z&_TestContainers.test_dict_proxy_nestedc                 C   sr   |   ¡ }| |  ¡ ¡ |d  d¡ |  |d  ¡ d¡ |  ¡ }|  ¡ |d< |d  d¡ |  |d  ¡ d¡ d S )Nr   é{   éÈ  )rª   rÚ   r   rc   rV   r¬   rm  rQ   r   r   r   Útest_nested_queueî  s    z!_TestContainers.test_nested_queuec                 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_hiddenrV   rW  rn   rÂ   )r=   rÄ  r   r   r   Útest_namespaceø  s    z_TestContainers.test_namespaceN)rF   rG   rH   r[   r`  rc  rg  rq  rr  r}  r€  r…  r   r   r   r   r[  h  s   

.
r[  r&   c                 C   s   t  |¡ | |  S r   r¶   )r1  r%   r   r   r   Úsqr	  s    
r†  c                 C   s   | | S r   r   )r1  r2  r   r   r   Úmul	  s    r‡  c                 C   s   t  | ¡ tdd ƒ‚d S )Nr1  i   )r?   r    r6   r$   r   r   r   Úraise_large_valuerror	  s    
rˆ  c                 C   s   | S r   r   ©r1  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 rM   )Ún_instancesrŠ  Ú__new__r·   r   r   r   r  	  s    zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rM   )r©   rŒ  r_   r   r   r   Ú__del__	  s    zCountedObject.__del__N)rF   rG   rH   rŒ  r  rŽ  r   r   r   r   r‹  	  s   r‹  c                   @   s   e Zd ZdS )ÚSayWhenErrorN©rF   rG   rH   r   r   r   r   r  	  r  r  c                 c   s8   |dkrt dƒ‚t| ƒD ]}||kr,t dƒ‚|V  qd S )Nr2   zSomebody said when)r  rÖ   )ÚtotalZ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d-d.„ Zed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ 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š  1	  s    

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rb   rb   r   r1  rT  r‰  )r—  ÚapplyrV   r†  )r=   Zpapplyr   r   r   Ú
test_apply8	  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—  ÚmaprV   r†  rª   rÖ   )r=   Zpmapr   r   r   Útest_map=	  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^  r2   rµ   r{  r  r  )r—  Ústarmaprª   r5  rÖ   rV   r‡  Ú	itertools)r=   ZpsmapÚtuplesr   r   r   Útest_starmapC	  s    ÿÿz_TestPool.test_starmapc                 C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )Nrµ   r{  r2   )
rª   r5  rÖ   rV   r—  Zstarmap_asyncr‡  r¬   r¢  r¡  )r=   r£  r   r   r   Útest_starmap_asyncL	  s    ÿz_TestPool.test_starmap_asyncc              	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S r´  )rV   r—  Ú	map_asyncr†  rª   rÖ   r¬   rŸ  r_   r   r   r   Útest_map_asyncQ	  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 )NrK   Ú1)ÚcallbackÚerror_callbackrN   r   rR   r¢   )ri   rK   rª   r—  r¦  rÐ   rÚ   r%   rV   rs   rq   r6   )r=   Z	call_argsr   r   r   Útest_map_async_callbacksU	  s    þ
þ
z"_TestPool.test_map_async_callbacksc                 C   sp   | j dkr|  d | j ¡¡ G dd„ dtƒ}|  t¡& | j t|ƒ gd ¡ W d   ƒ n1 sb0    Y  d S )NrL   rh   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¼   r_   r   r   r   rZ   g	  s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nrˆ  r   r   r   r   ÚAf	  s   r¬  rÁ   )	ri   rj   rk   rŠ  râ   r½   r—  rŸ  r†  )r=   r¬  r   r   r   Útest_map_unplicklableb	  s
    
z_TestPool.test_map_unplicklablec                 C   sB   z| j jtg ddjtd W n tjy<   |  d¡ Y n0 d S )NrN   r  r–   z2pool.map_async with chunksize stalled on null list)r—  r¦  r†  r¬   rk  r   ÚTimeoutErrorr‚  r_   r   r   r   Útest_map_chunksizel	  s    z_TestPool.test_map_chunksizec                 C   sj  | j dkr|  d | j ¡¡ |  t¡& | j ttddƒd¡ W d   ƒ n1 sR0    Y  |  t¡& | j ttddƒd¡ W d   ƒ n1 s’0    Y  |  t¡& | j ttddƒd¡ W d   ƒ n1 sÒ0    Y  G dd„ dƒ}|  t¡" | j t|ƒ d¡ W d   ƒ n1 s0    Y  |  t¡" | j t|ƒ d¡ W d   ƒ n1 s\0    Y  d S )	NrK   rh   rN   r2   rÁ   rT  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   r_   r   r   r   Ú__iter__	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c                 S   s   t ‚d S r   )r  r_   r   r   r   Ú__next__ƒ	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c                 S   s   dS rM   r   r_   r   r   r   rë  …	  s    zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rF   rG   rH   r°  r±  rë  r   r   r   r   ÚSpecialIterable€	  s   r²  )	ri   rj   rk   râ   r  r—  rŸ  r†  r’  )r=   r²  r   r   r   Ú"test_map_handle_iterable_exceptionr	  s    
4442z,_TestPool.test_map_handle_iterable_exceptionc                 C   s<   | j  tdtf¡}t|jƒ}|  |ƒ d¡ |  |jt¡ d S )Nrg  é1   )	r—  Úapply_asyncr†  rk  r:   r¬   rV   rT   r<   ©r=   rX   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 )Nra  r   r–   )r—  rµ  r†  rl  r:   r¬   râ   r   r®  rT   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Ö   rV   rŸ  ra  râ   ÚStopIterationr±  ©r=   rb  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 )NrK   rh   rN   r2   rÁ   rT  r  rg  r¢   ra  rf  )ri   rj   rk   r—  rº  r†  r’  râ   r  r±  rÖ   rV   ra  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Ö   rV   rn  rŸ  )r=   rb  r   r   r   Útest_imap_unorderedÀ	  s    "z_TestPool.test_imap_unorderedc                 C   sp  | 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¡< tdƒD ]"}t|ƒ}|  ||¡ | |¡ q¤W d   ƒ n1 sÜ0    Y  | j ttddƒd	¡}t
ttt
tdƒƒƒƒ}|  t¡> tdƒD ]$}t|ƒ}|  ||¡ | |¡ q&W d   ƒ n1 sb0    Y  d S )
NrK   rh   rN   r2   rÁ   rT  r  rg  r¢   )ri   rj   rk   r—  r¿  r†  r’  râ   r  r±  rª   rŸ  rÖ   ra  r«   r$  )r=   rb  Zexpected_valuesrÙ   rW   r   r   r   Ú-test_imap_unordered_handle_iterable_exceptionÇ	  s@    
þþþ*þz7_TestPool.test_imap_unordered_handle_iterable_exceptionc                 C   s„   | j dkrtnt}|  || jd¡ |  || jd¡ | j dkr€|  d¡}z&|  dt|jƒ¡ W | ¡  | 	¡  n| ¡  | 	¡  0 d S )NrK   r2   r   rT  )
ri   ÚRemoteErrorr6   râ   r–  rV   rs   Ú_poolr   r‹   )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ö   ü	  r  z,_TestPool.test_terminate.<locals>.<listcomp>i'  rN   r  r)  )
r—  r¦  r?   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 rM   )r–  rV   rŸ  r†  rª   rº  r¿  r¦  r¬   r   r‹   rÔ   r   r   r   Útest_empty_iterable
  s    
z_TestPool.test_empty_iterablec                 C   sˆ   | j dkr„ttdƒƒ}dd„ |D ƒ}|  d¡,}| t|¡}|  | ¡ |¡ W d   ƒ n1 s`0    Y  | ¡  |  	t
|jt|¡ d S )NrJ   rÁ   c                 S   s   g | ]}t |ƒ‘qS r   )r†  rô   r   r   r   rö   
  r  z*_TestPool.test_context.<locals>.<listcomp>r¢   )ri   rª   rÖ   r–  r¦  r†  rV   r¬   r‹   râ   r6   )r=   ÚLrÜ   r   r@  r   r   r   Útest_context
  s    
.z_TestPool.test_contextc                 C   s   t dƒ‚d S )Nr~  r¼   r·   r   r   r   Ú_test_traceback
  s    z_TestPool._test_tracebackc                 C   sÒ  | j dkrÎ|  d¡T}z| | j¡ W n( tyP } z|}W Y d }~nd }~0 0 |  d¡ W d   ƒ n1 sp0    Y  | ¡  |  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ tj ¡ :}z|‚W n  t	yü   tjt ¡ Ž  Y n0 W d   ƒ n1 s0    Y  |  d| ¡ ¡ |  d¡|}z| ttddƒd¡ W n* ty| } z|}W Y d }~nd }~0 0 |  d¡ |  t|ƒt¡ |  |jd ¡ W d   ƒ n1 s¼0    Y  | ¡  d S )NrJ   rN   zexpected RuntimeError)r~  z&raise RuntimeError(123) # some commentr2   zexpected SayWhenError)ri   r–  r›  rÉ  Ú	Exceptionr‚  r‹   rï   r©   r½   rV   rA   Ú	__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<    (4ÿ
.z_TestPool.test_tracebackc                 C   s   t dƒ‚d S )Nr™  r¼   r·   r   r   r   Ú_test_wrapped_exceptionD
  s    z!_TestPool._test_wrapped_exceptionc              	   C   sl   |   d¡F}|  t¡ | | j¡ W d   ƒ n1 s80    Y  W d   ƒ n1 sV0    Y  | ¡  d S rM   )r–  râ   r½   r›  rÔ  r‹   rÔ   r   r   r   Útest_wrapped_exceptionH
  s    Hz _TestPool.test_wrapped_exceptionc                 C   sÀ   t  ¡ }|  t¡† |  d¡\}z.| tddg¡ W t  d¡ | ¡  | 	¡  nt  d¡ | ¡  | 	¡  0 W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  |  
t  ¡ | d¡ d S )Nr¢   r   rN   r
  gÍÌÌÌÌÌì?)r?   r@   râ   r6   r–  rŸ  rˆ  r    r   r‹   ÚassertGreater)r=   Zt_startr   r   r   r   Útest_map_no_failfastO
  s    

þ
Fz_TestPool.test_map_no_failfastc                 C   sp   dd„ t dƒD ƒ}dd„ |D ƒ}| j t|¡ ~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ö   f
  r  z4_TestPool.test_release_task_refs.<locals>.<listcomp>rÁ   c                 S   s   g | ]}t  |¡‘qS r   )rë   rì   )rõ   Úor   r   r   rö   g
  r  c                 s   s   | ]}|ƒ V  qd S r   r   )rõ   rð   r   r   r   rl  m
  r  z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )rÖ   r—  rŸ  rŠ  rí   rî   r?   r    rÓ   rV   rå   r‹  rŒ  )r=   ZobjsZrefsr   r   r   Útest_release_task_refsc
  s    
z _TestPool.test_release_task_refsc              	   C   sœ   | j dkr|  d¡ |  d¡}| W d   ƒ n1 s80    Y  |  t¡4 | W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  | ¡  d S )NrK   útest not applicable to managerrN   )ri   rj   r–  râ   r6   r‹   ©r=   r—  r   r   r   Ú
test_enterr
  s    


<z_TestPool.test_enterc                 C   sv   | j dkr|  d¡ |  d¡}| ¡  | ¡  tjj|_t	 
dtf¡ d }t	 ¡  W d   ƒ n1 sh0    Y  d S )NrK   rÚ  rN   z%unclosed running multiprocessing pool)ri   rj   r–  r   r‹   r   r—  ZRUNÚ_stater   Zcheck_warningsÚResourceWarningÚ
gc_collectrÛ  r   r   r   Útest_resource_warning‚
  s    



ÿz_TestPool.test_resource_warning)"rF   rG   rH   r1  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Õ  r×  rÙ  rÜ  rà  Ú__classcell__r   r   r˜  r   r“  *	  sB   	
$


&
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 )Ú_TestPoolWorkerErrorsr>  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¬   rn   rq   r   r‹   )r=   r   rê  rX   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ë  )Úmultiprocessing.poolrí  r   r–  rÖ   rµ  ræ  râ   r¬   rn   rq   ZassertIsNotNonerÐ  rW   r   r‹   )r=   rí  r   Z	iterationrê  rX   Úwrappedr   ré  r   Útest_unpickleable_resultª
  s    

z._TestPoolWorkerErrors.test_unpickleable_resultN)rF   rG   rH   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 )	Ú_TestPoolWorkerLifetimer>  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 )NrT  rÁ   ©Úmaxtasksperchildc                 S   s   g | ]
}|j ‘qS r   ©r   ©rõ   rK  r   r   r   rö   Æ
  r  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rµ   é2   c                 s   s   | ]}|  ¡ V  qd S r   ©ro   rõ  r   r   r   rl  Ô
  r  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rN   c                 S   s   g | ]
}|j ‘qS r   rô  rõ  r   r   r   rö   ×
  r  )r   r–  rV   rs   rÃ  rÖ   rÚ   rµ  r†  Ú	enumerater¬   Z_repopulate_poolÚallr?   r    rÓ   r§   r³   rn  r   r‹   )	r=   r   Zorigworkerpidsr  rÙ   r)  rX   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 )NrT  rN   rò  ra  g333333Ó?)r   r–  rÖ   rÚ   rµ  r†  r   r‹   rø  rV   r¬   )r=   r   r  rÙ   r)  rX   r   r   r   Ú%test_pool_worker_lifetime_early_closeà
  s    z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec                 C   s*   d}t jj d|¡\}}}|  |d¡ d S )NaŽ  if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        ú-cr   )r   r   Úscript_helperÚassert_python_okrV   ©r=   Úcmdré   ÚoutrI  r   r   r   Ú>test_worker_finalization_via_atexit_handler_of_multiprocessingí
  s    zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rF   rG   rH   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   r_   r   r   r   rH    s    zFooBar.fc                 C   s   t ‚d S r   )r6   r_   r   r   r   Úg  s    zFooBar.gc                 C   s   dS )Nú_h()r   r_   r   r   r   Ú_h
  s    z	FooBar._hN)rF   rG   rH   rH  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   r_   r   r   r   r°    s    zIteratorProxy.__iter__c                 C   s
   |   d¡S )Nr±  )Ú_callmethodr_   r   r   r   r±    s    zIteratorProxy.__next__N)rF   rG   rH   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)rH  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 )Ú_TestMyManagerr\  c                 C   s<   t ƒ }| ¡  |  |¡ | ¡  |  |jjdtj f¡ d S rÌ  )	r  rŠ   ÚcommonÚshutdownr«   Ú_processrv   rÃ   rÉ   ©r=   rK   r   r   r   Útest_mymanager$  s
    
z_TestMyManager.test_mymanagerc                 C   sL   t ƒ }|  |¡ W d   ƒ n1 s&0    Y  |  |jjdtj f¡ d S rÌ  )r  r  r«   r  rv   rÃ   rÉ   r  r   r   r   Útest_mymanager_context/  s    (z%_TestMyManager.test_mymanager_contextc                 C   sP   t ƒ }| ¡  | |  |¡ W d   ƒ n1 s20    Y  |  |jjd¡ d S rÌ  )r  rŠ   r  rV   r  rv   r  r   r   r   Ú!test_mymanager_context_prestarted7  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ö   C  r  z)_TestMyManager.common.<locals>.<listcomp>)rH  r  r	  c                    s   g | ]}t ˆ |ƒr|‘qS r   r  r  )Úbarr   r   rö   D  r  rH  r  r	  r  r  c                 S   s   g | ]}|| ‘qS r   r   rô   r   r   r   rö   S  r  rÁ   )r  r  r
  rV   rH  râ   r6   r  r  rÂ  r	  rª   rÖ   )r=   rK   r
  Zfoo_methodsZbar_methodsr   )r  r™  r   r  >  s     z_TestMyManager.commonN)rF   rG   rH   r[   r  r  r  r  r   r   r   r   r     s
   r  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queue[  s    r  c                   @   s   e Zd ZdZdS )ÚQueueManagerz$manager class used by server processN©rF   rG   rH   r‘  r   r   r   r   r  ^  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   b  s   r   Ú	xmlrpclibc                   @   s8   e Zd ZdZg d¢Zedd… Zedd„ ƒZdd„ ZdS )Ú_TestRemoteManagerr\  )úhello worldNTç      @u   hallÃ¥ vÃ¤rldenu   Ð¿Ñ€Ð¸Ð²Ñ–Ñ‚ ÑÐ²Ñ–Ñ‚s   hallå världenNc                 C   s2   t ||td}| ¡  | ¡ }| t| jƒ¡ d S )N©Úaddressrm   Z
serializer)r   Ú
SERIALIZERÚconnectr  rc   Útupler7  ©r‚   r&  rm   rK   r   r   r   r   Ú_putters  s    ÿz_TestRemoteManager._putterc                 C   s    t  d¡}tt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)r3   Úurandomr  r   ÚHOSTr'  rŠ   rä   r  r|   r+  r&  rp   r   r(  r  rV   r¬   rÛ   râ   rÊ  rc   r?   r    )r=   rm   rK   r   Zmanager2r   r   r   r   Útest_remote}  s"    
ÿÿz_TestRemoteManager.test_remote)	rF   rG   rH   r[   r7  rÛ   r1  r+  r/  r   r   r   r   r"  i  s   
	r"  Úmd5c                   @   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  rc   r*  r   r   r   r+    s    ÿz_TestManagerRestart._putterc              
   C   s:  t  d¡}ttjdf|td}zv| ¡ }|j}|j 	¡  | 
¡  | j| j|j|fd}| 
¡  | ¡  | ¡ }|  | ¡ d¡ ~W t|dƒrª| ¡  nt|dƒr¨| ¡  0 t||td}z| 
¡  |  |j¡ W nd ty4 } zJ|jtjkrð‚ t d¡ t||td}t|dƒr |  |j¡ W Y d }~n
d }~0 0 d S )Nr,  r   r%  r…   r#  r  r   )r3   r-  r  r   r.  r'  Z
get_serverr&  Úlistenerr   rŠ   r|   r+  r‹   r  rV   r¬   rÂ   r  rä   ÚOSErrorÚerrnoZ
EADDRINUSEr?   r    )r=   rm   rK   ZsrvrÚaddrr   r   r­   r   r   r   Útest_rapid_restart¥  sD    
ÿ


ÿ

ÿ
ÿz&_TestManagerRestart.test_rapid_restartN)rF   rG   rH   r1  r+  r6  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 )%Ú_TestConnectionrg   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )r7  Ú
recv_bytesÚSENTINELÚ
send_bytesr   )r‚   r&  Úmsgr   r   r   Ú_echoÕ  s    z_TestConnection._echoc              
   C   sL  |   ¡ \}}| j| j|fd}d|_| ¡  g d¢}tdƒ}|d }t dttdƒƒ¡}| j	dkrv|  
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 n8 tjy } z|  
|j|f¡ W Y d }~nd }~0 0 |  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…   T)rN   r$  Nr#  rÁ   rÙ   rf  rJ   r   rT  rg  z(                                        zexpected BufferTooShort, got %sFr2   r"   ÚXi   )(rˆ   r|   r=  rp   rŠ   r   rS  rª   rÖ   ri   rV   r©   ÚfilenorÐ   r”   rŒ   r;  r9  rs   Úrecv_bytes_intoÚitemsizeÚ	bytearrayr   ÚBufferTooShortrA   r‚  r:   rš   rT   r<   rk  r?   r    r:  r   ÚreadableÚwritablerâ   ÚEOFErrorr‹   )r=   r&  r5  r   rN  r<  ZlongmsgrT  ÚbufferrÜ   rX   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ƒ   rN   rJ   Tr¢   )
rˆ   rV   r”   rŒ   ri   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=  rp   rŠ   r   r   r;  rV   r9  r:  r‹   )r=   r&  r5  r   r<  r   r   r   Útest_spawn_close7  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 )NrJ   rh   Úabcdefghijklmnopqrstuvwxyzrb   rg  rU  é   é   r7  r   é   é   rN   r2   rf  )
ri   rj   rk   r   rˆ   r;  rV   r9  râ   r6   )r=   r<  rR   rS   r   r   r   Útest_sendbytesL  s&    

z_TestConnection.test_sendbytesc              
   C   sX   zt  |¡ W n@ tyN } z(|jtjkr8W Y d }~dS ‚ W Y d }~nd }~0 0 dS d S )NFT)r3   Úfstatr3  r4  ÚEBADF)r‚   rQ  r­   r   r   r   Ú_is_fd_assignedl  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  r3   Údup2r?  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerN  r  r   )r‚   r&  ÚdataZcreate_dummy_fdsrÙ   rQ  r   r   r   Ú_writefdw  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ƒ6}| ¡ }tr€t |¡}t |||j¡ W d   ƒ n1 s¤0    Y  | ¡  ttj	jdƒ }|  | ¡ d¡ W d   ƒ n1 sê0    Y  d S )	NrJ   úonly makes sense with processesTrƒ   s   foor…   ÚwbÚrb)ri   rj   rˆ   r|   r[  rp   rŠ   rä   r   r   rC  rB  rE  r?  rX  Zget_osfhandler   Úsend_handler   r‹   rV   rF  )r=   r&  r5  r   rH  rQ  r   r   r   Útest_fd_transferƒ  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ƒx}| ¡ }tdtƒD ]}|  |¡s~ qœq~|  d	¡ t ||¡ zt |||j¡ W t |¡ nt |¡ 0 W d   ƒ n1 sè0    Y  | ¡  ttj	jd
ƒ }|  | ¡ d¡ W d   ƒ n1 s00    Y  d S )NrJ   r]  Trƒ   s   barr…   r^  r+   z2could not find an unassigned large file descriptorr_  )ri   rj   rˆ   r|   r[  rp   rŠ   rä   r   r   rC  rB  rE  r?  rÖ   ÚMAXFDrU  r‚  r3   rV  r   r`  r   r   r‹   rV   rF  )r=   r&  r5  r   rH  rQ  Znewfdr   r   r   Útest_large_fd_transfer–  s(    	



6z&_TestConnection.test_large_fd_transferc                 C   s   t  | ¡ d¡ d S )Nó    )r3   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 )NrJ   r]  Trƒ   r…   )ri   rj   rˆ   r|   rg  rp   rŠ   râ   r½   r   rW  r‹   ©r=   r&  r5  r   r   r   r   Útest_missing_fd_transfer»  s    

z(_TestConnection.test_missing_fd_transferc              	   C   sÒ   |   ¡ \}}|p |L | d¡ |  | ¡ d¡ | jdkrT|  |j¡ |  |j¡ W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  | jdkrÎ|  |j¡ |  |j¡ |  t	|j¡ |  t	|j¡ d S ©NéÁ  rJ   )
rˆ   r”   rV   rŒ   ri   r~   Úclosedrn   râ   r3  rQ   r   r   r   rÈ  Ê  s    

H
z_TestConnection.test_contextN)F)rF   rG   rH   r[   r1  r=  rH  rK  rL  rR  rU  r[  r7   r2  ÚHAS_REDUCTIONra  rZ  rç   rú   rc  rÂ   r3   rd  rg  ri  rÈ  r   r   r   r   r8  Ñ  s<   
O 




ÿ
ÿÿ

r8  c                   @   s6   e Zd ZdZdd„ Zdd„ Ze ej	d¡dd„ ƒZ
d	S )
Ú_TestListenerr>  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  r|  r   r   r   Útest_multiple_bindÞ  s    ÿz _TestListener.test_multiple_bindc              
   C   s¶   | j  ¡ €}| j  |j¡R}| ¡ *}| d¡ |  | ¡ d¡ W d   ƒ n1 sT0    Y  W d   ƒ n1 sr0    Y  W d   ƒ n1 s0    Y  | jdkr²|  	t
|j¡ d S rj  ©rq  rs  ÚClientr&  Úacceptr”   rV   rŒ   ri   râ   r3  )r=   r|  re   r,  r   r   r   rÈ  å  s    

j
z_TestListener.test_contextz"test needs abstract socket supportc              
   C   s¸   | j  d¡€}| j  |j¡R}| ¡ *}| d¡ |  | ¡ d¡ W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  W d   ƒ n1 s’0    Y  | jdkr´|  	t
|j¡ d S )Nz
 somethingrk  rJ   ru  )r=   r2  Úclientr,  r   r   r   Útest_abstract_socketï  s    

j
z"_TestListener.test_abstract_socketN)rF   rG   rH   r[   rt  rÈ  r7   r2  r   Ú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 )Ú_TestListenerClientrg   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&  rp   rŠ   rw  rV   rŒ   r‹   r   )r=   rp  r|  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…   TrN   r¤   )rq  rs  r|   r}   r&  rp   rŠ   r?   r    rw  rV   rŒ   r   r‹   )r=   r|  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  ó   hellorN   )
rq  rr  rs  rv  r&  rw  r;  rn   rš   r   )r=   Úfamr|  re   rR   r   r   r   Útest_issue16955!  s    
z#_TestListenerClient.test_issue16955N)	rF   rG   rH   r[   r1  r}   r|  r}  r€  r   r   r   r   r{  ü  s   
r{  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 )Ú	_TestPollrg   c                 C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFr  T)rˆ   rV   rš   r;  rQ   r   r   r   Útest_empty_string0  s
    
z_TestPoll.test_empty_stringc                 C   s*   |D ]}t  d¡ | |¡ q| ¡  d S ©Nr"   )r?   r    r;  r   )r‚   r&  Ústringsr   r   r   r   Ú_child_strings7  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š   r9  rV   r‹   )r=   r„  rR   rS   r   r   rÙ   r1  r   r   r   Útest_strings>  s    
z_TestPoll.test_stringsc                 C   s   |  d¡ d S ra   )rš   )r‚   r@  r   r   r   Ú_child_boundariesM  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Š   r?   r    r;  r   r‹   r«   r9  )r=   r@  rK  r   rÇ  ry  r   r   r   Útest_boundariesU  s    
z_TestPoll.test_boundariesc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nr†  r‡  ó   cd)r;  )r‚   rS   r   r   r   Ú_child_dont_mergea  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ˆ   rV   rš   r|   r  rŠ   r9  r‹   )r=   rR   rS   r   r   r   r   Útest_dont_mergeg  s    z_TestPoll.test_dont_mergeN)rF   rG   rH   r[   r‚  r1  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 )Ú_TestPicklingConnectionsr>  c                 C   s   ddl m} |jtjd d S )Nr   )Úresource_sharerr–   )r   r  r<  r   r›   )r‚   r  r   r   r   rš  „  s    z&_TestPicklingConnections.tearDownClassc                 C   s–   |D ]@}| j j|d}| |j¡ | ¡ }| |¡ | ¡  | ¡  qt tj	df¡}| | 
¡ ¡ | ¡ \}}| |¡ | ¡  | ¡  | ¡  d S )Nro  r   )rq  rs  r”   r&  rw  r   ÚsocketÚcreate_serverr   r.  ÚgetsocknamerŒ   )r‚   r&  rr  r  r|  Únew_connr5  r   r   r   Ú	_listener‰  s    


z"_TestPicklingConnections._listenerc                 C   sx   t |jd ƒD ]*\}}| j |¡}| | ¡ ¡ | ¡  q| ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S r   )
r7  rŒ   rq  rv  r”   r8  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•  rp   rŠ   r   r—  r   rŒ   r”   rV   r8  r   rÚ   r‹   )r=   rr  ZlconnZlconn0Zlpr   Zrconn0Z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&  rK  r@  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œ  rp   rŠ   r   r”   rV   rŒ   r‹   )r=   r&  r5  r   r@  rK  r   r   r   Útest_accesså  s"    


z$_TestPicklingConnections.test_accessN)rF   rG   rH   r[   r1  rš  r•  r—  rš  rœ  r  r   r   r   r   r  ~  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 )
Ú	_TestHeapr>  c                    s*   t ƒ  ¡  tjjj| _tj ¡ tjj_d S r   )r”  r   r   rÜ  rÝ  Ú_heapÚold_heapZHeapr_   r˜  r   r   r   
  s    
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )r   r   rÜ  rÝ  rŸ  r”  r  r_   r˜  r   r   r    s    z_TestHeap.tearDownc              
   C   sj  d}d}g }t jjj}d|_t|ƒD ]L}tt dd¡d ƒ}t j |¡}| 	|¡ t
|ƒ|krnt |¡}||= ~q$|jb 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 d   ƒ n1 sä0    Y  t |¡ |r
| ¡  qø|  |j|j¡ |  t
|jƒd¡ |  t
|jƒd¡ |  t
|jƒd|j¡ |  t
|jƒd¡ d S )Néˆ  rö  r   rN   r(  ÚfreeÚoccupiedc                 s   s   | ]}|j V  qd S r   ©rV  )rõ   Úarenar   r   r   rl  :  r  z&_TestHeap.test_heap.<locals>.<genexpr>rT  )r   rÜ  rÝ  rŸ  Z_DISCARD_FREE_SPACE_LARGER_THANrÖ   rÐ   ÚrandomÚlognormvariaterÚ   rs   Ú	randrangerä  rª   Z_len_to_seqr7  Z_arenasÚindexZ_allocated_blocksr  rV   ÚsumÚsortrV  Úshufflerf  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)r=   Z
iterationsZ	maxblocksZblocksrÜ  rÙ   rV  rS   rù  r¢  r£  rÇ  r¥  rŠ   r<  Zarena_blocksZnarenaZnstartZnstopr   r   r   Ú	test_heap  s`    



ÿÿ
ÿ
0
z_TestHeap.test_heapc                 C   sx   t  ¡ st  ¡  |  t j¡ t  ¡ }| jt jg|¢R Ž  t  d¡ tdƒD ](}tj	 
d¡}tj	 
d¡}||_||_qJd S )NrÁ   r¡  rN   )rí   Ú	isenabledÚenablerä   ÚdisableÚget_thresholdÚset_thresholdrÖ   r   rÜ  rÝ  Zbuddy)r=   Z
thresholdsrÙ   rR   rS   r   r   r   Útest_free_from_gcT  s    
z_TestHeap.test_free_from_gc)	rF   rG   rH   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 )Ú_Foor1  r2  ÚzN)rF   rG   rH   r.   r/   r0   Z_fields_r   r   r   r   r´  n  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 )Ú_TestSharedCTypesr>  c                 C   s   t s|  d¡ d S r3  r4  r_   r   r   r   r   y  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­  )rW   r1  r2  rÖ   rs   )r‚   r1  r2  rµ  r™  rT  ÚstringrÙ   r   r   r   Ú_double}  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Ù   rg  rA  gUUUUUUÕ?r/  rT  r¢   r,  rÁ   re   r  r¤   r…   Té   gUUUUUUå?r0  ra  ç      @Z
hellohello)r   r/   r0   r´  rR  rª   rÖ   r   rW   r|   r¸  rp   rŠ   r‹   rV   rP   r1  r2  )
r=   r¢  r1  r2  rµ  r™  rT  r·  r   rÙ   r   r   r   Útest_sharedctypesˆ  s&    
z#_TestSharedCTypes.test_sharedctypesc                 C   s   | j dd d S )NTrA  )r»  r_   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	   r1  r2  rµ  rV   rP   )r=   r™  r  r   r   r   Ú	test_copy¢  s    z_TestSharedCTypes.test_copyN)F)
rF   rG   rH   r[   r   r1  r¸  r»  r¼  r¾  r   r   r   r   r¶  u  s   


r¶  z&requires multiprocessing.shared_memoryc                   @   sš   e Zd ZdZedd„ ƒZdd„ Ze e	j
dkd¡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 )Ú_TestSharedMemoryr>  c                 C   s8   t | tƒrt | ¡}n| }||jd t|ƒ…< | ¡  d S r   )r   rW  r
   ÚSharedMemoryr™  rs   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   )rW  r3   ru   )r=   Úprefixr   r   r   Ú_new_shm_name¼  s    z_TestSharedMemory._new_shm_namer#   ztest is broken on Windowsc              	      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¡ tjdd	d W d   ƒ n1 sô0    Y  |  t¡ tjd
d W d   ƒ n1 s,0    Y  tj d¡ }tj‰ |   d¡|   d¡g}‡ fdd„|D ƒ}||_tjddd}|  |j¡ |  |j|d ¡ ||_tjddd}|  |j¡ |  |j|d ¡ W d   ƒ n1 sê0    Y  tjrŠ|   d¡}	tj|	ddd}
|  t¡X z<|  |
jd¡ t |	¡}| ¡  | ¡  |
 ¡  W |
 ¡  n
|
 ¡  0 W d   ƒ n1 s€0    Y  |  t¡  tj|ddd}W d   ƒ n1 s¼0    Y  tjr G dd„ dtjƒ}||ƒ}|  |j|j¡ | ¡  |  t¡" t d¡}| ¡  W d   ƒ n1 s40    Y  | ¡  |  t¡ tjddd}W d   ƒ n1 sv0    Y  |  t¡ tjddd}W d   ƒ n1 s°0    Y  |  t¡ tjdd}W d   ƒ n1 sè0    Y  d S )NZtest01_tsmbTé   ©ÚcreaterV  rå  r   r  r¤  éþÿÿÿF©rÆ  z,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc                    s   g | ]}ˆ | ‘qS r   r   r  ©ZNAME_PREFIXr   r   rö   ì  r  z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rN   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)rF   rG   rH   r3   rO  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory!  s   rË  Ztest01_nottherer2   )rÃ  r
   rÀ  rä   rC  rV   r   r…  rV  rs   r™  r   rÅ  râ   r6   r7   ÚmockZpatchZ_SHM_NAME_PREFIXZside_effectÚ_nameZ
_USE_POSIXÚFileNotFoundErrorÚFileExistsError)r=   Z	name_tsmbÚsmsZalso_smsZsame_smsZmock_make_filenameÚnamesZshm1Zshm2Z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Â  sŠ    


,,ÿ2
ý

4ý&
(..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…   rb   s   HELLO)r
   rÀ  rä   rC  r|   rÁ  r   rp   rŠ   r‹   rV   rr   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   sˆ   t j ¡ }| ¡  | tdƒ¡}t |jj	t
j¡ | tdƒ¡}|  t¡" t t ¡ t
j¡ W d   ƒ n1 sr0    Y  | ¡  d S r´  )r   ÚmanagersÚSharedMemoryManagerrŠ   ÚShareableListrÖ   r3   rÌ   r  r   rÃ   r.  râ   rÕ  ru   r  )r=   ÚsmmÚslZsl2r   r   r   Ú4test_shared_memory_SharedMemoryServer_ignores_sigintW  s    
0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlyc                 C   s(   d}t jj d|¡\}}}|  |¡ 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   Ú>test_shared_memory_SharedMemoryManager_reuses_resource_trackero  s    	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc                    sª  t j ¡ ‰ |  t¡ ˆ jdd W d   ƒ n1 s60    Y  ˆ  ¡  ‡ 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 d   ƒ n1 s0    Y  t j ¡ .}| 	d¡}|jd	d}	|j
j}W d   ƒ n1 sX0    Y  tjdkr¦|  t¡ tj	|d}
W d   ƒ n1 sœ0    Y  d S )Nr^  r¤  c                    s   g | ]}ˆ   t|ƒ¡‘qS r   )rÖ  rÖ   rô   ©Zsmm1r   r   rö   ‰  r  zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rb   rÁ   c                    s   g | ]}ˆ j |d ‘qS )r¤  )rÀ  )rõ   r)  rÛ  r   r   rö   Š  r  r,  é€   é   r   ©r   r#   Úhowdy)r   rÔ  rÕ  râ   r6   rÀ  rŠ   rÖ   r
   rÖ  Úshmr   rV   rs   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_basics„  s,    
*
,
(z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc              	   C   s  t  g d¢¡}|  |jj¡ |  |jd¡ |  t|ƒd¡ t 	¡ ` t 
d¡ |  t¡ | d¡ W d   ƒ n1 sx0    Y  |  | d¡d¡ W d   ƒ n1 s¨0    Y  |  |d d	¡ |  |d
 d¡ |  t|ƒd¡ d|d< |  |d d¡ d|d< |  |d d¡ |  |jd¡ |  td¡ d|d< W d   ƒ n1 sL0    Y  |  |d d¡ d|d< |  |d d¡ |  |d d¡ |  td¡ d|d< W d   ƒ n1 sº0    Y  |  |d d¡ |  td¡ d|d< W d   ƒ n1 s 0    Y  |  |d d¡ t 	¡ P t 
d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ W d   ƒ n1 sz0    Y  |  d¡}t j||d}zˆ|  |jj|jj¡ |  ||jj¡ |  t|ƒt|ƒ¡ |  |j|j¡ d|d< |  |d d¡ |  |d d¡ |j ¡  W |j ¡  n|j ¡  0 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 d   ƒ n1 sè0    Y  |j ¡  W |j ¡  n|j ¡  0 d S ) N)rß  ó   HoWdYgX9´ÈvqÀrµ   NTrå  z8s8sdqxxxxxx?xxxxxxxx?qrg  ÚignoreZ100rµ   rT  r   rß  rÇ  Trå  Zsomerf  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srN   râ  u	   encodÃ©ess	   123456789r¢   s   adiosZtest03_duplicaterÞ  éM   r2   ip  r7  Úany)r
   rÖ  rä   rà  rC  rV   rk   rs   ÚwarningsÚcatch_warningsÚsimplefilterrâ   r6   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_basics¢  s    ÿ

(0þÿ(ÿ(ÿ(

2


*z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc                 C   sæ   t  tdƒ¡}|  |jj¡ t |¡}t |¡}|  	t
|t jƒ¡ |  	|d d¡ |  ||u ¡ d|d< |  |d d¡ dt|jjƒ }t  tdƒ¡}|  |jj¡ t |¡}|  	t|ƒt|ƒk¡ |j ¡  |j ¡  |j ¡  d S )NrÁ   r2   r^  Úchangedrf  rR   i  )r
   rÖ  rÖ   rä   rà  rC  ÚpickleÚdumpsÚloadsrn   r   r~   rV   rs   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j }d}t ¡ |k r¨t |¡ t|d dƒ}ztj|dd	}W qX ty¤   Y q°Y qX0 qXtd
ƒ‚tjdkræt d|› d¡ |j ¡  ¡ }|  d|¡ W d   ƒ n1 sú0    Y  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  r"   r¢   rb   FrÈ  zJA SharedMemory segment was leaked after a process was abruptly terminated.r   ú/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%   r?   r@   r   r›   r    Úminr
   rÀ  rÎ  rœ   r3   r   r   Ú
unregisterr   rF  r«   )r=   r   r   r   ÚdeadlinerC   r×  rI  r   r   r   Ú4test_shared_memory_cleaned_after_process_termination  s4    
þ

þzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rF   rG   rH   r[   r”  rÁ  rÃ  r7   rZ  rç   rú   rÒ  rÓ  r3   r   rÙ  rÚ  rá  ré  rî  rû  r   r   r   r   r¿  ­  s   

x

`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 )Ú_TestFinalizer>  c                 C   s   t j ¡ | _t j ¡  d S r   )r   Ú_finalizer_registryr	   Úregistry_backupr  r_   r   r   r   r   U  s    z_TestFinalize.setUpc                 C   s&   t  ¡  |  tj¡ tj | j¡ d S r   )rí   rî   r~   r   rý  Úupdaterþ  r_   r   r   r   r  Y  s    z_TestFinalize.tearDownc                 C   s&  G dd„ dt ƒ}|ƒ }tj||jdd ~t ¡  |ƒ }tj||jdd}|ƒ  |ƒ  ~t ¡  |ƒ }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  )rR   r¾   )rS   )re   )Úd10rN   )rA   Úexitpriority)Úd01r   )Úd02)Úd03©r­   iöÿÿÿ)ÚSTOPiœÿÿÿ)
rŠ  r   ÚFinalizer”   rí   rî   Ú_exit_functionr   r3   Ú_exit)r‚   r&  r  rR   rS   Zclose_bre   r   r  r  r  r   r   r   Ú_test_finalize^  s4    z_TestFinalize._test_finalizec                 C   s^   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  dd„ t|jdƒD ƒ}|  |g d¢¡ d S )Nr…   Tc                 S   s   g | ]}|‘qS r   r   )rõ   ry  r   r   r   rö   Ž  r  z/_TestFinalize.test_finalize.<locals>.<listcomp>r  )rR   rS   r   r  r  r  r­   )	rˆ   r|   r
  rp   rŠ   r‹   r7  rŒ   rV   )r=   r&  r5  r   rÛ   r   r   r   Útest_finalize†  s    z_TestFinalize.test_finalizec              	      s  dd„ ‰G ‡fdd„dt ƒ‰ d‰d ‰‡‡fdd„}‡ ‡‡fdd	„}t ¡ }t ¡ }z–t d
¡ t ddd¡ tj|dtj|dg}t	j
 |¡ t d¡ d‰W d   ƒ n1 s´0    Y  ˆd urÊˆ‚W t |¡ tj|Ž  t ¡  nt |¡ tj|Ž  t ¡  0 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 )NrN   rµ   )r  )rì   r   r  r¦  Úrandintr_   ©r  r   r   r>   —  s    z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rF   rG   rH   r>   r   r  r   r   r  –  s   r  Fc               
      sR   ˆsNt  t ¡ d ¡ zt ¡  W q  tyJ }  z| ‰ W Y d } ~ q d } ~ 0 0 q d S rƒ  )r?   r    r¦  r   Ú_run_finalizersrÊ  r  )rÐ  Úfinishr   r   Úrun_finalizersŸ  s    z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc               
      sd   i } ˆs`z$‡ fdd„t dƒD ƒ| t d¡< W q ty\ } z|‰|  ¡  W Y d }~qd }~0 0 qd S )Nc                    s   h | ]
}ˆ ƒ ’qS r   r   rô   )r  r   r   Ú	<setcomp>±  r  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÁ   rb   )rÖ   r¦  ÚgetrandbitsrÊ  r  )r,  r­   )r  rÐ  r  r   r   Úmake_finalizersª  s    $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rb   ry   rº  T)rŠ  rç   Úgetswitchintervalrí   r±  Úsetswitchintervalr²  r¯   r  r   r   Zstart_threadsr?   r    rî   )r=   r  r  Zold_intervalZold_thresholdrL   r   )r  r  rÐ  r  r   Útest_thread_safety‘  s2    


ÿ
"


þ

z _TestFinalize.test_thread_safetyN)
rF   rG   rH   r[   r   r  r1  r
  r  r  r   r   r   r   rü  Q  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 )rN   r   )r3   ÚpathÚsplitextÚsplit)rõ   rH  r   r   r   rö   Ó  r  z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zmultiprocessing.r   )rõ   r  r   r   r   rö   Ô  r  zmultiprocessing.__init__r   )
Úglobr3   r  Údirnamer   Ú__file__r‹   Úescaper$  rÚ   )r=   r  Z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 u r\| d¡ |D ]N}t|ƒ tj| }|  t	|dƒ|¡ |j
D ]}|  t	||ƒd||f ¡ qŽq`d S )	Nr#   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypesÚ__all__z%r does not have attribute %r)r#  rç   rú   r$  rm  r.   r  r"  rn   rÂ   r$  )r=   r"  r   ÚmodÚattrr   r   r   Útest_importÙ  s&    








þz_TestImportStar.test_importN)rF   rG   rH   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 )	Ú_TestLoggingr>  c                 C   sD   t  ¡ }| tj¡ |  |d u¡ | d¡ | d¡ | t¡ d S )Nzthis will not be printedznor will this)	r   Ú
get_loggerÚsetLevelr   Ú
SUBWARNINGrn   Ú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Ú	getLoggerr4  rˆ   r*  r|   r2  rŠ   rV   rŒ   r‹   r   ÚNOTSETr.  )	r=   ZLEVEL1ZLEVEL2r/  Zroot_loggerZ
root_levelrI  rJ  r   r   r   r   Ú
test_level  s*    


z_TestLogging.test_levelN)rF   rG   rH   r[   r0  r1  r2  r8  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 )	Ú_TestPollEintrr>  c                 C   s   t  d¡ t |tj¡ d S rƒ  )r?   r    r3   rÌ   rÃ   ÚSIGUSR1)r‚   r   r   r   r   Ú_killer@  s    
z_TestPollEintr._killerr:  úrequires SIGUSR1c              
      s¾   dg‰ ‡ fdd„}t  ¡ }t tj|¡}z€| j| j|fd}| ¡  z,| jtjdd}| ¡  | 	¡  W | 	¡  n
| 	¡  0 |  
ˆ d ¡ |  |jd¡ W t tj|¡ nt tj|¡ 0 d S )NFc                     s   dˆ d< d S )NTr   r   r¾   ©Z
got_signalr   r   ÚrecordH  s    z._TestPollEintr.test_poll_eintr.<locals>.recordr…   )r¢   r   )r3   ru   rÃ   r:  r|   r;  rŠ   r?   r    r‹   rn   rV   rv   )r=   r>  r   Z
oldhandlerZkillerr   r   r=  r   Útest_poll_eintrE  s    
z_TestPollEintr.test_poll_eintrN)rF   rG   rH   r[   r1  r;  r7   r2  rÂ   rÃ   r?  r   r   r   r   r9  <  s
   
r9  c                   @   s    e Zd Ze ed¡dd„ ƒZdS )ÚTestInvalidHandleúskipped on Windowsc              	   C   s^   t j d¡}z.z| ¡  W n ttfy0   Y n0 W d |_nd |_0 |  ttft jjd¡ d S )NiÈM®r2   )r   rq  Ú
Connectionrš   r6   r3  Ú_handlerâ   rf  r   r   r   Útest_invalid_handles`  s    
ÿz&TestInvalidHandle.test_invalid_handlesN)rF   rG   rH   r7   rZ  ÚWIN32rD  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=   rV  r   r   r   r9  v  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   ©r=   rZ  r   r   r   r;  x  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rF   rG   rH   r9  r;  r   r   r   r   Ú_FakeConnectionu  s   rJ  ó   abc)rŠ  râ   r   ÚAuthenticationErrorrq  Údeliver_challenge©r=   rJ  r   r   r   Ú#test_deliver_challenge_auth_failuret  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  r_   r   r   r   r>   €  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 )NrN   r¢   rG  r  )r  r   rq  Ú	CHALLENGErH  r   r   r   r9  ‚  s    

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   rI  r   r   r   r;  ‰  s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rF   rG   rH   r>   r9  r;  r   r   r   r   rJ    s   rJ  rK  )rŠ  râ   r   rL  rq  Úanswer_challengerN  r   r   r   Ú"test_answer_challenge_auth_failure~  s
    þz,OtherTest.test_answer_challenge_auth_failureN)rF   rG   rH   rO  rR  r   r   r   r   rF  q  s   
rF  c                 C   s   |  j d7  _ d S rM   )r   )Únsr   r   r   Úinitializer“  s    rT  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„  rS  r   r_   r   r   r   r   ˜  s    
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )rW  r  r‹   r_   r   r   r   r    s    
zTestInitializers.tearDownc                 C   sN   t j ¡ }|  t|jd¡ | t| jf¡ |  | jj	d¡ | 
¡  | ¡  d S rM   )r   rÔ  ÚSyncManagerrâ   Ú	TypeErrorrŠ   rT  rS  rV   r   r  r‹   )r=   r  r   r   r   Útest_manager_initializer¡  s    
z)TestInitializers.test_manager_initializerc                 C   sH   | j ttjdd t dt| jf¡}| ¡  | ¡  |  | jj	d¡ d S )NrN   )rT  )
râ   rY  r   r–  rT  rS  r   r‹   rV   r   rÔ   r   r   r   Útest_pool_initializer©  s
    z&TestInitializers.test_pool_initializerN)rF   rG   rH   r   r  rZ  r[  r   r   r   r   rU  –  s   rU  c                 C   s*   z| j dd}W n tjy$   Y n0 d S )NF)Úblock)r¬   ri  rr  )rd   Úitemr   r   r   Ú_this_sub_processµ  s    r^  c                  C   s2   t  ¡ } t jt| fd}d|_| ¡  | ¡  d S rÒ   )r   r   r|   r^  rp   rŠ   r‹   )r   ZsubProcr   r   r   Ú_test_process»  s
    r_  c                 C   s   | |  S r   r   r‰  r   r   r   Ú_afuncÂ  s    r`  c                  C   s0   t jdd} |  tg d¢¡}|  ¡  |  ¡  d S )Nrf  r>  )rN   r¢   rT  rf  rb   ra  rg  )r   r–  rŸ  r`  r   r‹   )r—  r1  r   r   r   Úpool_in_processÅ  s    ra  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   r>   Ì  s    z_file_like.__init__c                 C   s$   t  ¡ }|| jkr|| _g | _| jS r   )r3   ru   rd  Ú_cacher÷  r   r   r   ÚcacheÐ  s
    
z_file_like.cachec                 C   s   | j  |¡ d S r   )rf  rÚ   rI  r   r   r   r  Ù  s    z_file_like.writec                 C   s   | j  d | j¡¡ g | _d S )Nr7  )rc  r  r‹   rf  re  r_   r   r   r   ÚflushÜ  s    z_file_like.flushN)rF   rG   rH   r>   Úpropertyrf  r  rg  r   r   r   r   rb  Ë  s
   
rb  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 ©Nry   )r   r|   r_  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 rj  )r   r|   ra  rŠ   r‹   rÔ   r   r   r   Útest_pool_in_processç  s    z/TestStdinBadfiledescriptor.test_pool_in_processc                    s:   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  d S )Nr™  c                      s   ˆ   ¡ S r   )rg  r   ©Zfliker   r   rÀ  ð  r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>ry   )r  r  rb  r  r   r|   rg  )r=   Úsior  r   rm  r   Útest_flushingì  s    
z(TestStdinBadfiledescriptor.test_flushingN)rF   rG   rH   rk  rl  ro  r   r   r   r   ri  à  s   ri  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Ö   r?   r    r¦  r”   r3   ru   r   )r‚   rK  Ú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 ]@}z| ¡ }	W n$ tyÀ   | |¡ | 	¡  Y qŒ0 | 
|	¡ qŒq€| ¡  t‡ fdd	„td
ƒD ƒƒ}
|  ||
¡ d S )Nr   r$   rf  Frƒ   r…   Tc                 3   s"   | ]}ˆ D ]}||j fV  q
qd S r   rô  )rõ   rÙ   r   ©rý   r   r   rl    r  z%TestWait.test_wait.<locals>.<genexpr>rÁ   )Úmultiprocessing.connectionr%   rÖ   r   rˆ   r|   rr  rp   rŠ   r   rÚ   rä   r‹   rŒ   rF  r$  r«  rn  rV   )r=   rq  r%   ÚreadersÚmessagesrÙ   r@  rK  r   r<  rÜ   r   rs  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Ö   r?   r    r¦  r–  r   r   )r‚   r&  rq  r   rÙ   r   r   r   Ú_child_test_wait_socket  s    
z TestWait._child_test_wait_socketc                 C   s2  ddl m} t tjdf¡}| ¡ }g }g }i }tdƒD ]<}tj	| j
||fd}	d|	_|	 ¡  | |	¡ |  |	j¡ q8t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$   rf  r…   Tr,  r7  c                 s   s   | ]}d | V  qdS )rx  Nr   rô   r   r   r   rl  F  r  z,TestWait.test_wait_socket.<locals>.<genexpr>rÁ   r˜  r  )rt  r%   r‘  r’  r   r.  r“  rÖ   r   r|   ry  rp   rŠ   rÚ   rä   r‹   rw  r   rŒ   r$  r   r7  rV   )r=   rq  r%   r|  r5  ru  rý   ZdicrÙ   r   r@  rê  r<  rÜ   Úvr   r   r   Útest_wait_socket'  s:    ÿ





zTestWait.test_wait_socketc                 C   s   |   d¡ d S r  )rw  r_   r   r   r   Útest_wait_slowJ  s    zTestWait.test_wait_slowc                 C   s   |   d¡ d S r  )r{  r_   r   r   r   Útest_wait_socket_slowM  s    zTestWait.test_wait_socket_slowc                 C   s´   ddl m} d}t ¡ \}}t ¡ }|||g|ƒ}t ¡ | }|  |g ¡ |  ||d ¡ |  ||d ¡ | 	d ¡ t ¡ }|||gdƒ}t ¡ | }|  ||g¡ |  |d¡ d S )Nr   r$   rb   r¢   r
  r  çš™™™™™Ù?)
rt  r%   r   rˆ   r?   r@   rV   rÅ  rÖ  r”   )r=   r%   rÜ   rR   rS   rŠ   rX   r†  r   r   r   Útest_wait_timeoutP  s    
zTestWait.test_wait_timeoutc                 C   s   |  ¡  t |¡ d S r   )rŸ  r?   r    )r‚   r©  Zperiodr   r   r   Úsignal_and_sleepg  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 ¡ }|||j	|g|d ƒ}	t ¡ | }
|  |	|j	g¡ |  |
|d	 ¡ |  |
|d	 ¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ||j	|gƒ¡ |  |
d
¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ|||j	|gƒ¡ |  |
d
¡ | ¡  | ¡  d S )Nr   r$   rT  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rØ   r‰  r   r   r   rÀ  p  r  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)râ  )rn  )r|  r   r   r   rÀ  p  r  z,TestWait.test_wait_integer.<locals>.<lambda>r…   r  r–   r¢   r~  )rt  r%   r   r«  rˆ   r|   r€  rŠ   rq   rã   rÐ   rn   rž  r?   r@   rV   rÅ  rÖ  r”   r   r‹   )r=   r%   rÜ   Zsorted_r©  rR   rS   r   rŠ   rX   r†  r   r   r   Útest_wait_integerl  s>    
ÿ

zTestWait.test_wait_integerc                 C   sf   ddl m} t ¡ \}}t ¡ }||gdd}t ¡ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   r$   r2   r–   rN   )	rt  r%   r   rˆ   r?   r@   rV   rÅ  r   )r=   r%   rR   rS   rC   rX   r   r   r   Útest_neg_timeout—  s    zTestWait.test_neg_timeoutN)F)F)rF   rG   rH   r1  rr  rw  ry  r{  r|  r}  r  r€  r  r‚  r   r   r   r   rp  õ  s   


	
#
+rp  c                   @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyrA  c                 C   s:   |   t¡ tj d¡ W d   ƒ n1 s,0    Y  d S )Nz\\.\test©râ   r6   r   rq  rs  r_   r   r   r   Útest_invalid_family¨  s    z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc                 C   s:   |   t¡ tj d¡ W d   ƒ n1 s,0    Y  d S )Nz/var/test.piper„  r_   r   r   r   Útest_invalid_family_win32­  s    z+TestInvalidFamily.test_invalid_family_win32N)	rF   rG   rH   r7   rZ  rE  r…  r2  r†  r   r   r   r   rƒ  ¦  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‹  r@  rK  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   zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()rï  z-Sz-Orü  r˜  )r‹  rñ  Úcheck_outputrç   ró  rí  r÷  rV   )r=   r‹  ÚprogrZ  Zchild_flagsr  r   r   r   Ú
test_flagsÈ  s    ÿzTestFlags.test_flagsN)rF   rG   rH   r1  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 )NrN   r~  r  )r?   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 t  |¡ nt  |¡ 0 d S )	Nr"   Trƒ   ÚAF_INETro  r…   r~  r  )r‘  ÚgetdefaulttimeoutÚsetdefaulttimeoutr   rˆ   rq  rs  r|   r”  r&  rŠ   r   rV   rŒ   rw  r   )r=   Zold_timeoutÚparentr“  r|  r   r&  r   r   r   r‡  à  s$    
ÿ
zTestTimeouts.test_timeoutN)rF   rG   rH   r1  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|¡ n2tjj	 ||¡\}}}|  | ¡ d¡ |  |d¡ d S )Nzmp_fork_bomb.pyr  r  s   RuntimeErrors   123)r   rù   r3   r  r‹   r  r  r   r   rý  Zassert_python_failurerV   r«   rþ  rV  )r=   rû   r   ré   r  rI  r   r   r   Útest_noforkbombù  s    zTestNoForkBomb.test_noforkbombN)rF   rG   rH   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 )NrN   r…   )
r   r|   r“  rŠ   r   r   r”   rs   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 )NFrb   r…   )r   rˆ   r   ÚForkAwareThreadLockrs   rœ  r|   r“  rŠ   r   rŒ   r   ZassertLessEqual)r=   r@  rK  r|  Zold_sizer   Znew_sizer   r   r   r£    s    
z!TestForkAwareThreadLock.test_lockN)rF   rG   rH   r1  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ö  )rE  r‘  ÚdetachrÚ   r3   Údupr   )r=   rQ  Úto_closer1  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?  )rE  r‘  r•  ÚSOCK_STREAMr   r3   )r=   rQ  r   r   r   r   <  s    zTestCloseFds.closec              
   C   s\   zt  |t jt j¡}W n. tyD } z| |¡ W Y d }~nd }~0 0 | ¡  | d ¡ d S r   )r‘  Úfromfdr•  r£  rÊ  r”   r   )r‚   r&  rQ  r   r­   r   r   r   Ú_test_closefdsB  s     zTestCloseFds._test_closefdsc              	   C   sÞ   t st d¡‚t ¡ \}}|  ¡ }zRtj| j||fd}| ¡  | 	¡  | 
¡ }t|ƒ W |  	|¡ | 	¡  | 	¡  n|  	|¡ | 	¡  | 	¡  0 t ¡ dkr¬|  |d ¡ n.d}|  |t¡ |  |jtjkpÔ|j|k|¡ d S )Nzrequires fd picklingr…   r  i6'  )rm  r7   r8   r   rˆ   r¢  r|   r¥  rŠ   r   rŒ   r   rù   rï   rq   r3  rn   r4  rT  Úwinerror)r=   rI  rJ  rQ  r   r­   ZWSAENOTSOCKr   r   r   Útest_closefdL  s2    
ÿ


þ


ÿzTestCloseFds.test_closefdN)rF   rG   rH   r¢  r   r1  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À   q  s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)rÃ   r:  r”   rŒ   r;  ÚCONN_MAX_SIZE)r‚   r&  rÀ   r1  r   r   r   Ú_test_ignoreo  s    

zTestIgnoreEINTR._test_ignorer:  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 | ¡  n
| ¡  0 d S )Nr…   Tr«  r"   iÒ  r¬  )r   rˆ   r|   r®  rp   rŠ   r   rV   rŒ   r?   r    r3   rÌ   r   rÃ   r:  r”   r9  r­  r‹   rh  r   r   r   Útest_ignorey  s(    ÿ





zTestIgnoreEINTR.test_ignorec                 C   sb   dd„ }t   t j|¡ tj ¡ .}| |j¡ | ¡ }| d¡ W d   ƒ n1 sT0    Y  d S )Nc                 S   s   d S r   r   r©  r   r   r   rÀ   ’  s    z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerÚwelcome)rÃ   r:  r   rq  rs  r”   r&  rw  )r‚   r&  rÀ   r|  rR   r   r   r   Ú_test_ignore_listener  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 | ¡  n
| ¡  0 d S )Nr…   Tr"   r°  )r   rˆ   r|   r±  rp   rŠ   r   rŒ   r?   r    r3   rÌ   r   rÃ   r:  rq  rv  rV   r‹   )r=   r&  r5  r   r&  rx  r   r   r   Útest_ignore_listenerš  s     ÿ


z$TestIgnoreEINTR.test_ignore_listenerN)rF   rG   rH   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr­  r1  r®  r7   r2  rÂ   rÃ   r¯  r±  r²  r   r   r   r   r¨  j  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_context®  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‹   rV   rù   )r=   r–  r@  rK  r   Zchild_methodr   r   r   Úcheck_context²  s    zTestStartMethod.check_contextc              	   C   s~   dD ]t}zt  |¡}W n ty,   Y qY n0 |  | ¡ |¡ |  | ¡ |¡ |  t|jd¡ |  t|jd ¡ |  |¡ qd S )N©r  rò   r'  rò   )	r   r—  r6   rV   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yH   Y qY n0 |  t  ¡ |¡ t  ¡ }|  | ¡ |¡ |  t	|ƒj
 ¡  |¡¡ |  |jj
 ¡  |¡¡ |  t ¡ |d7 }qW t j|dd nt j|dd 0 |  |d¡ d S )Nr   r·  T©ÚforcerN   )r   Úset_forkserver_preloadÚPRELOADrù   r¸  r6   rV   r—  rn   r©   rF   Ú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¡ n6|  |ddgkpT|ddgkpT|g d¢kpT|g d¢k¡ d S )Nr#   rò   r  r·  )rò   r  r'  )r   Úget_all_start_methodsrç   rú   rV   rn   )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
 |¡\}}}| ¡ }| ¡ }| ¡ dksd|dkr~t|ƒ t|ƒ |  d¡ d S )Nr'  z*test only relevant for 'forkserver' methodzmp_preload.pyÚokr7  z(failed spawning forkserver or grandchild)r   rù   rj   r3   r  r‹   r  r  r   r   rý  rþ  r÷  rV  rŒ  r‚  )r=   r   ré   r  rI  r   r   r   Útest_preload_resourcesè  s    
z&TestStartMethod.test_preload_resourcesN)
rF   rG   rH   r1  rµ  r¶  rÈ  rÀ  rÃ  rÅ  r   r   r   r   r´  ­  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r6W d   ƒ q
t ¡ \}}tjtjdd|j	||dg|gtj
d}t |¡ t|dd	d
4}| ¡  ¡  d¡}| ¡  ¡  d¡}W d   ƒ n1 s¼0    Y  t||ƒ | ¡  | ¡  t ¡ tj }	t ¡ |	k rbt d¡ zt||ƒ W qî ty^ }
 z0|  |
jtjtjf¡ W Y d }
~
qrW Y d }
~
qîd }
~
0 0 qîtd|› dƒ‚|j ¡  d¡}|j ¡  d 	|¡}|   ||¡ |   |d| ¡ W d   ƒ q
1 sÈ0    Y  q
d S )Na+  if 1:
            import time, os, tempfile
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

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


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


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

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

            time.sleep(10)
        )r    Znooprï  rü  )rK  r    )Úpass_fdsr   r_  TrL  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   rX  r3   Úpiperñ  rò  rç   ró  rk   rô  r   rE  rõ  rV  r÷  r!   r   r%   r?   r@   r   r›   r    r3  r«   r4  ÚENOENTÚEINVALrœ   r   rF  ZassertRegex)r=   r   r    r@  rK  r   rH  Zname1Zname2rú  r­   rI  rÜ   r   r   r   Útest_resource_trackerù  sJ    ÿý
0

&
ÿ
þz)TestResourceTracker.test_resource_trackerc           
      C   sd  ddl m} |j}|d ur:t |tj¡ tj|tj d t	 
¡ " t	 d¡ | ¡  W d   ƒ n1 sj0    Y  |j}t ||¡ t d¡ t d¡}t	j
dd¨}t	 d	¡ | ¡ }| ¡  | ¡  t |¡}~t ¡  |  |ƒ ¡ |r0|  t|ƒd
¡ |d }	|  t|	jtƒ¡ |  dt|	j ƒv ¡ n|  t|ƒd¡ W d   ƒ n1 sV0    Y  d S )Nr   ©Ú_resource_tracker)rv   rã  r   rò   T)r>  ÚalwaysrN   zresource_tracker: process died)!Ú multiprocessing.resource_trackerrÍ  rd  r3   rÌ   rÃ   rÍ   r   Zwait_processræ  rç  rè  r+  r?   r    r   r—  r«  rž  rŸ  rë   rì   rí   rî   r†   rV   rs   rn   Ú
issubclassÚcategoryÚUserWarningrW  Úmessage)
r=   r,  Z
should_dierÍ  r   r–  Zall_warnr©  rð   Zthe_warnr   r   r   Úcheck_resource_tracker_deathC  s:    

&



ÿz0TestResourceTracker.check_resource_tracker_deathc                 C   s   |   tjd¡ d S r  )rÔ  rÃ   r.  r_   r   r   r   Útest_resource_tracker_siginth  s    z0TestResourceTracker.test_resource_tracker_sigintc                 C   s   |   tjd¡ d S r  )rÔ  rÃ   rÉ   r_   r   r   r   Útest_resource_tracker_sigterml  s    z1TestResourceTracker.test_resource_tracker_sigtermc                 C   s   |   tjd¡ d S r  )rÔ  rÃ   rÍ   r_   r   r   r   Útest_resource_tracker_sigkillp  s    z1TestResourceTracker.test_resource_tracker_sigkillc                 C   s<   ddl m} | ¡  |jd |fv }|| ¡ M }|  |¡ d S )Nr   rÌ  )rÏ  rÍ  r+  rd  Z_check_aliver”   )r&  r   rÍ  Zreusedr   r   r   Ú_is_resource_tracker_reusedt  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+  rd  r   rˆ   r|   rØ  rŠ   rŒ   r‹   r   rn   )r=   rÍ  r   r@  rK  r   Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reused~  s    ÿz0TestResourceTracker.test_resource_tracker_reusedN)rF   rG   rH   rË  rÔ  rÕ  rÖ  r×  r”  rØ  rÙ  r   r   r   r   rÆ  õ  s   J%
	rÆ  c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zejj	dd„ ƒZ
d	S )
ÚTestSimpleQueuec                 C   s@   |  ¡  z(| | ¡ ¡ | | ¡ ¡ W | ¡  n
| ¡  0 d S r   )r%   rc   rZ  rå   ro  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Û  rp   rŠ   rn   rZ  rå   r%   r~   rV   r¬   r‹   )r=   r   rb  rc  r  r   r   r   Ú
test_empty  s"    þzTestSimpleQueue.test_emptyc                 C   s   t  ¡ }| ¡  | ¡  d S r   )r   rÜ  r   ©r=   r   r   r   r   rñ   µ  s    zTestSimpleQueue.test_closec                 C   s0   t  ¡ }| ¡  |  |jj¡ |  |jj¡ d S r   )r   rÜ  r   rn   Ú_readerrl  Ú_writerrÞ  r   r   r   Útest_closed¼  s    zTestSimpleQueue.test_closedN)rF   rG   rH   r1  rÛ  rÝ  rñ   r   r   Zcpython_onlyrá  r   r   r   r   rÚ  ‘  s   
	rÚ  c                   @   s   e Zd Zdd„ ZdS )ÚTestPoolNotLeakOnFailurec                    sŽ   d‰g ‰ G ‡ ‡fdd„dƒ}|   td¡: tjjdtjj|dd}| ¡  | 	¡  W d   ƒ n1 sh0    Y  |  
tdd	„ ˆ D ƒƒ¡ d S )
NrT  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   rv   rÉ  rÚ   )r=   r¥   )Úforked_processesr   r   r>   Í  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 OSErrorrN   rð  )r3  rÉ  r_   )Úwill_fail_inr   r   rŠ   Ó  s    zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startc                 S   s
   d| _ d S )NÚstoppingrÈ  r_   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È  r_   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È  r_   r   r   r   ro   á  s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rF   rG   rH   r>   rŠ   r   r‹   ro   r   ©rã  rå  r   r   ÚFailingForkProcessÌ  s
   ré  rä  rb   )r|   )Úcontextc                 s   s   | ]}|  ¡ V  qd S r   r÷  )rõ   r   r   r   r   rl  ê  r  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)rš  r3  r   r—  r–  r7   rÌ  Z	MagicMockr   r‹   r~   rå  )r=   ré  r   r   rè  r   Útest_release_unused_processesÆ  s    ÿ
&ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rF   rG   rH   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_classrK   rŠ   r  r_   r   r   r   r     s    

zTestSyncManagerTypes.setUpc                 C   sB   | j d ur(| j  ¡ r(| j  ¡  | j  ¡  | j ¡  d | _d | _ d S r   )r  ro   r   r‹   rK   r  r_   r   r   r   r    s    


zTestSyncManagerTypes.tearDownc                 C   s   t  ¡  d S r   )r   Úreap_childrenr·   r   r   r   r•    s    zTestSyncManagerTypes.setUpClassc                 C   sx   t | jƒ t ¡ }d}tt ¡ ƒdkrtt |¡ |d9 }t ¡ | }|dkrdtj	_
t	 dt ¡ › d|› d¡ qtqd S )	Nró   rN   r¢   r½  Tú"multiprocessing.Manager still has ú active children after ú seconds)r   r  r?   r@   rs   r   r¨   r    r   r   Úenvironment_alteredÚprint_warning)r=   Ú
start_timerC   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  rp   rŠ   rõ  rV   rv   )r=   Zworkerry  r   r   r   Ú
run_worker+  s
    
zTestSyncManagerTypes.run_workerc                 C   s   |  ¡  | ¡  |  d¡ d S ©Nr÷   )r%   r  ©r‚   ry  r   r   r   rÙ  2  s    z TestSyncManagerTypes._test_eventc                 C   s.   | j  ¡ }| ¡  |  | j|¡ | d¡ d S r÷  )rK   r¦   rå   rö  rÙ  r%   ©r=   rØ  r   r   r   rÚ  9  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   )r!  rK   rö  rû  rŸ  râ   r½   ©r=   ZlnamerØ  r   r   r   r£  D  s    zTestSyncManagerTypes.test_lockc                 C   s   |  ¡  | ¡  d S r   ©rž  rŸ  rø  r   r   r   Ú_test_rlockJ  s    z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r!  rK   rö  rþ  rü  r   r   r   r¥  O  s    zTestSyncManagerTypes.test_rlockc                 C   s   |  ¡  d S r   rú  rø  r   r   r   rª  S  s    z$TestSyncManagerTypes._test_semaphorer«  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r!  rK   rö  rª  rŸ  )r=   ÚsnamerØ  r   r   r   r¬  W  s    z#TestSyncManagerTypes.test_semaphorec                 C   s   | j dd d S )Nr®  )rÿ  )r¬  r_   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   )rK   r»  rö  r   rù  r   r   r   Útest_conditiond  s    
z#TestSyncManagerTypes.test_conditionc                 C   s   |  ¡  d S r   )r  rø  r   r   r   Ú_test_barrierh  s    z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S ra   )rK   rý  rö  r  rù  r   r   r   r	  m  s    z!TestSyncManagerTypes.test_barrierc                 C   s(   | W d   ƒ n1 s0    Y  d S r   r   rø  r   r   r   Ú
_test_poolq  s    zTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nrf  r>  )rK   r–  rö  r  rù  r   r   r   Ú	test_poolw  s    zTestSyncManagerTypes.test_poolc                 C   s   d S r   r   rø  r   r   r   Ú_test_queue{  s    z TestSyncManagerTypes._test_queuer   c                 C   s6   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ d S )Nr¢   rb   ra  )r!  rK   rc   rö  r  )r=   ZqnamerØ  r   r   r   Ú
test_queue…  s
    

zTestSyncManagerTypes.test_queuec                 C   s   |   d¡ d S )Nr|  )r  r_   r   r   r   Útest_joinable_queue  s    z(TestSyncManagerTypes.test_joinable_queuec                 C   s   |  ¡  | ¡  |D ]}qd S r   )r«  Úreverse)r‚   ry  r1  r   r   r   Ú
_test_list  s
    zTestSyncManagerTypes._test_listc                 C   s6   | j  ¡ }| d¡ |  | j|¡ |  t|ƒd¡ d S )Nrb   r   )rK   rª   rÚ   rö  r	  rV   rs   rù  r   r   r   r`  œ  s    

zTestSyncManagerTypes.test_listc                 C   s   d S r   r   rø  r   r   r   Ú
_test_dict£  s    	zTestSyncManagerTypes._test_dictc                 C   s4   | j  ¡ }d|d< |  | j|¡ |  t|ƒd¡ d S )Nrb   r™  r   )rK   rm  rö  r
  rV   rs   rù  r   r   r   rq  ®  s    
zTestSyncManagerTypes.test_dictc                 C   s   |  d¡ d S r­  )rå   rø  r   r   r   Ú_test_valueµ  s    z TestSyncManagerTypes._test_valuec                 C   s>   | j  dd¡}|  | j|¡ |  |jd¡ |  | ¡ d¡ d S )NrÙ   rN   r¢   )rK   r   rö  r  rV   rW   r¬   rù  r   r   r   r>  »  s    zTestSyncManagerTypes.test_valuec                 C   s   d S r   r   rø  r   r   r   Ú_test_arrayÁ  s    z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )NrÙ   r   rN   )rK   rR  rö  r  rù  r   r   r   rU  È  s    zTestSyncManagerTypes.test_arrayc                 C   s   d S r   r   rø  r   r   r   Ú_test_namespaceÌ  s    z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S rè  )rK   r„  r1  r2  rö  r  rù  r   r   r   r…  Ñ  s    
z#TestSyncManagerTypes.test_namespaceN)r  )r  )r«  )r   )+rF   rG   rH   r‘  r   rÔ  rX  rí  r   r  r1  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
  rq  r  r>  r  rU  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gd d S )NÚSUBDEBUGr+  )ÚextraZ	blacklist)r   Zcheck__all__r   r$  r_   r   r   r   Útest__all__Ù  s    ÿzMiscTestCase.test__all__N)rF   rG   rH   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: rN   úDangling threads: )r   r   rß  rå   r   r   r  r  rò  ró  r¯   )r‚   rJ   rL   r   r   r   rš  ç  s    
zBaseMixin.tearDownClassN)rF   rG   rH   r1  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Ô  rJ   N)rF   rG   rH   ri   r   r|   rq  r”  rl   r‡   r¨   r–  rˆ   r   r|  r  r¤  r«  r®  r»  r¦   rý  r   rR  r:  rQ  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 )ÚManagerMixinrK   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|i |¤ŽS r   )rK   r–  )r‚   rA   rB   r   r   r   r–  $  s    zManagerMixin.Poolc                    s   t ƒ  ¡  t ¡ | _d S r   )r”  r•  r   rV  rK   r·   r˜  r   r   r•  (  s    
zManagerMixin.setUpClassc                    sÊ   t  ¡ }d}tt ¡ ƒdkrjt  |¡ |d9 }t  ¡ | }|dkrdtj_t 	dt ¡ › d|› d¡ qjqt
 ¡  | j ¡ d	kr¢dtj_t 	d
¡ t 	| j ¡ ¡ | j ¡  | j ¡  d | _tƒ  ¡  d S )Nró   rN   r¢   r½  Trï  rð  rñ  r   z5Shared objects which still exist at manager shutdown:)r?   r@   rs   r   r¨   r    r   r   rò  ró  rí   rî   rK   Z_number_of_objectsZ_debug_infor  r‹   r”  rš  )r‚   rô  rC   rÏ  r˜  r   r   rš  -  s.    
ÿþ



zManagerMixin.tearDownClass)rF   rG   rH   ri   r   r|   rh  ÚoperatorÚ
attrgetterr   r|  r  r¤  r«  r®  r»  r¦   rý  r   rR  rª   rm  r„  r1  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 )ÚThreadsMixinrL   N)rF   rG   rH   ri   r   Údummyr|   rq  r”  rl   r¨   r–  rˆ   r   r|  r  r¤  r«  r®  r»  r¦   rý  r   rR  r   r   r   r   r  O  s$   r  c                    s<  | d }t ƒ }h d£}| ¡ D ]Ü\}}t|tƒs2qt|tƒrÂ|tu rFq|jD ]r}d| ¡  |dd …  }|| ¡ d  }	G dd„ d||	tj	ƒ}
|dkr¤t
 d	¡|
ƒ}
| |
_|
_||
_|
| |< qLq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 )NrF   >   rJ   rK   rL   ZWithrN   ÚMixinc                   @   s   e Zd ZdS ©z*install_tests_in_module_dict.<locals>.TempNr  r   r   r   r   ÚTempv  s   r  rK   r0  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
yt   t ˆd ¡‚Y n0 tj d¡r¬zt  ¡ } W n tyª   t d¡‚Y n0 tƒ  t ¡  t  ¡  t¡ d S )	Nr   rN   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¸  r6   r7   r8   rç   rú   r¿  r¤  r3  r9   r   Úget_temp_dirr)  r*  r.  rA  ©r  Úold_start_methodÚstart_methodr   r   ÚsetUpModule‡  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  rN   r  r
  )r   r   rß  r   r¸  rå   r   r  rò  ró  r¯   r?   r    r   Ú_cleanup_tests)Z
need_sleeprJ   rL   )r  r$  r   r   ÚtearDownModule  s$    

z4install_tests_in_module_dict.<locals>.tearDownModuler&  r(  )Úglobalsr  r   r©   rÐ  rI   r[   Ú
capitalizer7   ÚTestCaser   Úrequires_hashdigestrF   rH   rG   rŠ  )Zremote_globsr%  rG   Zlocal_globsZ	ALL_TYPESr   ÚbaseÚtype_Znewnamer  r  r&  r(  r   r#  r   Úinstall_tests_in_module_dictg  s:    



r/  )r&   )´r7   Zunittest.mockr   ri  r?   r  r¢  rç   r3   rí   r4  rÃ   rS  r‘  r¦  r5  rñ  rÞ  r  rë  rë   ræ  Ztest.supportr   Ztest.support.script_helperr   r   r   Úimport_moduler   Z*skip_if_broken_multiprocessing_synchronizer¯   rt  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrî  Úmultiprocessing.queuesr   r   ÚHAVE_SEND_HANDLErm  ÚImportErrorZmultiprocessing.sharedctypesr   r	   r×  r
   Z	HAS_SHMEMrX  r   r   r   r   r   r!   r+  r.  rÓ   rO   rk  rl  rm  r!  ZHAVE_GETVALUErú   rE  r%   r)   r4   rc  r½  Zctypesr-   r.   r/   r0   rŠ  r9   r:   rI   r]   r`   rf   r|   r4  r=  r\  r_  r`  rœ  r§  r°  rØ  rÛ  rì  rí  rû  rü  r+  rM  r[  r†  r‡  rˆ  rŠ  r‹  r6   r  r’  r“  rä  ræ  rç  rñ  r  r  rÂ  r  r
  r  r  Úregisterr  r   r  r  r  r   r'  r"  r,  r1  r:  r8  rn  r{  r  r2  r  rž  r´  r¶  r¿  rü  r+  r  r(  r9  r@  rF  rT  rU  r^  r_  r`  ra  rb  ri  rp  rƒ  r‡  r’  r™  r›  rž  r¨  r´  rZ  rÆ  rÚ  râ  rì  r  r  rÔ  r  r  r/  r   r   r   r   Ú<module>   s¦  





ÿ

    -W  G6  *39   FS  

	  j(C:
14  "0R
 h8
   %{+E"! 2 "BCHÿ 3) k	=