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   t |tƒsJ ‚| d¡ d S ©Né   )r   r`   Ú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   sT   |  ¡ D ]>\}}|dkr*t ¡ }| ¡  n|dks6J ‚d }tt|d ƒ q| ¡  d S )Nr   Úremove)Ú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   r  r…   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&   t |ƒtu sJ ‚| j |¡ | j ¡ S r   )r©   Ústrr6  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   rF  ÚO_WRONLYÚO_CREATÚO_EXCLrç   r!  )r‚   rH  Úfdr   r   r   rE  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 )NrL  FrM  )r3   rF  rO  rP  rQ  rç   r!  rè   )r‚   ÚreasonrH  rR  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   rA  )))TrN   ))Fr   ))é   rV  )r   r   )r   r   r¾   )ri   rj   rk   r   r   rC  rä   rD  r|   rT  rp   rŠ   r   rV   rv   rF  rG  Úrstripr;  r3   ÚsubTestrç   rè   )	r=   rH  rS  r   rI  ZcontentZcasesrA   rÜ   r   r   r   Útest_sys_exitN  s0    
þ&z%_TestSubclassingProcess.test_sys_exitN)
rF   rG   rH   r[   r@  rK  r1  rE  rT  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¢   rU  é   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¢   rU  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¢   rU  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.pyrL  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_cwdrF  ÚwriteZDirsOnSysPathr3   ÚgetcwdÚ
__import__ri  rr  Úfail)r=   Úmodule_namerI  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¢   rU  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   rI    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|   rI  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   rU  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|   rI  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   rU  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|   rI  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–   rU  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  rI  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)rI  rA   rÄ  Ú	DummyListÚstartedÚfinishedr¦   Ú	_can_exitrå   rÖ   r|   Útaskrp   rŠ   rÚ   rë   rî  Ú
_finalizer)
r=   Ú	namespacerI  rA   rÄ  Zwait_before_exitrL   rÙ   r   rî  r   r   r   r>   •  s     



zBunch.__init__c              	   C   sx   t  ¡ }| j |¡ z6| j| jŽ  W | j |¡ | j d¡ | j 	¡ stJ ‚n(| j |¡ | j d¡ | j 	¡ srJ ‚0 d S )Né   )
r3   ru   rð  rÚ   rI  rA   rñ  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=   rI  rA   rS   r   r   r   Úrun_threadsç  s
    
z_TestBarrier.run_threadsc                 C   s¶   |j }|| jksJ ‚t|ƒD ]d}|d  d¡ t|d ƒ|| ksFJ ‚| ¡  |d  d¡ t|d ƒ|d | ksxJ ‚| ¡  qz|jdks’J ‚W n ty¦   Y n0 |jr²J ‚d S )Nr   TrN   )	Úpartiesrü   rÖ   rÚ   rs   r%   Ú	n_waitingrU   Úbroken)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   r  )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ü   r  r?   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   rI    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Ù   rU  r¢   rg  )rN   r¢   rU  rf  rf  rV  r…   T)ÚRawArrayÚArrayrV   rs   rª   ÚarrayrI  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Á   rU  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  rI  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¢   rU  rf  )
r   rN   r¢   rU  rf  r   rN   r¢   rU  rf  ra  )r   rN   r¢   rU  rf  r   rN   r¢   rU  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¢   rU  rf  rb   ra  rg  rV  é	   r¤   r   )r   rN   r¢   rU  rf  rb   ra  rg  rV  r^  r¤   )rª   rÖ   rV   ÚextendrÚ   )r=   rR   rS   r,  r­   rI  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 )rU  )rª   rÖ   )rõ   Z_ir_   r   r   rö   –  r  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rU  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Á   rU  )Ú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   r;  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  rU  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Á   rU  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Á   rU  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Á   rU  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   rU  )
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   rA  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 )NrU  rÁ   ©Úmaxtasksperchildc                 S   s   g | ]
}|j ‘qS r   ©r   ©rõ   rL  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 )NrU  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é   ÚoutrJ  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   rI    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   rI  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)rI  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>)rI  r  r
  c                    s   g | ]}t ˆ |ƒr|‘qS r   r  r  )Úbarr   r   rö   D  r  rI  r  r
  r  r	  c                 S   s   g | ]}|| ‘qS r   r   rô   r   r   r   rö   S  r  rÁ   )r  r  r  rV   rI  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,  r0  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,  r7  r   r   r   r   r2  š  s   
r2  Ú 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   rU  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<  r:  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   rE  rF  râ   r4  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   r:  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  rV  é   é   r8  r   é   é   rN   r2   rf  )
ri   rj   rk   r   rˆ   r<  rV   r:  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   Úfstatr4  r5  ÚEBADF)r‚   rR  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Ö   rV  r3   Údup2r@  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerO  r  r   )r‚   r&  ÚdataZcreate_dummy_fdsrÙ   rR  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   rD  rC  rF  r@  rY  Zget_osfhandler   Úsend_handler   r‹   rV   rG  )r=   r&  r5  r   rI  rR  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 smallrW  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   rD  rC  rF  r@  rÖ   ÚMAXFDrV  r‚  r3   rW  r   ra  r   r   r‹   rV   rG  )r=   r&  r5  r   rI  rR  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|   rh  rp   rŠ   râ   r½   r   rX  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â   r4  rQ   r   r   r   rÉ  Ê  s    

H
z_TestConnection.test_contextN)F)rF   rG   rH   r[   r1  r>  rI  rL  rM  rS  rV  r\  r7   r2  ÚHAS_REDUCTIONrb  rZ  rç   rú   rd  rÂ   r3   re  rh  rj  rÉ  r   r   r   r   r9  Ñ  s<   
O 




ÿ
ÿÿ

r9  c                   @   s6   e Zd ZdZdd„ Zdd„ Ze ej	d¡dd„ ƒZ
d	S )
Ú_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â   r4  r'  )r=   rq  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 rk  ©rr  rt  ÚClientr'  Úacceptr”   rV   rŒ   ri   râ   r4  )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
 somethingrl  rJ   rv  )r=   r3  Úclientr,  r   r   r   Útest_abstract_socketï  s    

j
z"_TestListener.test_abstract_socketN)rF   rG   rH   r[   ru  rÉ  r7   r2  r   Úabstract_sockets_supportedrz  r   r   r   r   ro  Ú  s   
ÿro  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¤   )rr  rw  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 )Nrp  r…   Tr¤   )rr  rs  rt  r|   r}   r'  rp   rŠ   rx  rV   rŒ   r‹   r   )r=   rq  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¤   )rr  rt  r|   r}   r'  rp   rŠ   r?   r    rx  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 )Nrp  ó   hellorN   )
rr  rs  rt  rw  r'  rx  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š   r:  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‚   rA  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«   r:  )r=   rA  rL  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Š   r:  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 )Nrp  r   )rr  rt  r”   r'  rx  r   ÚsocketÚcreate_serverr   r/  ÚgetsocknamerŒ   )r‚   r&  rs  r€  r|  Únew_connr6  r   r   r   Ú	_listener‰  s    


z"_TestPicklingConnections._listenerc                 C   sx   t |jd ƒD ]*\}}| j |¡}| | ¡ ¡ | ¡  q| ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S r   )
r7  rŒ   rr  rw  r”   r8  r   r’  r)  Úsendall)r‚   r&  r'  r=  ry  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  )rr  rs  rˆ   r|   r–  rp   rŠ   r   r˜  r   rŒ   r”   rV   r8  r   rÚ   r‹   )r=   rs  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&  rL  rA  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   rA  rL  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>rU  )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/  rU  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   r;  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   )r;  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   rP  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory!  s   rÌ  Ztest01_nottherer2   )rÄ  r
   rÁ  rä   rD  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ä   rD  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µ   rU  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  r8  Úany)r
   r×  rä   rá  rD  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á  rD  Ú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!  rG  r«   )r=   r  r   r   ÚdeadlinerC   rØ  rJ  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õ   rI  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  rn  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&  r0  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Ú	getLoggerr5  rˆ   r+  r|   r3  rŠ   rV   rŒ   r‹   r   ÚNOTSETr/  )	r=   ZLEVEL1ZLEVEL2r0  Zroot_loggerZ
root_levelrJ  rK  r   r   r   r   Ú
test_level  s*    


z_TestLogging.test_levelN)rF   rG   rH   r[   r1  r1  r3  r9  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   r:  <  s
   
r:  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   rr  Ú
Connectionrš   r6   r4  Ú_handlerâ   rg  r   r   r   Útest_invalid_handles`  s    
ÿz&TestInvalidHandle.test_invalid_handlesN)rF   rG   rH   r7   rZ  ÚWIN32rE  r   r   r   r   rA  ^  s   
rA  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   r:  v  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   ©r=   r[  r   r   r   r<  x  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rF   rG   rH   r:  r<  r   r   r   r   Ú_FakeConnectionu  s   rK  ó   abc)rŠ  râ   r   ÚAuthenticationErrorrr  Údeliver_challenge©r=   rK  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¢   rH  r  )r  r   rr  Ú	CHALLENGErI  r   r   r   r:  ‚  s    

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   rJ  r   r   r   r<  ‰  s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rF   rG   rH   r>   r:  r<  r   r   r   r   rK    s   rK  rL  )rŠ  râ   r   rM  rr  Úanswer_challengerO  r   r   r   Ú"test_answer_challenge_auth_failure~  s
    þz,OtherTest.test_answer_challenge_auth_failureN)rF   rG   rH   rP  rS  r   r   r   r   rG  q  s   
rG  c                 C   s   |  j d7  _ d S rM   )r   )Únsr   r   r   Úinitializer“  s    rU  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„  rT  r   r_   r   r   r   r   ˜  s    
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )rX  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Š   rU  rT  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   )rU  )
râ   rZ  r   r—  rU  rT  r   r‹   rV   r   rÔ   r   r   r   Útest_pool_initializer©  s
    z&TestInitializers.test_pool_initializerN)rF   rG   rH   r   r  r[  r\  r   r   r   r   rV  –  s   rV  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    ra  c                  C   s0   t jdd} |  tg d¢¡}|  ¡  |  ¡  d S )Nrf  r?  )rN   r¢   rU  rf  rb   ra  rg  )r   r—  r   ra  r   r‹   )r˜  r1  r   r   r   Úpool_in_processÅ  s    rb  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   re  Ú_cacher÷  r   r   r   ÚcacheÐ  s
    
z_file_like.cachec                 C   s   | j  |¡ d S r   )rg  rÚ   rJ  r   r   r   r  Ù  s    z_file_like.writec                 C   s   | j  d | j¡¡ g | _d S )Nr8  )rd  r  r‹   rg  rf  r_   r   r   r   ÚflushÜ  s    z_file_like.flushN)rF   rG   rH   r>   Úpropertyrg  r  rh  r   r   r   r   rc  Ë  s
   
rc  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 rk  )r   r|   rb  rŠ   r‹   rÔ   r   r   r   Útest_pool_in_processç  s    z/TestStdinBadfiledescriptor.test_pool_in_processc                    sJ   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  | ¡ dksFJ ‚d S )Nr™  c                      s   ˆ   ¡ S r   )rh  r   ©Zfliker   r   rÀ  ð  r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>ry   )r  r  rc  r  r   r|   rh  rÐ  )r=   Úsior  r   rn  r   Útest_flushingì  s    
z(TestStdinBadfiledescriptor.test_flushingN)rF   rG   rH   rl  rm  rp  r   r   r   r   rj  à  s   rj  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‚   rL  Ú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|   rs  rp   rŠ   r   rÚ   rä   r‹   rŒ   rG  r  r¬  rn  rV   )r=   rr  r%   ÚreadersÚmessagesrÙ   rA  rL  r   r=  rÜ   r   rt  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'  rr  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-  r8  c                 s   s   | ]}d | V  qdS )ry  Nr   rô   r   r   r   rl  F  r  z,TestWait.test_wait_socket.<locals>.<genexpr>rÁ   r™  r  )ru  r%   r’  r“  r   r/  r”  rÖ   r   r|   rz  rp   rŠ   rÚ   rä   r‹   rx  r   rŒ   r  r   r7  rV   )r=   rr  r%   r|  r6  rv  rý   ZdicrÙ   r   rA  rê  r=  rÜ   Úvr   r   r   Útest_wait_socket'  s:    ÿ





zTestWait.test_wait_socketc                 C   s   |   d¡ d S r  )rx  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  çš™™™™™Ù?)
ru  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$   rU  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  )ru  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   )	ru  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  rs  rx  rz  r|  r}  r~  r€  r  r‚  rƒ  r   r   r   r   rq  õ  s   


	
#
+rq  c                   @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyrB  c                 C   s:   |   t¡ tj d¡ W d   ƒ n1 s,0    Y  d S )Nz\\.\test©râ   r6   r   rr  rt  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  rF  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Œ  rA  rL  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Œ  Úprogr[  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   rr  rw  )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_INETrp  r…   r~  r  )r’  ÚgetdefaulttimeoutÚsetdefaulttimeoutr   rˆ   rr  rt  r|   r•  r'  rŠ   r   rV   rŒ   rx  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ÿ  rW  )r=   rû   r   ré   r  rJ  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=   rA  rL  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÷  )rF  r’  ÚdetachrÚ   r3   Údupr   )r=   rR  Ú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@  )rF  r’  r–  ÚSOCK_STREAMr   r3   )r=   rR  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&  rR  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'  )rn  r7   r8   r   rˆ   r£  r|   r¦  rŠ   r   rŒ   r   rù   rï   rq   r4  rn   r5  rU  Úwinerror)r=   rJ  rK  rR  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”   r:  r®  r‹   ri  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   rr  rt  r”   r'  rx  )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;  rr  rw  rV   r‹   )r=   r&  r5  r   r'  ry  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–  rA  rL  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Úokr8  z(failed spawning forkserver or grandchild)r   rù   rj   r3   r  r‹   r  r  r   r   rþ  rÿ  rø  rW  r  r‚  )r=   r   ré   r  rJ  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µ  rc  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ý  )rL  r    )Úpass_fdsr!  r`  TrM  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   rF  rö  rW  rø  r!   r   r%   r?   r@   r   r›   r    r4  r«   r5  ÚENOENTÚEINVALrœ   r!  rG  ZassertRegex)r=   r  r    rA  rL  r   rI  Zname1Zname2rû  r­   rJ  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Î  re  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ÚUserWarningr;  Ú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+  re  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+  re  r   rˆ   r|   rÙ  rŠ   rŒ   r‹   r   rn   )r=   rÎ  r   rA  rL  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   Ú_readerrm  Ú_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 )
NrU  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ð  )r4  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š  r4  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*   |  ¡ sJ ‚| ¡  | ¡  | d¡ d S ©Nr÷   )r  r%   r  ©r‚   ry  r   r   r   rÙ  2  s    z TestSyncManagerTypes._test_eventc                 C   s:   | j  ¡ }| ¡  |  | j|¡ | ¡ r,J ‚| d¡ d S rø  )rK   r¦   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   |j dksJ ‚| ¡  d S ra   )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   sd   |  ¡ dksJ ‚| ¡ sJ ‚| ¡ r(J ‚| ¡ dks8J ‚| ¡ rDJ ‚| ¡ dksTJ ‚| ¡ s`J ‚d S ©Nr¢   rb   ra  )r[  r]  rZ  r¬   rù  r   r   r   Ú_test_queue{  s    z TestSyncManagerTypes._test_queuer   c                 C   sN   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ | ¡ s>J ‚| ¡ rJJ ‚d S r  )r"  rK   rc   r÷  r  rZ  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   st   |d dksJ ‚|  d¡dks"J ‚| d¡dks4J ‚| ¡  | ¡  |D ]}qHt|ƒdks^J ‚| d¡dkspJ ‚d S )Nr   rb   rN   )r  rª  r¬  Úreversers   rf  )r‚   ry  r1  r   r   r   Ú
_test_list  s    zTestSyncManagerTypes._test_listc                 C   s>   | j  ¡ }| d¡ |  | j|¡ |r*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œ   t |ƒdksJ ‚|d dks J ‚| d¡dks2J ‚t| ¡ ƒdgksHJ ‚t| ¡ ƒdgks^J ‚t| ¡ ƒdgkstJ ‚| ¡ ddiksˆJ ‚| ¡ dks˜J ‚d S )NrN   r™  rb   )r™  rb   )rs   r¬   rª   r  ro  r7  r	   Úpopitemrù  r   r   r   Ú
_test_dict£  s    zTestSyncManagerTypes._test_dictc                 C   s<   | j  ¡ }d|d< |  | j|¡ |r(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,   |j dksJ ‚| ¡ dksJ ‚| d¡ d S )NrN   r¢   )rW   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   sH   |d dksJ ‚|d dks J ‚t |ƒdks0J ‚t|ƒddgksDJ ‚d S )Nr   rN   r¢   )rs   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    |j dksJ ‚|jdksJ ‚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Õ  rY  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|   rr  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   rW  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|   ri  Ú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|   rr  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                    sT  | d }t ƒ }h d£}| ¡ D ]ô\}}t|tƒs2qt|tƒrÚ|tu rFqt|jƒ|ks^J |jƒ‚|jD ]r}d| ¡  |dd …  }|| ¡ d  }	G dd„ d||	t	j
ƒ}
|dkr¼t d	¡|
ƒ}
| |
_|
_||
_|
| |< qdq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   rL   rK   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   r1  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¤  r4  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å   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<    



r2  )r&   )´r7   Zunittest.mockr   ri  r?   r  r£  rç   r3   rí   r5  rÃ   rS  r’  r§  r6  rò  rÞ  r  rì  rë   rç  Ztest.supportr   Ztest.support.script_helperr   r   r   Úimport_moduler   Z*skip_if_broken_multiprocessing_synchronizer¯   ru  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrï  Úmultiprocessing.queuesr   r   ÚHAVE_SEND_HANDLErn  ÚImportErrorZmultiprocessing.sharedctypesr   r	   r×  r
   Z	HAS_SHMEMrY  r   r   r   r   r   r!   r,  r/  rÓ   rO   rk  rl  rm  r"  ZHAVE_GETVALUErú   rF  r%   r)   r4   rd  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/  r2  r;  r9  ro  r|  r‚  r2  r  rŸ  rµ  r·  rÀ  rý  r.  r  r)  r:  rA  rG  rU  rV  r_  r`  ra  rb  rc  rj  rq  r„  rˆ  r“  rš  rœ  rŸ  r©  rµ  rZ  rÇ  rÛ  rã  rí  r  r  rÔ  r  r  r2  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	=