a
    äze¤ì ã                   @   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 ej3d
dre  4d¡‚dd„ Z5dd„ Z6dd„ Z7ej8dkr:d dl!m9Z9 dd„ Z:e'j;Z<dZ=dZ>e>rZd\Z?Z@ZAn
d\Z?Z@ZAeBeddƒ ZCejDdkZEd dl mFZF dd„ ZGze Hd ¡ZIW n   d!ZIY n0 d"d#gZJzd d$lKmLZLmMZMmNZNmOZO W n$ e+yø   ePZLd ZM ZNZOY n0 d%d&„ ZQG d'd(„ d(ePƒZRG d)d*„ d*ePƒZSd+d,„ ZTG d-d.„ d.ƒZUG d/d0„ d0eSƒZVG d1d2„ d2e!jWƒZXG d3d4„ d4eSƒZYd5d6„ ZZd7d8„ Z[G d9d:„ d:eSƒZ\G d;d<„ d<eSƒZ]G d=d>„ d>eSƒZ^G d?d@„ d@eSƒZ_G dAdB„ dBeSƒZ`G dCdD„ dDePƒZadEdF„ ZbG dGdH„ dHePƒZcG dIdJ„ dJePƒZdG dKdL„ dLeSƒZeG dMdN„ dNeSƒZfG dOdP„ dPeSƒZgG dQdR„ dReSƒZhdádTdU„ZidVdW„ ZjdXdY„ ZkdZd[„ ZlG d\d]„ d]ePƒZmG d^d_„ d_enƒZod`da„ ZpG dbdc„ dceSƒZqddde„ Zrdfdg„ ZsG dhdi„ dieSƒZtG djdk„ dkeSƒZud dll$mvZvmwZwmxZx G dmdn„ dnePƒZydodp„ ZzG dqdr„ drewƒZ{G dsdt„ dtevƒZ|e|j}dueydv e|j}dweydxdy e|j}dpeze{dz G d{d|„ d|eSƒZ~e ¡ Z€d}d~„ ZG dd€„ d€evƒZ‚e‚j}d~edv G dd‚„ d‚evƒZƒeƒ }d~¡ dƒZ„G d„d…„ d…eSƒZ…e †d†¡G d‡dˆ„ dˆeSƒƒZ‡e5d‰ƒZˆG dŠd‹„ d‹eSƒZ‰G dŒd„ deSƒZŠG dŽd„ deSƒZ‹G dd‘„ d‘eSƒZŒe  e*d’¡e †d†¡G d“d”„ d”eSƒƒƒZŽG d•d–„ d–eSƒZG d—d˜„ d˜eLƒZG d™dš„ dšeSƒZ‘e  e1d›¡e †d†¡G dœd„ deSƒƒƒZ’G dždŸ„ dŸeSƒZ“G d d¡„ d¡e j”ƒZ•G d¢d£„ d£eSƒZ–G d¤d¥„ d¥eSƒ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±„ Zd²d³„ Zžd´dµ„ ZŸG d¶d·„ d·ePƒ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jDd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ØePƒ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_memory)Úaddressz(libasan has a pthread_create() dead lockc                 C   s
   |   d¡S )NÚlatin)Úencode)Ús© r   ú0/usr/lib/python3.9/test/_test_multiprocessing.pyr   N   s    r   c                 C   s"   t | tjjƒr|  ¡  |  ¡  d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueR   s    r   c                 C   s   t  | ¡ d S r   )r   r   )Úprocessr   r   r   Újoin_processX   s    r   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r   Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlinka   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_handle}   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    ÿr:   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTimingWrapperc                 C   s   || _ d | _d S r   )ÚfuncÚelapsed)Úselfr<   r   r   r   Ú__init__ª   s    zTimingWrapper.__init__c                 O   s>   t  ¡ }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?   rE   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<   rB   Úresr   r   r   ÚassertReturnsIfImplementedÁ   s
    z'BaseTestCase.assertReturnsIfImplementedc                 G   s   t dƒ‚d S )Nz#shouldn't try to pickle a test case)rV   )r>   rB   r   r   r   Ú
__reduce__Ë   s    zBaseTestCase.__reduce__N)rG   rH   rI   ÚALLOWED_TYPESrU   rZ   r[   Ú__reduce_ex__r   r   r   r   rJ   ¹   s
   
rJ   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_valuer6   Z_Semaphore__valueÚ_valuerV   ©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   ra   Úput)r>   ÚqÚcr   r   r   rE   å   s    zDummyCallable.__call__N)rG   rH   rI   rE   r   r   r   r   ra   ä   s   ra   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©rK   rM   c                 C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )NrM   útest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrW   Úidentr4   ÚgetpidÚexitcode)r>   Úcurrentrn   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 )NrM   ri   ©ÚtargetT©r{   rq   F)
rj   rk   rl   ÚProcessÚ_testrW   rq   rm   ro   Ú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 )NrM   )rm   rd   r    rj   rs   rn   Úpid)Úclsre   rB   rC   rx   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 )NrM   ri   F©Úduplex©r{   rB   )rj   rk   rl   ÚassertIsNoneÚparent_processÚPiper}   Ú_test_send_parent_processÚstartÚjoinÚrecvrW   rm   r‚   r4   rv   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 )
NrM   ri   Fr„   r†   ©r)   z(Could not communicate with child processÚaliveú	not alive)rj   rk   rl   r‰   r}   Ú_test_create_grandchild_processr‹   Úpollr   ÚLONG_TIMEOUTÚAssertionErrorr   rW   Ú	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š   ?  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•   rp   rŒ   r   ÚSHORT_TIMEOUTr–   r   r   r   r    E  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 )NrO   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)r{   rB   Úkwargsr    TrM   Fr   )r   ÚEventr}   r~   rq   rm   rj   rW   rn   rp   ÚassertNotInÚactive_childrenro   ÚtypeÚlistrw   r‹   ÚassertInÚgetr    r‚   rŒ   r   )r>   re   ÚerB   r¦   r    r   rx   r   r   r   Útest_processL  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 )NrM   ri   rO   r†   )rj   rk   rl   Ú	threadingÚmain_threadÚ	native_idr   r}   Ú"_test_process_mainthread_native_idr‹   r­   rŒ   r   ÚassertNotEqual)r>   Zcurrent_mainthread_native_idre   r   Zchild_mainthread_native_idr   r   r   Ú!test_process_mainthread_native_idt  s    


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  ¡ j}| |¡ d S r   )r°   r±   r²   rd   )rƒ   re   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 )NrM   ri   rz   Tr   r'   r3   rO   Úalarmc                     s   t dˆ  ƒ‚d S )Nzjoin took too long: %s©ÚRuntimeError©rB   ©r   r   r   Úhandler°  s    z+_TestProcess._kill_process.<locals>.handleré
   F)rj   rk   rl   r}   r¹   rq   r‹   rW   rp   r¬   r©   rw   r;   rŒ   rU   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ž   r4   r    rW   rÄ   ÚSIGTERM©r>   rw   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}   Úkillr4   r    rW   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 rN   )r   Ú	cpu_countrV   ro   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)rW   rª   r©   r«   r}   r@   r¡   ÚDELTAr¨   rq   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•   rt   Ú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   rO   )	r‰   rØ   r@   r¡   rÔ   r›   Úappendr   rW   )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 )NrM   ri   r†   r'   r—   rO   )rj   rk   rl   r§   r}   râ   ÚassertRaisesr7   Úsentinelr‹   Ú
addCleanuprŒ   rr   rÑ   r   r*   Úsetro   )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ƒ   Úrcre   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 )NrM   ri   re   )r{   r¦   TFr   )rj   rk   rl   r   r}   rë   rq   r‹   rW   rp   rã   r7   r   rd   rŒ   rw   rž   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )r>   re   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 )NrM   ri   Úspawnrc   r¶   c                    s   g | ]}ˆ j ˆ jd d‘qS ))ç{®Gáz„?r†   )r}   r»   ©Ú.0rÚ   r`   r   r   Ú
<listcomp>E  s   ÿz4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]}ˆ j ˆ jd ‘qS )rz   )r}   r¹   rõ   r`   r   r   r÷   N  s   ÿçü©ñÒMbP?rÉ   Údarwin)rj   rk   rl   r   Úget_start_methodr×   r‹   r   rW   rw   r@   r¡   rž   r4   r    rÄ   rÊ   rè   ÚplatformrÛ   rÎ   r¬   )r>   ÚsmÚNÚprocsr   Z	exitcodesr   r`   r   Útest_many_processes=  s:    

ÿ


ÿ




z _TestProcess.test_many_processesc                 C   sn   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  t ¡  |  	|ƒ d ¡ |  
| ¡ d¡ t|ƒ d S )Nr†   rc   )ra   rì   rí   r   r}   r‹   rŒ   rî   rï   rð   rW   r­   r   )r>   rf   rñ   re   r   r   r   r   Útest_lose_target_ref`  s    
z!_TestProcess.test_lose_target_refc                 C   s   |  tj ¡ ¡ | ¡  d S r   )rd   Útestr   Zfd_countr&   )r>   Úevtre   r   r   r   Ú_test_child_fd_inflationm  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 )	NrM   ri   Úforkrc   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r†   )r}   r  rõ   ©r  re   r>   r   r   r÷   ‚  s   ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    s   g | ]}ˆ   ¡ ‘qS r   ©r­   rõ   ©re   r   r   r÷   ˆ  ó    rO   )rj   rk   rl   r   rú   r§   r   r×   r‹   rW   rt   ræ   rŒ   r   )r>   rü   rý   rþ   r   Z	fd_countsr   r  r   Útest_child_fd_inflationr  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>.func2rz   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 )NrM   ri   r†   )
rj   rk   rl   r§   r}   r  r‹   rŒ   ro   Ú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Œ   ro   r  rW   rw   )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Œ   ro   r  rW   rw   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 )
NrM   ri   Ú
forkserverr   )Ú_forkserverr  r†   ç       @)r   éÿ   )rj   rk   rl   r   rú   Zmultiprocessing.forkserverr)  Úensure_runningr§   r}   r'  r‹   Z_forkserver_pidr4   rÍ   r@   r¡   rŒ   ro   r  rW   rw   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È   )r4   r    r.  rÄ   rÎ   r`   r   r   r   Útest_forkserver_sigkill	  s    
z$_TestProcess.test_forkserver_sigkill)r   N)r'   ).rG   rH   rI   r\   ry   r   Úclassmethodr~   r’   rŠ   rŸ   rš   r    r¯   r8   Ú
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.  r0  r1  r   r   r   r   rg   ê   sj   
	


(



3


 #

&rg   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   )r7  r   Úiterr6  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ª   Ústrr7  r•   r   r:  r   r   r   Úsubmit  s    z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )r7  r•   r   r6  r`   r   r   r   Ústop$  s    
z_UpperCaser.stopN)rG   rH   rI   r?   r;  r=  r>  r   r   r   r   r5    s   r5  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©rK   c                 C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTr¥   ZHELLOZworldZWORLD)r5  rq   r‹   rW   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 )NrM   ri   r†   ÚrÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rj   rk   rl   r  r   ÚTESTFNrå   Úunlinkr}   Ú_test_stderr_flushr‹   rŒ   ÚopenÚreadr¬   )r>   Útestfnr  ÚfÚerrr   r   r   Útest_stderr_flush6  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©ÚclosefdrO   r   )r4   rG  ÚO_WRONLYÚO_CREATÚO_EXCLrè   r"  )rƒ   rI  Úfdr   r   r   rF  G  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 )NrM  FrN  )r4   rG  rP  rQ  rR  rè   r"  ré   )rƒ   ÚreasonrI  rS  r   r   r   Ú_test_sys_exitN  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 )NrM   ri   )rO   r£   é   zignore thisr†   TrO   rB  )))TrO   ))Fr   ))é   rW  )r   r   )r   r   r¿   )rj   rk   rl   r  r   rD  rå   rE  r}   rU  rq   r‹   r   rW   rw   rG  rH  Úrstripr<  r4   ÚsubTestrè   ré   )	r>   rI  rT  r   rJ  ZcontentZcasesrB   rÝ   r   r   r   Útest_sys_exitT  s0    
þ&z%_TestSubclassingProcess.test_sys_exitN)
rG   rH   rI   r\   rA  rL  r2  rF  rU  rZ  r   r   r   r   r?  )  s   	

r?  c                 C   s"   t | dƒr|  ¡ S |  ¡ dkS d S )NÚemptyr   )rÃ   r[  Úqsizer  r   r   r   Úqueue_empty€  s    
r]  c                 C   s"   t | dƒr|  ¡ S |  ¡ |kS d S )NÚfull)rÃ   r^  r\  )re   Ú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 )Nrb  ©r_  r†   TFrO   r£   rV  é   rc   é   r   r—   )r   r§   r}   re  rq   r‹   rW   r]  r`  rd   Ú
put_nowaitr@   r¡   rÔ   r;   rã   ÚpyqueueÚFullrU   r=   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3ræ   r&   rŒ   r   )r>   ZMAXSIZEr   rc  rd  r  rd   ri  r   r   r   Útest_put—  sR    þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr£   rV  rg  rc   )r&   rd   ræ   ©rƒ   r   rc  rd  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£   rV  rO   r—   rg  rc   r   )r   r§   r}   rq  rq   r‹   rW   r]  ræ   r&   r@   r¡   rÔ   r­   Ú
get_nowaitr;   rã   rj  ÚEmptyrU   r=   rl  rm  rn  rŒ   r   )r>   r   rc  rd  r  r­   rr  r   r   r   Útest_getÜ  sF    þ


z_TestQueue.test_getc                 C   s   t ddƒD ]}| |¡ q
d S )NrÂ   r  )r×   rd   )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×   rd   r@   r¡   rÔ   r}   ru  rq   r‹   rW   r­   rã   rj  rs  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 implementedrO   rc   r£   )r   rW   r\  rV   rk   rd   r­   r   ©r>   re   r   r   r   Ú
test_qsize5  s    

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )r8  r­   r@   r¡   rÔ   Ú	task_done)rƒ   re   Úobjr   r   r   Ú_test_task_doneE  s    
z_TestQueue._test_task_donec                    sŠ   ˆ  ¡ ‰ ‡ ‡fdd„tdƒD ƒ}|D ]}d|_| ¡  q$tdƒD ]}ˆ  |¡ q@ˆ  ¡  |D ]}ˆ  d ¡ q\|D ]}| ¡  qptˆ ƒ d S )Nc                    s   g | ]}ˆj ˆjˆ fd ‘qS r  )r}   r{  rõ   ©r   r>   r   r   r÷   N  s   ÿz-_TestQueue.test_task_done.<locals>.<listcomp>rg  TrÂ   )ÚJoinableQueuer×   rq   r‹   rd   rŒ   r   )r>   Úworkersr   rÚ   r   r|  r   Útest_task_doneK  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.pyrM  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_cwdrG  ÚwriteZDirsOnSysPathr4   ÚgetcwdÚ
__import__rj  rs  Úfail)r>   Úmodule_namerJ  r   r   r   Útest_no_import_lock_contentiona  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@   rA   rã   rj  rs  r­   ÚassertGreaterEqualr   )r>   re   r‹   Údeltar   r   r   Útest_timeoutv  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 )	NrK   ri   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   )r6   r`   r   r   r   r[   ‡  s    zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N©rG   rH   rI   r[   r   r   r   r   ÚNotSerializable†  s   rŠ  Tr—   rO   rf  )rj   rk   rl   Úobjectr  r   Úcaptured_stderrr   rd   ro   r­   r¢   r   rW   r\  rV   r[  )r>   rŠ  re   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 )
NrK   ri   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  r6   r`   r   r   r   r[   ­  s    zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rG   rH   rI   Ú__doc__r?   r[   r   r   r   r   rŠ  §  s   rŠ  c                       s    e Zd ZdZe‡ fdd„ƒZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                    s   t | tƒrt |ˆ ƒrd|_d S r‘  )r   r6   r  )r®   rz  ©rŠ  r   r   Ú_on_queue_feeder_error³  s    
ÿz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rG   rH   rI   r’  Ústaticmethodr”  r   r“  r   r   Ú	SafeQueue±  s   r–  )ÚctxTr—   )rj   rk   rl   r‹  r   r   r   r  r   rŒ  Úget_contextrd   ro   r­   r¢   r  r  )r>   r–  Znot_serializable_objre   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   ÚassertRaisesRegexr7   rd   r­   rw  r   r   r   Ú$test_closed_queue_put_get_exceptionsÇ  s    (z/_TestQueue.test_closed_queue_put_get_exceptionsN)rG   rH   rI   r2  re  ro  rq  rt  ru  rv  rx  r{  r  r…  rˆ  r  r™  rœ  r   r   r   r   ra    s$   
;
	5

 &ra  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)ÚLockrW   ÚacquireÚreleaserã   r7   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‘  )ÚRLockrW   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)rG   rH   rI   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£   TrO   r   F)rZ   r^   rW   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£   rV  rg  )Ú	Semaphorer«  rW   r   rZ   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 )NrK   ri   r   Fr'   Tr—   )rj   rk   rl   r¬  r;   rŸ  rW   rU   r=   rl  rm  rn  )r>   rª  rŸ  r   r   r   rˆ  	  s    


z_TestSemaphore.test_timeoutN)rG   rH   rI   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   rJ  "  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×   rV   r@   r¡   rÔ   rZ   )r>   r<   rX   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 )NrK   r   )rj   Ú_sleeping_countr^   Ú_woken_countrW   Ú_wait_semaphorerV   )r>   r²  Úsleepersr   r   r   Úcheck_invariant5  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†   TrO   r£   )Ú	Conditionr¬  r}   rJ  rq   r‹   rå   rŒ   r°   r  rŸ  r@   r¡   rÔ   rZ   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   rV  r†   Trb  c                      s   t ˆ ƒS r   ©r^   r   ©r´  r   r   Ú<lambda>¦  r	  z0_TestCondition.test_notify_all.<locals>.<lambda>)r¼  r¬  r×   r}   rJ  rl  rq   r‹   rå   rŒ   r°   r  rŸ  rZ   r^   r»  r@   r¡   rÔ   Ú
notify_allr   r¶  ©r>   r²  r³  rÚ   r   rD   r   rÀ  r   Útest_notify_allm  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   rV  r†   Trb  r£   )Únc                      s   t ˆ ƒS r   r¿  r   rÀ  r   r   rÁ  Ê  r	  z._TestCondition.test_notify_n.<locals>.<lambda>rg  c                      s   t ˆ ƒS r   r¿  r   rÀ  r   r   rÁ  Ñ  r	  )r¼  r¬  r×   r}   rJ  rq   r‹   rå   rŒ   r°   r  rŸ  r@   r¡   rÔ   rZ   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Ÿ  rl  r   rW   rU   r=   )r>   r²  r&   rY   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 ©Nrg  ©rX   r   ©Ústater   r   rÁ  ë  r	  z0_TestCondition._test_waitfor_f.<locals>.<lambda>rg  rO   )rX   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Ú   r3   r†   Tc                      s
   ˆ j dkS ©Nr   rÈ  r   rÉ  r   r   rÁ  ú  r	  z-_TestCondition.test_waitfor.<locals>.<lambda>r   rg  rô   rO   )r¼  r   r}   rÌ  rq   r‹   rË  ro   rW   rX   r×   r@   r¡   r½  r   rw   )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@   rA   rË  rX   )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—   rV  rô   rO   )r¼  r   r¬  r}   rÑ  rq   r‹   ro   rŸ  r   rœ   r×   r@   r¡   rX   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 rN   )r½  r@   r¡   r4   rÍ   rÄ   r/  )rƒ   rf   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û   r4   rv   r¼  r   r&   r}   rÓ  r‹   ro   rã   ÚKeyboardInterruptrŒ   )r>   r‚   rf   r   r   r   r   Útest_wait_result3  s    
z_TestCondition.test_wait_result)N)rG   rH   rI   r2  rJ  r¶  r»  r¾  rÄ  rÆ  rˆ  rÌ  r8   r3  Ú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¡   rm  ræ   rà   r   r   r   Ú_test_eventJ  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&   rW   r  rU   r=   rl  ræ   r  r}   rÚ  rq   r‹   rŒ   )r>   rá   r&   r   r   r   r   Ú
test_eventO  s&    
z_TestEvent.test_eventN)rG   rH   rI   r2  rÚ  rÛ  r   r   r   r   rÙ  H  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?   }  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   rO   ©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)rG   rH   rI   r?   rá  rè  rÛ   rì  r   r   r   r   rÜ  {  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.
        rz   Tc                 S   s   | D ]}|  ¡  qd S r   )rŒ   )rM   r   r   r   r   Úfinalize±  s    z Bunch.__init__.<locals>.finalizeN)rJ  rB   rÅ  Ú	DummyListÚstartedÚfinishedr§   Ú	_can_exitræ   r×   r}   Útaskrq   r‹   rÛ   rì   rï  Ú
_finalizer)
r>   Ú	namespacerJ  rB   rÅ  Zwait_before_exitrM   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é   )
r4   rv   rñ  rÛ   rJ  rB   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   )rt   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   )rt   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)
rG   rH   rI   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   )rz  )r>   rz  r   r   r   r?   Ñ  s    zAppendTrue.__init__c                 C   s   | j  d¡ d S r‘  )rz  rÛ   r`   r   r   r   rE   Ó  s    zAppendTrue.__call__NrF   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.
    rc   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 )NrM   rL   )rj   rL   r«   rÜ  r`   r   r   r   rð  å  s
    


z_TestBarrier.DummyListc                 C   s@   t | ||| jd ƒ}z||Ž  | ¡  W | ¡  n
| ¡  0 d S rN   )rî  rý   rú  r   )r>   rJ  rB   rT   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   TrO   )	Úpartiesrý   r×   rÛ   rt   r&   Ú	n_waitingrV   Úbroken)rƒ   r   ÚresultsrÅ  ÚmrÚ   r   r   r   Ú	multipassõ  s    
z_TestBarrier.multipassrO   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&   rd   )rƒ   r   r   rY   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   rO   N)	r   r  r  r   r×   rý   rW   Úcountr   ©r>   r  r   r   r   Útest_wait_return  s
    z_TestBarrier.test_wait_returnc                 C   s   |  ¡  t|ƒdkrt‚d S rN   )r&   rt   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  rO   N)rð  rþ  rý   rü  r  r  rW   rt   )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_f1  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   rO   N)	rð  r  r  r   rW   rt   rý   ro   r  )r>   r  r  r   r   r   Ú
test_abort>  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£   rO   rø   T)	r&   rý   r  r@   r¡   ÚresetrÛ   r°   r  )rƒ   r   r  r  Úresults3rÚ   r   r   r   Ú_test_reset_fJ  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   rO   N)rð  r  r  r   rW   rt   rý   )r>   r  r  r  r   r   r   Ú
test_reset\  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_fi  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   rO   N)rð  rþ  rý   r  r  r   rW   rt   )r>   r  r  r  r  r   r   r   Útest_abort_and_reset  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   rW   rt   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$  rW   rt   r  )r>   r   r  r   r   r   Útest_default_timeout¬  s    z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rN   )rþ  r&   )r>   rT   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 )NrL   ri   éè  Fr†   )rj   rk   rl   rž  r‰   r×   rý   r}   r(  r   r‹   rå   rŒ   rW   r   )r>   r  r£  r'  r6  Újr   rÚ   r   r   r   Útest_thousandÁ  s    
ÿz_TestBarrier.test_thousandN)rO   )rG   rH   rI   r’  rý   rÿ  r  r  rð  r  r2  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ÿÿÿéê   )re   ì        ì        rf   ÚxÚyc                 C   s   t s|  d¡ d S ©Nz%requires multiprocessing.sharedctypes©rØ  rk   r`   r   r   r   r  á  s    z_TestValue.setUpc                 C   s$   t || jƒD ]\}}|d |_qd S r®  )ÚzipÚcodes_valuesrX   )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ö   ÚcoderX   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   ÿrO   r†   Tr£   )	r7  r6  rW   rX   r}   r~   rq   r‹   rŒ   )r>   Úrawr8  r9  r:  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Ú   rc   ©r£  FÚget_lockÚget_objZnavalue)
r   rC  rD  rž  rW   r   rÃ   rã   r6   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)rG   rH   rI   r\   r   r7  r  r2  r~   r?  rA  rM  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 rN   )r×   rt   )rƒ   ÚseqrÚ   r   r   r   rJ    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Ú   rV  r£   rh  )rO   r£   rV  rg  rg  rW  r†   T)ÚRawArrayÚArrayrW   rt   r«   ÚarrayrJ  r}   rq   r‹   rŒ   )r>   r>  rO  Ú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Â   rV  rÚ   r   )r×   rS  rW   rt   r«   )r>   Úsizerë  rU  r   r   r   Útest_array_from_size=  s    z_TestArray.test_array_from_sizec                 C   s   | j dd d S r@  )rV  r`   r   r   r   Útest_rawarrayL  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Â   rB  FrC  rD  Znotalock)rS  r«   r×   rC  rD  rž  rW   r   rÃ   rã   r6   rR  )r>   Zarr1rE  rF  Zarr2rG  rH  r£  Zarr3rI  rJ  rK  rL  r   r   r   Útest_getobj_getlock_objP  s(    ÿz"_TestArray.test_getobj_getlock_obj)F)rG   rH   rI   r\   r2  rJ  r8   ÚskipIfr/   rV  rX  rY  rZ  r   r   r   r   rN    s   


rN  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©rL   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Â   rc   r£   )r£   rV  rg  )
r   rO   r£   rV  rg  r   rO   r£   rV  rg  rb  )r   rO   r£   rV  rg  r   rO   r£   rV  rg  rc   rb  c                 S   s   g | ]}|d d … ‘qS r   r   )rö   Úelementr   r   r   r÷   ‰  r	  z-_TestContainers.test_list.<locals>.<listcomp>)
r   rO   r£   rV  rg  rc   rb  rh  rW  é	   r¥   r   )r   rO   r£   rV  rg  rc   rb  rh  rW  r_  r¥   )r«   r×   rW   ÚextendrÛ   )r>   rS   rT   r-  r®   rJ  r   r   r   Ú	test_listr  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×   r8  rW   Únext)r>   rS   Ú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 )rV  )r«   r×   )rö   Z_ir`   r   r   r÷   œ  r	  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rV  c                 S   s   g | ]}|d d … ‘qS r   r   )rö   Úinnerr   r   r   r÷     r	  )r   rO   r£   é7   r   r3   )r   rO   rf  rO   r£   )r«   r×   rW   Úpoprt   rÛ   )r>   rS   rÚ   rT   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   rk  rõ   r   r   r   r÷   ¶  r	  z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |ƒf‘qS r   rk  rõ   r   r   r   r÷   ·  r	  )
Údictr«   r×   rl  rW   r	   ÚsortedÚkeysr8  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 )Nri  rj  )
rn  r«   r×   rl  r8  rW   r  rã   r¾   rb  )r>   r-  rq  rÚ   rc  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£   rg  )ÚferretsÚhamstersrÂ   rV  )ÚwaterÚfeed)ÚpetsÚsuppliesrv  ry  rc   Zblanketsrh  rx  rt  é   r   ru  rO   ZmarmotséX   éc   r3   rw  )rn  rW   r  rt   r«   rr   )r>   rx  ry  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   rd   rW   r­   rn  rR   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_hiddenrW   r<  ro   rÃ   )r>   rÅ  r   r   r   Útest_namespaceþ  s    z_TestContainers.test_namespaceN)rG   rH   rI   r\   ra  rd  rh  rr  rs  r~  r  r†  r   r   r   r   r\  n  s   

.
r\  r'   c                 C   s   t  |¡ | |  S r   r·   )r2  r&   r   r   r   Úsqr	  s    
r‡  c                 C   s   | | S r   r   ©r2  r3  r   r   r   Úmul	  s    r‰  c                 C   s   t  | ¡ tdd ƒ‚d S )Nr2  i   )r@   r¡   r7   r%   r   r   r   Úraise_large_valuerror	  s    
rŠ  c                 C   s   | S r   r   ©r2  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 rN   )Ún_instancesr‹  Ú__new__r¸   r   r   r   r  	  s    zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rN   )rª   rŽ  r`   r   r   r   Ú__del__"	  s    zCountedObject.__del__N)rG   rH   rI   rŽ  r  r  r   r   r   r   r  	  s   r  c                   @   s   e Zd ZdS )ÚSayWhenErrorN©rG   rH   rI   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 )Nr3   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—  2	  s    
z_TestPool.setUpClassc                    s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S r   )r™  rž   rŒ   r–  ÚtearDownClassr¸   rš  r   r   rœ  7	  s    

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rc   rc   r   r2  rV  r‹  )r™  ÚapplyrW   r‡  )r>   Zpapplyr   r   r   Ú
test_apply>	  s    z_TestPool.test_applyc              	   C   sh   | j j}|  |tttdƒƒƒtttttdƒƒƒƒ¡ |  |tttdƒƒddtttttdƒƒƒƒ¡ d S )NrÂ   r¶   r  ©Ú	chunksize)r™  ÚmaprW   r‡  r«   r×   )r>   Zpmapr   r   r   Útest_mapC	  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_  r3   r¶   r|  r  rŸ  )r™  Ústarmapr«   r6  r×   rW   r‰  Ú	itertools)r>   ZpsmapÚtuplesr   r   r   Útest_starmapI	  s    ÿÿz_TestPool.test_starmapc                 C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )Nr¶   r|  r3   )
r«   r6  r×   rW   r™  Zstarmap_asyncr‰  r­   r¤  r£  )r>   r¥  r   r   r   Útest_starmap_asyncR	  s    ÿz_TestPool.test_starmap_asyncc              	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S rµ  )rW   r™  Ú	map_asyncr‡  r«   r×   r­   r¡  r`   r   r   r   Útest_map_asyncW	  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 )NrL   Ú1)ÚcallbackÚerror_callbackrO   r   rS   r£   )rj   rL   r«   r™  r¨  rÑ   rÛ   r&   rW   rt   rr   r7   )r>   Z	call_argsr   r   r   Útest_map_async_callbacks[	  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 )NrM   ri   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   r[   m	  s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr‰  r   r   r   r   ÚAl	  s   r®  rÂ   )	rj   rk   rl   r‹  rã   r¾   r™  r¡  r‡  )r>   r®  r   r   r   Útest_map_unplicklableh	  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 )NrO   rŸ  r—   z2pool.map_async with chunksize stalled on null list)r™  r¨  r‡  r­   rl  r   ÚTimeoutErrorrƒ  r`   r   r   r   Útest_map_chunksizer	  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 )	NrL   ri   rO   r3   rÂ   rV  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 rN   r   r`   r   r   r   rì  ‹	  s    zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rG   rH   rI   r²  r³  rì  r   r   r   r   ÚSpecialIterable†	  s   r´  )	rj   rk   rl   rã   r‘  r™  r¡  r‡  r”  )r>   r´  r   r   r   Ú"test_map_handle_iterable_exceptionx	  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 )Nrh  é1   )	r™  Úapply_asyncr‡  rl  r;   r­   rW   rU   r=   ©r>   rY   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 )Nrb  r!  r—   )r™  r·  r‡  rm  r;   r­   rã   r   r°  rU   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×   rW   r¡  rb  rã   ÚStopIterationr³  ©r>   rc  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 )NrL   ri   rO   r3   rÂ   rV  r  rh  r£   rb  rg  )rj   rk   rl   r™  r¼  r‡  r”  rã   r‘  r³  r×   rW   rb  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×   rW   ro  r¡  )r>   rc  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 )
NrL   ri   rO   r3   rÂ   rV  r  rh  r£   )rj   rk   rl   r™  rÁ  r‡  r”  rã   r‘  r³  r«   r¡  r×   rb  r¬   r  )r>   rc  Zexpected_valuesrÚ   rX   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 )NrL   r3   r   rV  )
rj   ÚRemoteErrorr7   rã   r˜  rW   rt   Ú_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'  rO   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 rN   )r˜  rW   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 )NrK   rÂ   c                 S   s   g | ]}t |ƒ‘qS r   )r‡  rõ   r   r   r   r÷   
  r	  z*_TestPool.test_context.<locals>.<listcomp>r£   )rj   r«   r×   r˜  r¨  r‡  rW   r­   rŒ   rã   r7   )r>   ÚLrÝ   r   rB  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 )NrK   rO   zexpected RuntimeError)r  z&raise RuntimeError(123) # some commentr3   zexpected SayWhenError)rj   r˜  r  rË  Ú	Exceptionrƒ  rŒ   rð   rª   r¾   rW   rB   Ú	__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_exceptionJ
  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 rN   )r˜  rã   r¾   r  rÖ  rŒ   rÕ   r   r   r   Útest_wrapped_exceptionN
  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   rO   r  gÍÌÌÌÌÌì?)r@   rA   rã   r7   r˜  r¡  rŠ  r¡   r   rŒ   ÚassertGreater)r>   Zt_startr   r   r   r   Útest_map_no_failfastU
  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÷   l
  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÷   m
  r	  c                 s   s   | ]}|ƒ V  qd S r   r   )rö   rñ   r   r   r   rm  s
  r	  z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )r×   r™  r¡  rŒ  rî   rï   r@   r¡   rÔ   rW   ræ   r  rŽ  )r>   ZobjsZrefsr   r   r   Útest_release_task_refsi
  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 )NrL   útest not applicable to managerrO   )rj   rk   r˜  rã   r7   rŒ   ©r>   r™  r   r   r   Ú
test_enterx
  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 )NrL   rÜ  rO   z%unclosed running multiprocessing pool)rj   rk   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)"rG   rH   rI   r2  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•  0	  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­   ro   rr   r   rŒ   )r>   r   rì  rY   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­   ro   rr   ZassertIsNotNonerÒ  rX   r   rŒ   )r>   rï  r   Z	iterationrì  rY   Úwrappedr   rë  r   Útest_unpickleable_result°
  s    

z._TestPoolWorkerErrors.test_unpickleable_resultN)rG   rH   rI   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 )NrV  rÂ   ©Úmaxtasksperchildc                 S   s   g | ]
}|j ‘qS r   ©r‚   ©rö   rM  r   r   r   r÷   Ì
  r	  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r¶   é2   c                 s   s   | ]}|  ¡ V  qd S r   ©rp   r÷  r   r   r   rm  Ú
  r	  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rO   c                 S   s   g | ]
}|j ‘qS r   rö  r÷  r   r   r   r÷   Ý
  r	  )r   r˜  rW   rt   rÅ  r×   rÛ   r·  r‡  Ú	enumerater­   Z_repopulate_poolÚallr@   r¡   rÔ   r¨   r´   ro  r   rŒ   )	r>   r   Zorigworkerpidsr  rÚ   r*  rY   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 )NrV  rO   rô  rb  g333333Ó?)r   r˜  r×   rÛ   r·  r‡  r   rŒ   rú  rW   r­   )r>   r   r  rÚ   r*  rY   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_okrW   ©r>   Úcmdrê   ÚoutrK  r   r   r   Ú>test_worker_finalization_via_atexit_handler_of_multiprocessingó
  s    zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rG   rH   rI   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   rJ    s    zFooBar.fc                 C   s   t ‚d S r   )r7   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)rG   rH   rI   rJ  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)rG   rH   rI   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)rJ  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¬   Ú_processrw   rÄ   rÊ   ©r>   rL   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  rw   rÄ   rÊ   r  r   r   r   Útest_mymanager_context5  s    (z%_TestMyManager.test_mymanager_contextc                 C   sP   t ƒ }| ¡  | |  |¡ W d   ƒ n1 s20    Y  |  |jjd¡ d S rÍ  )r  r‹   r  rW   r  rw   r  r   r   r   Ú!test_mymanager_context_prestarted=  s
    (z0_TestMyManager.test_mymanager_context_prestartedc                    s  |  ¡ ‰| ¡ ‰ | ¡ }‡fdd„dD ƒ}‡ fdd„dD ƒ}|  |ddg¡ |  |ddg¡ |  ˆ ¡ d¡ |  tˆj¡ |  ˆ d¡d¡ |  t	ˆjd¡ |  ˆ  ¡ d¡ |  ˆ  
¡ d	¡ |  ˆ  d¡d¡ |  ˆ  d¡d	¡ |  t|ƒd
d„ tdƒD ƒ¡ d S )Nc                    s   g | ]}t ˆ |ƒr|‘qS r   ©rÃ   ©rö   r    )rš  r   r   r÷   I  r	  z)_TestMyManager.common.<locals>.<listcomp>)rJ  r	  r  c                    s   g | ]}t ˆ |ƒr|‘qS r   r  r  )Úbarr   r   r÷   J  r	  rJ  r	  r  r  r
  c                 S   s   g | ]}|| ‘qS r   r   rõ   r   r   r   r÷   Y  r	  rÂ   )r  r  r  rW   rJ  rã   r7   r	  r  rÄ  r  r«   r×   )r>   rL   r  Zfoo_methodsZbar_methodsr   )r  rš  r   r  D  s     z_TestMyManager.commonN)rG   rH   rI   r\   r  r  r  r  r   r   r   r   r  &  s
   r  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queuea  s    r  c                   @   s   e Zd ZdZdS )ÚQueueManagerz$manager class used by server processN©rG   rH   rI   r’  r   r   r   r   r   d  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"  h  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©r   rn   Z
serializer)r"  Ú
SERIALIZERÚconnectr  rd   Útupler8  ©rƒ   r   rn   rL   r   r   r   r   Ú_puttery  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)r4   Úurandomr   r   ÚHOSTr(  r‹   rå   r  r}   r,  r   rq   r"  r)  r  rW   r­   rÜ   rã   rÌ  rd   r@   r¡   )r>   rn   rL   r   Zmanager2r   r   r   r   Útest_remoteƒ  s"    
ÿÿz_TestRemoteManager.test_remote)	rG   rH   rI   r\   r8  rÜ   r2  r,  r0  r   r   r   r   r$  o  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  rd   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!  )r4   r.  r   r   r/  r(  Z
get_serverr   Úlistenerr   r‹   r}   r,  rŒ   r  rW   r­   rÃ   r  rå   ÚOSErrorÚerrnoZ
EADDRINUSEr@   r¡   )r>   rn   rL   ZsrvrÚaddrr   r   r®   r   r   r   Útest_rapid_restart«  sD    
ÿ


ÿ

ÿ
ÿz&_TestManagerRestart.test_rapid_restartN)rG   rH   rI   r2  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 )%Ú_TestConnectionrh   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )r8  Ú
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)rO   r&  Nr%  rÂ   rÚ   rg  rK   r   rV  rh  z(                                        zexpected BufferTooShort, got %sFr3   r#   ÚXi   )(r‰   r}   r>  rq   r‹   r   rT  r«   r×   rj   rW   rª   ÚfilenorÑ   r•   r   r<  r:  rt   Úrecv_bytes_intoÚitemsizeÚ	bytearrayr   ÚBufferTooShortrB   rƒ  r;   r›   rU   r=   rl  r@   r¡   r;  r   ÚreadableÚwritablerã   ÚEOFErrorrŒ   )r>   r'  r6  r   rO  r=  ZlongmsgrU  ÚbufferrÝ   rY   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„   rO   rK   Tr£   )
r‰   rW   r•   r   rj   rE  rF  rã   r4  r›   )r>   ÚreaderÚwriterr   r   r   Útest_duplex_false0  s    
z!_TestConnection.test_duplex_falsec                 C   st   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  tdƒ}| |¡ |  | 	¡ |¡ | t
¡ | ¡  | ¡  d S )Nr†   Tr¥   )r‰   r}   r>  rq   r‹   r   r   r<  rW   r:  r;  rŒ   )r>   r'  r6  r   r=  r   r   r   Útest_spawn_close=  s    

z _TestConnection.test_spawn_closec                 C   s:  | j dkr|  d | j ¡¡ tdƒ}|  ¡ \}}| |¡ |  | ¡ |¡ | |d¡ |  | ¡ |dd … ¡ | |dd¡ |  | ¡ |dd… ¡ | |d¡ |  | ¡ td	ƒ¡ | |dd
¡ |  | ¡ td	ƒ¡ |  t	|j|d¡ |  t	|j|dd¡ |  t	|j|dd¡ |  t	|j|d¡ |  t	|j|dd¡ d S )NrK   ri   Úabcdefghijklmnopqrstuvwxyzrc   rh  rW  é   é   r8  r   é   é   rO   r3   rg  )
rj   rk   rl   r   r‰   r<  rW   r:  rã   r7   )r>   r=  rS   rT   r   r   r   Útest_sendbytesR  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)r4   Úfstatr4  r5  ÚEBADF)rƒ   rS  r®   r   r   r   Ú_is_fd_assignedr  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  r4   Údup2r@  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerP  r€  r   )rƒ   r'  ÚdataZcreate_dummy_fdsrÚ   rS  r   r   r   Ú_writefd}  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 )	NrK   úonly makes sense with processesTr„   s   foor†   ÚwbÚrb)rj   rk   r‰   r}   r\  rq   r‹   rå   r  r   rE  rD  rG  r@  rY  Zget_osfhandler   Úsend_handler‚   rŒ   rW   rH  )r>   r'  r6  r   rJ  rS  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 )NrK   r^  Tr„   s   barr†   r_  r,   z2could not find an unassigned large file descriptorr`  )rj   rk   r‰   r}   r\  rq   r‹   rå   r  r   rE  rD  rG  r@  r×   ÚMAXFDrV  rƒ  r4   rW  r   ra  r‚   r   rŒ   rW   rH  )r>   r'  r6  r   rJ  rS  Znewfdr   r   r   Útest_large_fd_transferœ  s(    	



6z&_TestConnection.test_large_fd_transferc                 C   s   t  | ¡ d¡ d S )Nó    )r4   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 )NrK   r^  Tr„   r†   )rj   rk   r‰   r}   rh  rq   r‹   rã   r¾   r   rX  rŒ   ©r>   r'  r6  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éÁ  rK   )
r‰   r•   rW   r   rj   r   Úclosedro   rã   r4  rR   r   r   r   rÊ  Ð  s    

H
z_TestConnection.test_contextN)F)rG   rH   rI   r\   r2  r>  rI  rL  rM  rS  rV  r\  r8   r3  ÚHAS_REDUCTIONrb  r[  rè   rû   rd  rÃ   r4   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•   rW   r   rj   rã   r4  )r>   r}  rf   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  rK   rv  )r>   r3  Úclientr-  r   r   r   Útest_abstract_socketõ  s    

j
z"_TestListener.test_abstract_socketN)rG   rH   rI   r\   ru  rÊ  r8   r3  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 )Ú_TestListenerClientrh   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   rq   r‹   rx  rW   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†   TrO   r¥   )rr  rt  r}   r~   r   rq   r‹   r@   r¡   rx  rW   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  ó   hellorO   )
rr  rs  rt  rw  r   rx  r<  ro   r›   r   )r>   Úfamr}  rf   rS   r   r   r   Útest_issue16955'  s    
z#_TestListenerClient.test_issue16955N)	rG   rH   rI   r\   r2  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 )Ú	_TestPollrh   c                 C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFr	  T)r‰   rW   r›   r<  rR   r   r   r   Útest_empty_string6  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_strings=  s    
z_TestPoll._child_stringsc                 C   sr   d}|   ¡ \}}| j| j||fd}| ¡  |D ]4}tdƒD ]}| d¡r< qPq<| ¡ }|  ||¡ q0| ¡  d S )N)r  r	  ó   aó   br	  s   byer	  s   lopr†   éÈ   rô   )	r‰   r}   r†  r‹   r×   r›   r:  rW   rŒ   )r>   r…  rS   rT   r   r   rÚ   r2  r   r   r   Útest_stringsD  s    
z_TestPoll.test_stringsc                 C   s   |  d¡ d S rb   )r›   )rƒ   rB  r   r   r   Ú_child_boundariesS  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>   rB  rM  r   rÉ  rz  r   r   r   Útest_boundaries[  s    
z_TestPoll.test_boundariesc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nr‡  rˆ  ó   cd)r<  )rƒ   rT   r   r   r   Ú_child_dont_mergeg  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‰   rW   r›   r}   rŽ  r‹   r:  rŒ   )r>   rS   rT   r   r   r   r   Útest_dont_mergem  s    z_TestPoll.test_dont_mergeN)rG   rH   rI   r\   rƒ  r2  r†  rŠ  r‹  rŒ  rŽ  r  r   r   r   r   r‚  2  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   )
r8  r   rr  rw  r•   r9  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–  rq   r‹   r   r˜  r   r   r•   rW   r9  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'  rM  rB  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  rq   r‹   r   r•   rW   r   rŒ   )r>   r'  r6  r   rB  rM  r   r   r   Útest_accessë  s"    


z$_TestPicklingConnections.test_accessN)rG   rH   rI   r\   r2  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   rO   r)  ÚfreeÚoccupiedc                 s   s   | ]}|j V  qd S r   ©rW  )rö   Úarenar   r   r   rm  @  r	  z&_TestHeap.test_heap.<locals>.<genexpr>rV  )r   rÝ  rÞ  r   Z_DISCARD_FREE_SPACE_LARGER_THANr×   rÑ   ÚrandomÚlognormvariaterÛ   rt   Ú	randrangerå  r«   Z_len_to_seqr8  Z_arenasÚindexZ_allocated_blocksr  rW   ÚsumÚsortrW  Úshufflerg  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)r>   Z
iterationsZ	maxblocksZblocksrÝ  rÚ   rW  rT   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¢  rO   )rî   Ú	isenabledÚenablerå   ÚdisableÚget_thresholdÚset_thresholdr×   r   rÝ  rÞ  Zbuddy)r>   Z
thresholdsrÚ   rS   rT   r   r   r   Útest_free_from_gcZ  s    
z_TestHeap.test_free_from_gc)	rG   rH   rI   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 )Ú_Foor2  r3  ÚzN)rG   rH   rI   r/   r0   r1   Z_fields_r   r   r   r   rµ  t  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 r4  r5  r`   r   r   r   r    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®  )rX   r2  r3  r×   rt   )rƒ   r2  r3  r¶  rš  rU  Ú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Ú   rh  rB  gUUUUUUÕ?r0  rV  r£   r-  rÂ   rf   r  r¥   r†   Té   gUUUUUUå?r1  rb  ç      @Z
hellohello)r   r0   r1   rµ  rS  r«   r×   r   rX   r}   r¹  rq   r‹   rŒ   rW   rQ   r2  r3  )
r>   r£  r2  r3  r¶  rš  rU  r¸  r   rÚ   r   r   r   Útest_sharedctypesŽ  s&    
z#_TestSharedCTypes.test_sharedctypesc                 C   s   | j dd d S )NTrB  )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£   ç      @r0  r   )rµ  r	   r2  r3  r¶  rW   rQ   )r>   rš  r  r   r   r   Ú	test_copy¨  s    z_TestSharedCTypes.test_copyN)F)
rG   rH   rI   r\   r  r2  r¹  r¼  r½  r¿  r   r   r   r   r·  {  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š  rt   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<  r4   rv   )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é   ©ÚcreaterW  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>rO   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)rG   rH   rI   r4   rQ  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory'  s   rÌ  Ztest01_nottherer3   )rÄ  r
   rÁ  rå   rE  rW   r    r†  rW  rt   rš  r   rÇ  rã   r7   r8   Ú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†   rc   s   HELLO)r
   rÁ  rå   rE  r}   rÂ  r    rq   r‹   rŒ   rW   rs   rš  r   )r>   rÑ  r   r   r   r   Ú#test_shared_memory_across_processesA  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×   r4   rÍ   r  r‚   rÄ   r/  rã   rÖ  rv   r  )r>   ÚsmmÚslZsl2r   r   r   Ú4test_shared_memory_SharedMemoryServer_ignores_sigint]  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_trackeru  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>rc   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ã   r7   rÁ  r‹   r×   r
   r×  Úshmr    rW   rt   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?qrh  ÚignoreZ100r¶   rV  r   rà  rÈ  Trç  Zsomerg  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srO   rã  u	   encodÃ©ess	   123456789r£   s   adiosZtest03_duplicaterß  éM   r3   ip  r8  Úany)r
   r×  rå   rá  rE  rW   rl   rt   ÚwarningsÚcatch_warningsÚsimplefilterrã   r7   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Â   r3   r_  Úchangedrg  rS   i  )r
   r×  r×   rå   rá  rE  ÚpickleÚdumpsÚloadsro   r   r   rW   rt   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£   rc   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@   rA   r   rœ   r¡   Úminr
   rÁ  rÏ  r   r4   r    r   Ú
unregisterr"  rH  r¬   )r>   r  r   r    ÚdeadlinerD   rØ  rK  r   r   r   Ú4test_shared_memory_cleaned_after_process_termination!  s4    
þ

þzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rG   rH   rI   r\   r•  rÂ  rÄ  r8   r[  rè   rû   rÓ  rÔ  r4   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  [  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  _  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  f  s   r  )rS   r¿   )rT   )rf   )Úd10rO   )rB   Úexitpriority)Úd01r   )Úd02)Úd03©r®   iöÿÿÿ)ÚSTOPiœÿÿÿ)
r‹  r   ÚFinalizer•   rî   rï   Ú_exit_functionr   r4   Ú_exit)rƒ   r'  r  rS   rT   Zclose_brf   r  r  r  r  r   r   r   Ú_test_finalized  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ö   rz  r   r   r   r÷   ”  r	  z/_TestFinalize.test_finalize.<locals>.<listcomp>r  )rS   rT   r  r  r  r  r®   )	r‰   r}   r  rq   r‹   rŒ   r8  r   rW   )r>   r'  r6  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 )NrO   r¶   )r  )rí   r   r  r§  Úrandintr`   ©r  r   r   r?     s    z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rG   rH   rI   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Â   rc   )r×   r§  ÚgetrandbitsrÌ  r  )r-  r®   )r  rÒ  r  r   r   Úmake_finalizers°  s    $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rc   rz   r»  T)r‹  rè   Úgetswitchintervalrî   r²  Úsetswitchintervalr³  r°   r  r  r   Zstart_threadsr@   r¡   rï   )r>   r  r  Zold_intervalZold_thresholdrM   r   )r  r  rÒ  r  r   Útest_thread_safety—  s2    


ÿ
"


þ

z _TestFinalize.test_thread_safetyN)
rG   rH   rI   r\   r  r  r2  r  r  r  r   r   r   r   rý  W  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 )rO   r   )r4   ÚpathÚsplitextÚsplit)rö   rJ  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   )
Úglobr4   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#  ro   rÃ   r%  )r>   r#  r    ÚmodÚattrr   r   r   Útest_importß  s&    








þz_TestImportStar.test_importN)rG   rH   rI   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   Ú
SUBWARNINGro   Ú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‹   rW   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)rG   rH   rI   r\   r1  r2  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¡   r4   rÍ   rÄ   ÚSIGUSR1)rƒ   r‚   r   r   r   Ú_killerF  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   ÚrecordN  s    z._TestPollEintr.test_poll_eintr.<locals>.recordr†   )r£   r   )r4   rv   rÄ   r;  r}   r<  r‹   r@   r¡   rŒ   ro   rW   rw   )r>   r?  r‚   Z
oldhandlerZkillerr   r   r>  r   Útest_poll_eintrK  s    
z_TestPollEintr.test_poll_eintrN)rG   rH   rI   r\   r2  r<  r8   r3  rÃ   rÄ   r@  r   r   r   r   r:  B  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®r3   )r   rr  Ú
Connectionr›   r7   r4  Ú_handlerã   rg  r   r   r   Útest_invalid_handlesf  s    
ÿz&TestInvalidHandle.test_invalid_handlesN)rG   rH   rI   r8   r[  ÚWIN32rE  r   r   r   r   rA  d  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>   rW  r   r   r   r:  |  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   ©r>   r[  r   r   r   r<  ~  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rG   rH   rI   r:  r<  r   r   r   r   Ú_FakeConnection{  s   rK  ó   abc)r‹  rã   r   ÚAuthenticationErrorrr  Údeliver_challenge©r>   rK  r   r   r   Ú#test_deliver_challenge_auth_failurez  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 )NrO   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)rG   rH   rI   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)rG   rH   rI   rP  rS  r   r   r   r   rG  w  s   
rG  c                 C   s   |  j d7  _ d S rN   )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 rN   )r   rÕ  ÚSyncManagerrã   Ú	TypeErrorr‹   rU  rT  rW   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 )NrO   )rU  )
rã   rZ  r   r˜  rU  rT  r   rŒ   rW   r  rÕ   r   r   r   Útest_pool_initializer¯  s
    z&TestInitializers.test_pool_initializerN)rG   rH   rI   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­   rj  rs  )re   Ú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_  rq   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 )Nrg  r@  )rO   r£   rV  rg  rc   rb  rh  )r   r˜  r¡  ra  r   rŒ   )r™  r2  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   )r4   rv   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)rG   rH   rI   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 ©Nrz   )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>rz   )r  r  rc  r€  r   r}   rh  rÑ  )r>   Úsior  r   rn  r   Útest_flushingò  s    
z(TestStdinBadfiledescriptor.test_flushingN)rG   rH   rI   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•   r4   rv   r   )rƒ   rM  Ú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%   rg  Fr„   r†   Tc                 3   s"   | ]}ˆ D ]}||j fV  q
qd S r   rö  )rö   rÚ   r   ©rþ   r   r   rm     r	  z%TestWait.test_wait.<locals>.<genexpr>rÂ   )Úmultiprocessing.connectionr&   r×   r   r‰   r}   rs  rq   r‹   r   rÛ   rå   rŒ   r   rG  r  r¬  ro  rW   )r>   rr  r&   ÚreadersÚmessagesrÚ   rB  rM  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%   rg  r†   Tr-  r8  c                 s   s   | ]}d | V  qdS )ry  Nr   rõ   r   r   r   rm  L  r	  z,TestWait.test_wait_socket.<locals>.<genexpr>rÂ   r™  r	  )ru  r&   r’  r“  r   r/  r”  r×   r   r}   rz  rq   r‹   rÛ   rå   rŒ   rx  r   r   r  r   r8  rW   )r>   rr  r&   r}  r6  rv  rþ   ZdicrÚ   r   rB  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_slowP  s    zTestWait.test_wait_slowc                 C   s   |   d¡ d S r‘  )r|  r`   r   r   r   Útest_wait_socket_slowS  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%   rc   r£   r  r  çš™™™™™Ù?)
ru  r&   r   r‰   r@   rA   rW   rÇ  rØ  r•   )r>   r&   rÝ   rS   rT   r‹   rY   r‡  r   r   r   Útest_wait_timeoutV  s    
zTestWait.test_wait_timeoutc                 C   s   |  ¡  t |¡ d S r   )r   r@   r¡   )rƒ   rª  Zperiodr   r   r   Úsignal_and_sleepm  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%   rV  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rÙ   r‹  r   r   r   rÁ  v  r	  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)rä  )ro  )r}  r   r   r   rÁ  v  r	  z,TestWait.test_wait_integer.<locals>.<lambda>r†   r  r—   r£   r  )ru  r&   r   r¬  r‰   r}   r  r‹   rr   rä   rÑ   ro   rŸ  r@   rA   rW   rÇ  rØ  r•   rž   rŒ   )r>   r&   rÝ   Zsorted_rª  rS   rT   r   r‹   rY   r‡  r   r   r   Útest_wait_integerr  s>    
ÿ

zTestWait.test_wait_integerc                 C   sf   ddl m} t ¡ \}}t ¡ }||gdd}t ¡ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   r%   r3   r—   rO   )	ru  r&   r   r‰   r@   rA   rW   rÇ  r   )r>   r&   rS   rT   rD   rY   r   r   r   Útest_neg_timeout  s    zTestWait.test_neg_timeoutN)F)F)rG   rH   rI   r2  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ã   r7   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)	rG   rH   rI   r8   r[  rF  r†  r3  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Œ  rB  rM  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ø  rW   )r>   rŒ  Úprogr[  Zchild_flagsrŽ  r   r   r   Ú
test_flagsÎ  s    ÿzTestFlags.test_flagsN)rG   rH   rI   r2  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 )NrO   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   rW   r   rx  r   )r>   Zold_timeoutÚparentr”  r}  r   r'  r   r   r   rˆ  æ  s$    
ÿ
zTestTimeouts.test_timeoutN)rG   rH   rI   r2  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ú   r4   r  rŒ   r  r  r  r   rÿ  Zassert_python_failurerW   r¬   r   rX  )r>   rü   r    rê   r  rK  r   r   r   Útest_noforkbombÿ  s    zTestNoForkBomb.test_noforkbombN)rG   rH   rI   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 )NrO   r†   )
r   r}   r”  r‹   r   r   r•   rt   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 )NFrc   r†   )r   r‰   r   ÚForkAwareThreadLockrt   r  r}   r”  r‹   r   r   r   ZassertLessEqual)r>   rB  rM  r}  Zold_sizer   Znew_sizer   r   r   r¤    s    
z!TestForkAwareThreadLock.test_lockN)rG   rH   rI   r2  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Û   r4   Údupr   )r>   rS  Úto_closer2  r   r   r   Úget_high_socket_fd0  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   r4   )r>   rS  r   r   r   r   B  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'  rS  r   r®   r   r   r   Ú_test_closefdsH  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  r8   r9   r   r‰   r£  r}   r¦  r‹   r   r   r   rú   rð   rr   r4  ro   r5  rU  Úwinerror)r>   rJ  rK  rS  r   r®   ZWSAENOTSOCKr   r   r   Útest_closefdR  s2    
ÿ


þ


ÿzTestCloseFds.test_closefdN)rG   rH   rI   r£  r   r2  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Á   w  s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)rÄ   r;  r•   r   r<  ÚCONN_MAX_SIZE)rƒ   r'  rÁ   r2  r   r   r   Ú_test_ignoreu  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¯  rq   r‹   r   rW   r   r@   r¡   r4   rÍ   r‚   rÄ   r;  r•   r:  r®  rŒ   ri  r   r   r   Útest_ignore  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}  rS   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²  rq   r‹   r   r   r@   r¡   r4   rÍ   r‚   rÄ   r;  rr  rw  rW   rŒ   )r>   r'  r6  r   r   ry  r   r   r   Útest_ignore_listener   s     ÿ


z$TestIgnoreEINTR.test_ignore_listenerN)rG   rH   rI   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr®  r2  r¯  r8   r3  rÃ   rÄ   r°  r²  r³  r   r   r   r   r©  p  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Œ   rW   rú   )r>   r—  rB  rM  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˜  r7   rW   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©ÚforcerO   )r   Úset_forkserver_preloadÚPRELOADrú   r¹  r7   rW   r˜  ro   rª   rG   Ú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û   rW   ro   )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ú   rk   r4   r  rŒ   r  r  r  r   rÿ  r   rø  rX  r  rƒ  )r>   r    rê   r  rK  r   r   r   Útest_preload_resourcesî  s    
z&TestStartMethod.test_preload_resourcesN)
rG   rH   rI   r2  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þ  )rM  r!   )Úpass_fdsr"  r`  TrN  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   rY  r4   Úpiperò  ró  rè   rô  rl   rõ  r   rG  rö  rX  rø  r"   rž   r&   r@   rA   r   rœ   r¡   r4  r¬   r5  ÚENOENTÚEINVALr   r"  rH  ZassertRegex)r>   r  r!   rB  rM  r   rJ  Zname1Zname2rû  r®   rK  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)rw   rä  r!  ró   T)r?  ÚalwaysrO   zresource_tracker: process died)!Ú multiprocessing.resource_trackerrÎ  re  r4   rÍ   rÄ   rÎ   r   Zwait_processrç  rè  ré  r,  r@   r¡   r   r˜  r¬  rŸ  r   rì   rí   rî   rï   r‡   rW   rt   ro   Ú
issubclassÚcategoryÚUserWarningr<  Úmessage)
r>   r-  Z
should_dierÎ  r‚   r—  Zall_warnrª  rñ   Zthe_warnr   r   r   Úcheck_resource_tracker_deathI  s:    

&



ÿz0TestResourceTracker.check_resource_tracker_deathc                 C   s   |   tjd¡ d S rŽ  )rÕ  rÄ   r/  r`   r   r   r   Útest_resource_tracker_sigintn  s    z0TestResourceTracker.test_resource_tracker_sigintc                 C   s   |   tjd¡ d S rŽ  )rÕ  rÄ   rÊ   r`   r   r   r   Útest_resource_tracker_sigtermr  s    z1TestResourceTracker.test_resource_tracker_sigtermc                 C   s   |   tjd¡ d S r‘  )rÕ  rÄ   rÎ   r`   r   r   r   Útest_resource_tracker_sigkillv  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_reusedz  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   ro   )r>   rÎ  r‚   rB  rM  r   Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reused„  s    ÿz0TestResourceTracker.test_resource_tracker_reusedN)rG   rH   rI   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&   rd   r[  ræ   rp  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Ü  rq   r‹   ro   r[  ræ   r&   r   rW   r­   rŒ   )r>   r   rc  rd  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   ro   Ú_readerrm  Ú_writerrß  r   r   r   Útest_closedÂ  s    zTestSimpleQueue.test_closedN)rG   rH   rI   r2  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 )
NrV  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    rw   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 OSErrorrO   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   rp   ç  s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rG   rH   rI   r?   r‹   rž   rŒ   rp   r   ©rä  ræ  r   r   ÚFailingForkProcessÒ  s
   rê  rå  rc   )r}   )Úcontextc                 s   s   | ]}|  ¡ V  qd S r   rù  )rö   r   r   r   r   rm  ð  r	  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r›  r4  r   r™  r˜  r8   rÍ  Z	MagicMockr   rŒ   r   ræ  )r>   rê  r   r   ré  r   Útest_release_unused_processesÌ  s    ÿ
&ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rG   rH   rI   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_classrL   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  rp   rž   rŒ   rL   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ô   rO   r£   r¾  Tú"multiprocessing.Manager still has ú active children after ú seconds)r   r  r@   rA   rt   r   r©   r¡   r  r   Úenvironment_alteredÚprint_warning)r>   Ú
start_timerD   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  rq   r‹   rö  rW   rw   )r>   Zworkerrz  r   r   r   Ú
run_worker1  s
    
zTestSyncManagerTypes.run_workerc                 C   s*   |  ¡ sJ ‚| ¡  | ¡  | d¡ d S ©Nrø   )r  r&   r  ©rƒ   rz  r   r   r   rÚ  8  s    z TestSyncManagerTypes._test_eventc                 C   s:   | j  ¡ }| ¡  |  | j|¡ | ¡ r,J ‚| d¡ d S rø  )rL   r§   ræ   r÷  rÚ  r  r&   ©r>   rÚ  r   r   r   rÛ  ?  s
    
zTestSyncManagerTypes.test_eventc                 C   s   |  ¡  d S r   ©rŸ  rù  r   r   r   Ú
_test_lockF  s    zTestSyncManagerTypes._test_lockrž  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )r#  rL   r÷  rü  r   rã   r¾   ©r>   ZlnamerÚ  r   r   r   r¤  J  s    zTestSyncManagerTypes.test_lockc                 C   s   |  ¡  | ¡  d S r   ©rŸ  r   rù  r   r   r   Ú_test_rlockP  s    z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r#  rL   r÷  rÿ  rý  r   r   r   r¦  U  s    zTestSyncManagerTypes.test_rlockc                 C   s   |  ¡  d S r   rû  rù  r   r   r   r«  Y  s    z$TestSyncManagerTypes._test_semaphorer¬  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r#  rL   r÷  r«  r   )r>   ÚsnamerÚ  r   r   r   r­  ]  s    z#TestSyncManagerTypes.test_semaphorec                 C   s   | j dd d S )Nr¯  )r   )r­  r`   r   r   r   r°  b  s    z+TestSyncManagerTypes.test_bounded_semaphorec                 C   s   |  ¡  | ¡  d S r   rþ  rù  r   r   r   Ú_test_conditione  s    z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rL   r¼  r÷  r  rú  r   r   r   Útest_conditionj  s    
z#TestSyncManagerTypes.test_conditionc                 C   s   |j dksJ ‚| ¡  d S rb   )r  r  rù  r   r   r   Ú_test_barriern  s    z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S rb   )rL   rþ  r÷  r  rú  r   r   r   r  s  s    z!TestSyncManagerTypes.test_barrierc                 C   s(   | W d   ƒ n1 s0    Y  d S r   r   rù  r   r   r   Ú
_test_poolw  s    zTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nrg  r@  )rL   r˜  r÷  r  rú  r   r   r   Ú	test_pool}  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£   rc   rb  )r\  r^  r[  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#  rL   rd   r÷  r  r[  r^  )r>   ZqnamerÚ  r   r   r   Ú
test_queue‹  s    

zTestSyncManagerTypes.test_queuec                 C   s   |   d¡ d S )Nr}  )r  r`   r   r   r   Útest_joinable_queue“  s    z(TestSyncManagerTypes.test_joinable_queuec                 C   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   rc   rO   )r  rª  r¬  Úreversert   rg  )rƒ   rz  r2  r   r   r   Ú
_test_list–  s    zTestSyncManagerTypes._test_listc                 C   s>   | j  ¡ }| d¡ |  | j|¡ |r*J ‚|  t|ƒd¡ d S )Nrc   r   )rL   r«   rÛ   r÷  r  rW   rt   rú  r   r   r   ra  ¢  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 )NrO   rš  rc   )rš  rc   )rt   r­   r«   r  rp  r8  r	   Úpopitemrù  r   r   r   Ú
_test_dict©  s    zTestSyncManagerTypes._test_dictc                 C   s<   | j  ¡ }d|d< |  | j|¡ |r(J ‚|  t|ƒd¡ d S )Nrc   rš  r   )rL   rn  r÷  r  rW   rt   rú  r   r   r   rr  ´  s
    
zTestSyncManagerTypes.test_dictc                 C   s,   |j dksJ ‚| ¡ dksJ ‚| d¡ d S )NrO   r£   )rX   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Ú   rO   r£   )rL   r   r÷  r  rW   rX   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   rO   r£   )rt   r«   rù  r   r   r   Ú_test_arrayÇ  s    z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )NrÚ   r   rO   )rL   rS  r÷  r  rú  r   r   r   rV  Î  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é  )rL   r…  r2  r3  r÷  r  rú  r   r   r   r†  ×  s    
z#TestSyncManagerTypes.test_namespaceN)rž  )rž  )r¬  )r   )+rG   rH   rI   r’  r   rÕ  rY  rî  r  r  r2  r—  rœ  rö  r÷  rÚ  rÛ  rü  r¤  rÿ  r¦  r«  r­  r°  r  r  r  r  r  r  r  r  r	  r  ra  r  rr  r  r?  r  rV  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)rG   rH   rI   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: rO   úDangling threads: )r  r   rá  ræ   r   r   r  r  ró  rô  r°   )rƒ   rK   rM   r   r   r   rœ  í  s    
zBaseMixin.tearDownClassN)rG   rH   rI   r2  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Õ  rK   N)rG   rH   rI   rj   r   r}   rr  r•  rm   rˆ   r©   r˜  r‰   r   r}  rž  r¥  r¬  r¯  r¼  r§   rþ  r   rS  r;  rR  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 )ÚManagerMixinrL   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   )rL   r˜  )rƒ   rB   rC   r   r   r   r˜  *  s    zManagerMixin.Poolc                    s   t ƒ  ¡  t ¡ | _d S r   )r–  r—  r   rW  rL   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ô   rO   r£   r¾  Trð  rñ  rò  r   z5Shared objects which still exist at manager shutdown:)r@   rA   rt   r   r©   r¡   r  r   ró  rô  rî   rï   rL   Z_number_of_objectsZ_debug_infor  rŒ   r–  rœ  )rƒ   rõ  rD   rÐ  rš  r   r   rœ  3  s.    
ÿþ



zManagerMixin.tearDownClass)rG   rH   rI   rj   r   r}   ri  ÚoperatorÚ
attrgetterr   r}  rž  r¥  r¬  r¯  r¼  r§   rþ  r   rS  r«   rn  r…  r2  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 )ÚThreadsMixinrM   N)rG   rH   rI   rj   r   Údummyr}   rr  r•  rm   r©   r˜  r‰   r   r}  rž  r¥  r¬  r¯  r¼  r§   rþ  r   rS  r   r   r   r   r  U  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 )NrG   >   rK   rM   rL   ZWithrO   ÚMixinc                   @   s   e Zd ZdS ©z*install_tests_in_module_dict.<locals>.TempNr’  r   r   r   r   ÚTemp|  s   r!  rL   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   rO   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¹  r7   r8   r9   rè   rû   rÀ  r¥  r4  r:   r   Úget_temp_dirr*  r+  r/  rB  ©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  rO   r  r  )r  r   rá  r   r¹  ræ   r   r  ró  rô  r°   r@   r¡   r   Ú_cleanup_tests)Z
need_sleeprK   rM   )r  r'  r   r   ÚtearDownModule£  s$    

z4install_tests_in_module_dict.<locals>.tearDownModuler)  r+  )Úglobalsr  r   rª   rÑ  rJ   ræ   r\   Ú
capitalizer8   ÚTestCaser   Úrequires_hashdigestrG   rI   rH   r‹  )Zremote_globsr(  rH   Zlocal_globsZ	ALL_TYPESr    ÚbaseÚtype_Znewnamer  r!  r)  r+  r   r&  r   Úinstall_tests_in_module_dictm  s<    



r2  )r'   )¶r8   Zunittest.mockr   rj  r@   r  r¤  rè   r4   rî   r5  rÄ   rT  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  Zcheck_sanitizerr9   r   r   r   r    r   r"   r,  r/  rÔ   rP   rl  rm  rn  r#  ZHAVE_GETVALUErû   rF  r&   r*   r5   rd  r¾  Zctypesr.   r/   r0   r1   r‹  r:   r;   rJ   r^   ra   rg   r}   r5  r?  r]  r`  ra  r  r¨  r±  rÙ  rÜ  rí  rî  rü  rý  r,  rN  r\  r‡  r‰  rŠ  rŒ  r  r7   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‚  r3  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µ  r[  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	=