o
    °ó®gIí ã                   @   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 d dlmZ d dlmZ d dlmZ d dlmZ e  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/yÇ   dZ.Y nw zd dl0m1Z1m2Z2 dZ3W n e/yß   dZ3Y nw z
d dl%m4Z4 dZ5W n e/yõ   dZ5Y nw zd dl6Z6W n e/y   dZ6Y nw dd„ Z7dd„ Z8dd„ Z9ej:dkr%d dl%m;Z; dd„ Z<e+j=Z>dZ?dZ@e@r5d\ZAZBZCnd\ZAZBZCeDe!ddƒ ZEejFdkZGd dl$mHZH d d!„ ZIze Jd"¡ZKW n   d#ZKY d$d%gZLzd d&lMmNZNmOZOmPZPmQZQ W n e/y‚   eRZNd ZO ZPZQY nw d'd(„ ZSG d)d*„ d*eRƒZTG d+d,„ d,eRƒZUd-d.„ ZVG d/d0„ d0ƒZWG d1d2„ d2eUƒZXG d3d4„ d4e%jYƒZZG d5d6„ d6eUƒZ[d7d8„ Z\d9d:„ Z]G d;d<„ d<eUƒZ^G d=d>„ d>eUƒZ_G d?d@„ d@eUƒZ`G dAdB„ dBeUƒZaG dCdD„ dDeUƒZbG dEdF„ dFeRƒZcdGdH„ ZdG dIdJ„ dJeRƒZeG dKdL„ dLeRƒZfG dMdN„ dNeUƒZgG dOdP„ dPeUƒZhG dQdR„ dReUƒZiG dSdT„ dTeUƒZjdãdVdW„ZkdXdY„ ZldZd[„ Zmd\d]„ ZnG d^d_„ d_eRƒZoG d`da„ daepƒZqdbdc„ ZrG ddde„ deeUƒZsdfdg„ Ztdhdi„ ZuG djdk„ dkeUƒZvG dldm„ dmeUƒZwd dnl(mxZxmyZymzZz G dodp„ dpeRƒZ{dqdr„ Z|G dsdt„ dteyƒZ}G dudv„ dvexƒZ~e~jdwe{dx e~jdye{dzd{ e~jdre|e}d| G d}d~„ d~eUƒZ€e ¡ Z‚dd€„ ZƒG dd‚„ d‚exƒZ„e„jd€eƒdx G dƒd„„ d„exƒZ…e… d€¡ d…Z†G d†d‡„ d‡eUƒZ‡e ˆdˆ¡G d‰dŠ„ dŠeUƒƒZ‰e7d‹ƒZŠG dŒd„ deUƒZ‹G dŽd„ deUƒZŒG dd‘„ d‘eUƒZG d’d“„ d“eUƒZŽe  e.d”¡e ˆdˆ¡G d•d–„ d–eUƒƒƒZG d—d˜„ d˜eUƒZ‘G d™dš„ dšeNƒZ’G d›dœ„ dœeUƒZ“e  e5d¡e ˆdˆ¡G dždŸ„ dŸeUƒƒƒZ”G d d¡„ d¡eUƒZ•G d¢d£„ d£e j–ƒZ—G d¤d¥„ d¥eUƒZ˜G d¦d§„ d§eUƒ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–ƒƒZd°d±„ Zžd²d³„ ZŸd´dµ„ Z d¶d·„ Z¡G d¸d¹„ d¹eRƒ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jFd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ÚeRƒ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)Úimport_helper)Ú	os_helper)Úsocket_helper)Úthreading_helper)Úwarnings_helperÚ_multiprocessing)Úutil)Ú	reductionF)ÚValueÚcopyT)Úshared_memoryc                 C   ó
   |   d¡S )NÚlatin)Úencode)Ús© r   úP/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/_test_multiprocessing.pyr   L   ó   
r   c                 C   s&   t | tjjƒr|  ¡  |  ¡  d S d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueP   s   þr   c                 C   s   t  | ¡ d S r   )r   r   )Úprocessr   r   r   Újoin_processV   s   r!   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r#   Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlink_   ó   r'   çš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)r)   r)   r)   Ú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   r1   ÚSC_OPEN_MAXé   Ú__main__z$test.test_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc               	   C   sN   d} zt  d¡}W n ttfy   Y dS w |dks|| kr dS t d|  ¡‚)zACheck that the system supports enough semaphores to run the test.r3   Ú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   þÿrA   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTimingWrapperc                 C   ó   || _ d | _d S r   )ÚfuncÚelapsed)ÚselfrE   r   r   r   Ú__init__¨   ó   
zTimingWrapper.__init__c                 O   s:   t  ¡ }z| j|i |¤ŽW t  ¡ | | _S t  ¡ | | _w r   )ÚtimeÚ	monotonicrE   rF   )rG   ÚargsÚkwdsÚtr   r   r   Ú__call__¬   s    zTimingWrapper.__call__N©Ú__name__Ú
__module__Ú__qualname__rH   rO   r   r   r   r   rC   ¦   s    rC   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 d S ©Né   )ÚCHECK_TIMINGSÚassertAlmostEqual©rG   ÚaÚbr   r   r   ÚassertTimingAlmostEqual»   s   ÿz$BaseTestCase.assertTimingAlmostEqualc                 G   s.   z||Ž }W n
 t y   Y d S w |  ||¡S r   )ÚNotImplementedErrorÚassertEqual)rG   ÚvaluerE   rL   Úresr   r   r   ÚassertReturnsIfImplemented¿   s   ÿz'BaseTestCase.assertReturnsIfImplementedc                 G   ó   t dƒ‚)Nz#shouldn't try to pickle a test case)r`   )rG   rL   r   r   r   Ú
__reduce__É   ó   zBaseTestCase.__reduce__N)rQ   rR   rS   ÚALLOWED_TYPESr_   rd   rf   Ú__reduce_ex__r   r   r   r   rT   ·   s    
rT   c                 C   sZ   z|   ¡ W S  ty,   z| jW  Y S  ty+   z| jW  Y  Y S  ty*   t‚w w w r   )Ú	get_valuer=   Z_Semaphore__valueÚ_valuer`   ©rG   r   r   r   rj   Ò   s   
ÿýýrj   c                   @   ó   e Zd Zdd„ ZdS )ÚDummyCallablec                 C   ó   |  d¡ d S ©Né   )Úput)rG   ÚqÚcr   r   r   rO   ã   ó   zDummyCallable.__call__N)rQ   rR   rS   rO   r   r   r   r   rn   â   ó    rn   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©rU   rW   c                 C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )NrW   útest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenra   Úidentr;   ÚgetpidÚexitcode)rG   Úcurrentr~   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 )NrW   ry   ©ÚtargetT©r‹   r   F)
rz   r{   r|   ÚProcessÚ_testra   r   r}   r   ÚassertFalse)rG   Zproc0Zproc1Úproc2r   r   r   Útest_daemon_argumentú   s   
z!_TestProcess.test_daemon_argumentc                 O   sV   |   ¡ }| |¡ | |¡ | |j¡ | jdkr)| t|jƒ¡ | |j¡ d S d S )NrW   )r}   rr   r%   rz   rƒ   r~   Úpid)Úclsrs   rL   rM   rˆ   r   r   r   rŽ     s   


þz_TestProcess._testc                 C   s    | j dkr|  d | j ¡¡ |  |  ¡ ¡ | jdd\}}| j| j|fd}| ¡  | 	¡  | 
¡ \}}|  ||  ¡ j¡ |  |t ¡ ¡ |  ||  ¡ j¡ d S )NrW   ry   F©Úduplex©r‹   rL   )rz   r{   r|   ÚassertIsNoneÚparent_processÚPiper   Ú_test_send_parent_processÚstartÚjoinÚrecvra   r}   r’   r;   r†   r%   )rG   ÚrconnÚwconnÚpÚ
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sKt
dƒ‚| ¡ }|  |d	¡ d S )
NrW   ry   Fr”   r–   ©r0   z(Could not communicate with child processÚaliveú	not alive)rz   r{   r|   r™   r   Ú_test_create_grandchild_processr›   Úpollr   ÚLONG_TIMEOUTÚAssertionErrorr   ra   Ú	terminaterœ   )rG   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›   rJ   Úsleep)r“   rŸ   r    r   r   r   r«   =  s   z,_TestProcess._test_create_grandchild_processc                 C   sV   ddl m} | |ƒ  ¡ rdnd¡ |ƒ jtjd | |ƒ  ¡ r&d¡ d S d¡ d S )Nr   r¤   r©   rª   r¨   )r¥   r˜   r¦   r€   rœ   r   ÚSHORT_TIMEOUTr§   r   r   r   r±   C  s   "z'_TestProcess._test_report_parent_statusc                 C   s˜  |   d¡}|  ¡ }|ddf}dddœ}d}| j| j|||d}d|_|  ¡ }| jd	kr3|  |j|j¡ |  | 	¡ d
¡ |  |jd¡ |  
||  ¡ ¡ |  t|  ¡ ƒtu ¡ |  |jd ¡ | ¡  |  |jd ¡ |  | 	¡ d¡ |  ||  ¡ ¡ |  | ¡ |dd … ¡ |  | ¡ |¡ |  | ¡ |j¡ | jd	kr«|  | ¡ |j¡ |  | ¡ |j¡ | ¡  |  |jd¡ |  | 	¡ d
¡ |  
||  ¡ ¡ t|ƒ d S )NrY   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)r‹   rL   Úkwargsr%   TrW   Fr   )r   ÚEventr   rŽ   r   r}   rz   ra   r~   r€   ÚassertNotInÚactive_childrenr   ÚtypeÚlistr‡   r›   ÚassertInÚgetr%   r’   rœ   r   )rG   rs   ÚerL   r·   r%   r    rˆ   r   r   r   Útest_processJ  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 )NrW   ry   rY   r–   )rz   r{   r|   Ú	threadingÚmain_threadÚ	native_idr   r   Ú"_test_process_mainthread_native_idr›   r¾   rœ   r   ÚassertNotEqual)rG   Zcurrent_mainthread_native_idrs   r    Zchild_mainthread_native_idr   r   r   Ú!test_process_mainthread_native_idr  s   


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  ¡ j}| |¡ d S r   )rÁ   rÂ   rÃ   rr   )r“   rs   Zmainthread_native_idr   r   r   rÄ   ƒ  ó   
z/_TestProcess._test_process_mainthread_native_idc                 C   ó   t  d¡ d S )Néd   ©rJ   r²   ©r“   r   r   r   Ú_sleep_someˆ  ru   z_TestProcess._sleep_somec                 C   s   t  |¡ d S r   rÊ   )r“   Údelayr   r   r   Ú_test_sleepŒ  ru   z_TestProcess._test_sleepc              
      sœ  | j dkr|  d | j ¡¡ | j| jd‰ dˆ _ˆ  ¡  |  ˆ  ¡ d¡ |  	ˆ |  
¡ ¡ |  ˆ jd ¡ tˆ jƒ}|  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ |  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ t d¡ |ˆ ƒ ttd	ƒr©‡ fd
d„}t tj|¡}zt d¡ |  |ƒ d ¡ W t d¡ t tj|¡ nt d¡ t tj|¡ w |  |ƒ d ¡ |  |jd¡ |  ˆ  ¡ d¡ |  ˆ |  
¡ ¡ ˆ  ¡  ˆ jS )NrW   ry   rŠ   Tr   r.   r:   rY   Úalarmc                     s   t dˆ  ƒ‚)Nzjoin took too long: %s©ÚRuntimeError©rL   ©r    r   r   Úhandler®  ó   z+_TestProcess._kill_process.<locals>.handleré
   F)rz   r{   r|   r   rÌ   r   r›   ra   r€   r½   rº   r‡   rC   rœ   r_   rF   rJ   r²   ÚhasattrÚsignalÚSIGALRMrÏ   r¹   )rG   Úmethrœ   rÔ   Zold_handlerr   rÓ   r   Ú_kill_process  sB   






ÿz_TestProcess._kill_processc                 C   ó0   |   tjj¡}tjdkr|  |tj ¡ d S d S ©NÚnt)	rÛ   r   r   r¯   r;   r%   ra   rØ   ÚSIGTERM©rG   r‡   r   r   r   Útest_terminateÃ  ó   
ÿz_TestProcess.test_terminatec                 C   rÜ   rÝ   )	rÛ   r   r   Úkillr;   r%   ra   rØ   ÚSIGKILLrà   r   r   r   Ú	test_killÈ  râ   z_TestProcess.test_killc                 C   sH   zt  ¡ }W n ty   d}Y nw |  t|ƒtu ¡ |  |dk¡ d S rX   )r   Ú	cpu_countr`   r   r»   Úint)rG   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)ra   r»   rº   r¼   r   rJ   r²   ÚDELTAr¹   r   r›   r½   rœ   ©rG   r    r   r   r   Útest_active_childrenÕ  s   z!_TestProcess.test_active_childrenc                 C   sV   |  |¡ t|ƒdk r'tdƒD ]}| j| j|||g fd}| ¡  | ¡  qd S d S )Nr´   r–   )r¦   r„   Úranger   Ú_test_recursionr›   rœ   )r“   rŸ   ÚidÚir    r   r   r   rî   â  s   
ÿ
úz_TestProcess._test_recursionc                 C   s~   | j dd\}}|  |g ¡ t t¡ g }| ¡ r$| | ¡ ¡ | ¡ sg dgddgddgdgddgddgg}|  ||¡ d S )NFr”   r   rY   )	r™   rî   rJ   r²   rê   r¬   Úappendr   ra   )rG   rž   rŸ   ÚresultÚexpectedr   r   r   Útest_recursioní  s    
ÿù	z_TestProcess.test_recursionc                 C   ro   )Nç      $@r,   ©r“   Úeventr   r   r   Ú_test_sentinel  ru   z_TestProcess._test_sentinelc                 C   sÄ   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}|  t¡ |j W d   ƒ n1 s.w   Y  | 	¡  |  
|j¡ |j}|  |t¡ |  t|dd¡ | ¡  | ¡  |  t|dd¡ d S )NrW   ry   r–   r.   r¨   rY   )rz   r{   r|   r¸   r   rø   ÚassertRaisesr>   Úsentinelr›   Ú
addCleanuprœ   r‚   rç   r   r1   Úsetr   )rG   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“   Úrcrs   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?w   Y  | d ¡ | ¡  |  | 	¡ d¡ |  |jd¡ | ¡  |  
t¡ | 	¡  W d   ƒ n1 stw   Y  |  
t¡ | ¡  W d   ƒ n1 sw   Y  |  
t¡ | ¡  W d   ƒ n1 s¦w   Y  | ¡  t |¡}~t ¡  |  |ƒ d ¡ t|ƒ d S )NrW   ry   rs   )r‹   r·   TFr   )rz   r{   r|   r   r   r  r   r›   ra   r€   rù   r>   r   rr   rœ   r‡   r¯   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )rG   rs   r    Úwrr   r   r   Ú
test_close  s<   

ÿ

ÿ
ÿ
ÿ
z_TestProcess.test_closec                    s(  ˆ j dkrˆ  d ˆ j ¡¡ t ¡ }|dkrdnd}‡ fdd„t|ƒD ƒ}|D ]}| ¡  q'|D ]}t|ƒ q0|D ]	}ˆ  |j	d¡ q9‡ fd	d„t|ƒD ƒ}|D ]}| ¡  qPt
 d
¡ |D ]}| ¡  q^|D ]}t|ƒ qgtjdkrtj g}tjdkr„| tj ¡ |D ]}ˆ  |j	|¡ q†d S d S )NrW   ry   Úspawnrq   rÉ   c                    s   g | ]
}ˆ j ˆ jd d‘qS ))ç{®Gáz„?r–   )r   rÎ   ©Ú.0rð   rl   r   r   Ú
<listcomp>C  s    ÿz4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]	}ˆ j ˆ jd ‘qS )rŠ   )r   rÌ   r  rl   r   r   r  L  s    ÿçü©ñÒMbP?rÞ   Údarwin)rz   r{   r|   r   Úget_start_methodrí   r›   r!   ra   r‡   rJ   r²   r¯   r;   r%   rØ   rß   rþ   Úplatformrñ   rä   r½   )rG   ÚsmÚNÚprocsr    Z	exitcodesr   rl   r   Útest_many_processes;  s>   

ÿ


ÿ






ùz _TestProcess.test_many_processesc                 C   sf   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  |  |ƒ d ¡ |  | 	¡ d¡ t
|ƒ d S )Nr–   rq   )rn   r  r  r   r   r›   rœ   r  ra   r¾   r   )rG   rt   r  rs   r    r   r   r   Útest_lose_target_ref^  s   
z!_TestProcess.test_lose_target_refc                 C   s   |  t ¡ ¡ | ¡  d S r   )rr   r   Zfd_countr-   )rG   Úevtrs   r   r   r   Ú_test_child_fd_inflationj  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 ]}| ¡  q7z*‡fdd„t|ƒD ƒ}ˆ 	t
t|ƒƒd|¡ W ˆ  ¡  |D ]}| ¡  q\tˆƒ d S ˆ  ¡  |D ]}| ¡  qotˆƒ w )	NrW   ry   Úforkrq   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r–   )r   r  r  ©r  rs   rG   r   r   r    s    ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    ó   g | ]}ˆ   ¡ ‘qS r   ©r¾   r  ©rs   r   r   r  …  ó    rY   )rz   r{   r|   r   r  r¸   r   rí   r›   ra   r„   rü   rœ   r   )rG   r  r  r  r    Z	fd_countsr   r  r   Útest_child_fd_inflationo  s0   
ÿ

ý

z$_TestProcess.test_child_fd_inflationc                    s>   ‡ fdd„}‡ fdd„}t j|d ¡  t j|dd ¡  d S )Nc                      ó   t  d¡ ˆ  ¡  d S )Nç      à?©rJ   r²   rü   r   ©r  r   r   Úfunc1  ó   
z2_TestProcess._test_wait_for_threads.<locals>.func1c                      r!  )Né   )rJ   r²   Úclearr   r$  r   r   Úfunc2”  r&  z2_TestProcess._test_wait_for_threads.<locals>.func2rŠ   TrŒ   )rÁ   ÚThreadr›   )rG   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 )NrW   ry   r–   )
rz   r{   r|   r¸   r   r+  r›   rœ   r   Úis_set)rG   r  Úprocr   r   r   Útest_wait_for_threads›  s   
z"_TestProcess.test_wait_for_threadsc                 C   sH   |  ¡ D ]\}}|dkrt ¡ }| ¡  nd }tt|d ƒ q| ¡  d S )Nr   )ÚitemsÚioÚStringIOr   Úsetattrrþ   rü   )rG   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}|D ]?}tt|ƒ}tt||ƒ z+|  ¡ }| j| j|fd}| 	¡  | 
¡  |  | ¡ ¡ |  |jd¡ W tt||ƒ qtt||ƒ w qd S )Nr   ©ÚstdoutÚstderrr–   )r0  r1  r   Úgetattrrþ   r2  r¸   r   r6  r›   rœ   r   r,  ra   r‡   )rG   Zstreamsr3  r5  Ú
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 ]A}dD ]<}t t|ƒ}z.|  ¡ }| j| j|||ifd}| ¡  | ¡  |  | ¡ ¡ |  	|j
d¡ W tt||ƒ qtt||ƒ w qd S )Nr7  )r   Úremover–   r   )r:  rþ   r¸   r   r6  r›   rœ   r   r,  ra   r‡   r2  )rG   r3  r4  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#  )rG   r  rÍ   r   r   r   Ú_sleep_and_set_event×  ó   
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 )
NrW   ry   Ú
forkserverr   )Ú_forkserverr"  r–   ç       @)r   éÿ   )rz   r{   r|   r   r  Zmultiprocessing.forkserverrB  Úensure_runningr¸   r   r?  r›   Z_forkserver_pidr;   rã   rJ   r²   rœ   r   r,  ra   r‡   r½   )
rG   Úsignumr  rB  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   )rG  rØ   ÚSIGINTrl   r   r   r   Útest_forkserver_sigint  ó   z#_TestProcess.test_forkserver_sigintc                 C   s   t jdkr|  tj¡ d S d S rÝ   )r;   r%   rG  rØ   rä   rl   r   r   r   Útest_forkserver_sigkill  s   
ÿz$_TestProcess.test_forkserver_sigkill)r   N©r.   ).rQ   rR   rS   rh   r‰   r‘   ÚclassmethodrŽ   r£   rš   r°   r«   r±   rÀ   r?   Ú
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.  r6  r<  r>  r?  rG  rI  rK  r   r   r   r   rw   è   sl    
	


(



3


 #

&rw   c                   @   ó,   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   rH   r™   Ú
child_connÚparent_connrl   r   r   r   rH     s   z_UpperCaser.__init__c                 C   s<   | j  ¡  t| jjd ƒD ]
}| j | ¡ ¡ q| j ¡  d S r   )rS  r   ÚiterrR  r   r¦   Úupper©rG   r   r   r   r   Úrun  s   
z_UpperCaser.runc                 C   s   | j  |¡ | j  ¡ S r   )rS  r¦   r   rV  r   r   r   Úsubmit  s   
z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )rS  r¦   r   rR  rl   r   r   r   Ústop!  s   
z_UpperCaser.stopN)rQ   rR   rS   rH   rW  rX  rY  r   r   r   r   rQ    s
    rQ  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©rU   c                 C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTr¶   ZHELLOZworldZWORLD)rQ  r   r›   ra   rX  rY  rœ   )rG   Z
uppercaserr   r   r   Útest_subclassing*  s   z(_TestSubclassingProcess.test_subclassingc                 C   s°   | j dkr|  d | j ¡¡ tj}|  tj|¡ | j| j|fd}| 	¡  | 
¡  t|dd}| ¡ }|  d|¡ |  d|¡ |  d|¡ W d   ƒ d S 1 sQw   Y  d S )	NrW   ry   r–   úutf-8©ÚencodingÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rz   r{   r|   r   ÚTESTFNrû   Úunlinkr   Ú_test_stderr_flushr›   rœ   ÚopenÚreadr½   )rG   Útestfnr-  ÚfÚerrr   r   r   Útest_stderr_flush3  s   
"ûz)_TestSubclassingProcess.test_stderr_flushc                 C   s8   t  |t jt jB t jB ¡}t|ddddt_dd  d S )NÚwr]  F©r_  ÚclosefdrY   r   )r;   rd  ÚO_WRONLYÚO_CREATÚO_EXCLrþ   r9  )r“   rf  Úfdr   r   r   rc  D  s   z*_TestSubclassingProcess._test_stderr_flushc                 C   s:   t  |t jt jB t jB ¡}t|ddddt_t |¡ d S )Nrj  r]  Frk  )r;   rd  rm  rn  ro  rþ   r9  rÿ   )r“   Úreasonrf  rp  r   r   r   Ú_test_sys_exitK  s   z&_TestSubclassingProcess._test_sys_exitc           	   	   C   sF  | j dkr|  d | j ¡¡ tj}|  tj|¡ g d¢dfD ]G}| j| j||fd}d|_	| 
¡  t|ƒ |  |jd¡ t|dd	}| ¡ }W d   ƒ n1 sQw   Y  |  | ¡ t|ƒ¡ t |¡ qg d
¢}|D ]4\}}| j|d" | jtj|d}d|_	| 
¡  t|ƒ |  |j|¡ W d   ƒ ql1 s›w   Y  qld S )NrW   ry   )rY   r´   é   zignore thisr–   TrY   r]  r^  )))TrY   )©Fr   ))é   ru  )r   r   )r   r   rÒ   )rz   r{   r|   r   ra  rû   rb  r   rr  r   r›   r!   ra   r‡   rd  re  ÚrstripÚstrr;   ÚsubTestrþ   rÿ   )	rG   rf  rq  r    rg  ZcontentÚcasesrL   ró   r   r   r   Útest_sys_exitQ  s6   
þ
ÿûÿz%_TestSubclassingProcess.test_sys_exitN)
rQ   rR   rS   rh   r\  ri  rM  rc  rr  rz  r   r   r   r   rZ  &  s    	

rZ  c                 C   s   t | dƒr	|  ¡ S |  ¡ dkS )NÚemptyr   )r×   r{  Úqsizer  r   r   r   Úqueue_empty}  ó   
r}  c                 C   s   t | dƒr	|  ¡ S |  ¡ |kS )NÚfull)r×   r  r|  )rs   Úmaxsizer   r   r   Ú
queue_fullƒ  r~  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 )Nrƒ  ©r€  r–   TFrY   r´   rs  é   rq   é   r   r¨   )r   r¸   r   r†  r   r›   ra   r}  r  rr   Ú
put_nowaitrJ   r²   rê   rC   rù   ÚpyqueueÚFullr_   rF   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3rü   r-   rœ   r   )rG   ZMAXSIZEr   r„  r…  r-  rr   rŠ  r   r   r   Útest_put”  sR   þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr´   rs  rˆ  rq   )r-   rr   rü   ©r“   r   r„  r…  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´   rs  rY   r¨   rˆ  rq   r   )r   r¸   r   r’  r   r›   ra   r}  rü   r-   rJ   r²   rê   r¾   Ú
get_nowaitrC   rù   r‹  ÚEmptyr_   rF   r  rŽ  r  rœ   r   )rG   r   r„  r…  r-  r¾   r“  r   r   r   Útest_getÙ  sF   þ


z_TestQueue.test_getc                 C   s   t ddƒD ]}| |¡ qd S )NrÖ   r'  )rí   rr   )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 ]
}|  
| ¡ |¡ q)|  tj|jd¡ | ¡  t|ƒ d S )NrÖ   r–   Tr'  F)r   rí   rr   rJ   r²   rê   r   r–  r   r›   ra   r¾   rù   r‹  r”  rœ   r   )rG   r   rð   r    r   r   r   Ú	test_fork  s   
z_TestQueue.test_forkc                 C   sª   |   ¡ }z
|  | ¡ d¡ W n ty   |  d¡ Y nw | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ t|ƒ d S )Nr   zqsize method not implementedrY   rq   r´   )r   ra   r|  r`   r{   rr   r¾   r   ©rG   rs   r   r   r   Ú
test_qsize2  s   ÿ

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )rT  r¾   rJ   r²   rê   Ú	task_done)r“   rs   Úobjr   r   r   Ú_test_task_doneB  s   

þz_TestQueue._test_task_donec                    sŠ   ˆ  ¡ ‰ ‡ ‡fdd„tdƒD ƒ}|D ]	}d|_| ¡  qtdƒD ]}ˆ  |¡ q ˆ  ¡  |D ]}ˆ  d ¡ q.|D ]}| ¡  q8tˆ ƒ d S )Nc                    s   g | ]}ˆj ˆjˆ fd ‘qS r  )r   rœ  r  ©r   rG   r   r   r  K  s    ÿz-_TestQueue.test_task_done.<locals>.<listcomp>rˆ  TrÖ   )ÚJoinableQueuerí   r   r›   rr   rœ   r   )rG   Úworkersr    rð   r   r  r   Útest_task_doneH  s   ÿ

z_TestQueue.test_task_donec              
   C   sØ   t  ¡ ^ d}t|d ddd}| d¡ W d   ƒ n1 s w   Y  t t ¡ ¡ zt|ƒ W n t	j
yB   |  d¡ Y nw W d   ƒ n1 sMw   Y  W d   ƒ d S W d   ƒ d S 1 sew   Y  d S )NZimported_by_an_imported_modulez.pyrj  r]  r^  zøif 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r   Ztemp_cwdrd  Úwriter   ZDirsOnSysPathr;   ÚgetcwdÚ
__import__r‹  r”  Úfail)rG   Úmodule_namerg  r   r   r   Útest_no_import_lock_contention^  s    
ÿÿ€ýó"óz)_TestQueue.test_no_import_lock_contentionc                 C   sH   t  ¡ }t ¡ }|  tj|jdd¡ t ¡ | }|  |d¡ t	|ƒ d S )NTgš™™™™™É?r)   )
r   r   rJ   rK   rù   r‹  r”  r¾   ÚassertGreaterEqualr   )rG   rs   r›   Údeltar   r   r   Útest_timeouts  s   z_TestQueue.test_timeoutc              	   C   s4  | j dkr|  d | j ¡¡ G dd„ dtƒ}tj ¡ % |  ¡ }| |ƒ ¡ | d¡ |  	|j
tjd¡ t|ƒ W d   ƒ n1 sCw   Y  tj ¡ C | jdd}| |ƒ ¡ | d¡ z
|  | ¡ d¡ W n	 tyr   Y nw |  	|j
tjd¡ |  	| ¡ ¡ t|ƒ W d   ƒ d S 1 s“w   Y  d S )	NrU   ry   c                   @   rm   )zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec                 S   ó   t ‚r   )r=   rl   r   r   r   rf   „  ó   zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N©rQ   rR   rS   rf   r   r   r   r   ÚNotSerializableƒ  rv   r­  Tr¨   rY   r‡  )rz   r{   r|   ÚobjectÚtestr   Úcaptured_stderrr   rr   r   r¾   r³   r   ra   r|  r`   r{  )rG   r­  rs   r   r   r   Ú"test_queue_feeder_donot_stop_onexc~  s.   


û
ý
"ñz-_TestQueue.test_queue_feeder_donot_stop_onexcc                    sÆ   | j dkr|  d | j ¡¡ G dd„ dtƒ‰ G ‡ fdd„dtjjƒ}ˆ ƒ }tj 	¡ # |t 
¡ d}| |¡ | d¡ |  |jtjd	¡ W d   ƒ n1 sPw   Y  |  |j¡ |  |j¡ d S )
NrU   ry   c                   @   ó    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_calledrl   r   r   r   rH   ¦  rI   zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s
   d| _ t‚©NT)r´  r=   rl   r   r   r   rf   ª  s   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rQ   rR   rS   Ú__doc__rH   rf   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 d S d S r¶  )r   r=   rµ  )r¿   r›  ©r­  r   r   Ú_on_queue_feeder_error°  s
   
ÿ
þz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rQ   rR   rS   r·  Ústaticmethodr¹  r   r¸  r   r   Ú	SafeQueue®  s    r»  )ÚctxTr¨   )rz   r{   r|   r®  r   r   r   r¯  r   r°  Úget_contextrr   r   r¾   r³   r´  rµ  )rG   r»  Znot_serializable_objrs   r   r¸  r   Ú'test_queue_feeder_on_queue_feeder_errorž  s   



ú	z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc              	   C   sŒ   t  ¡ t  ¡ fD ];}| ¡  |  td¡ | d¡ W d   ƒ n1 s$w   Y  |  td¡ | ¡  W d   ƒ q1 s>w   Y  qd S )Nz	is closedÚfoo)r   r   rž  r   ÚassertRaisesRegexr>   rr   r¾   r˜  r   r   r   Ú$test_closed_queue_put_get_exceptionsÄ  s   ÿ
ÿüz/_TestQueue.test_closed_queue_put_get_exceptionsN)rQ   rR   rS   rM  r†  r  r’  r•  r–  r—  r™  rœ  r   r¦  r©  r±  r¾  rÁ  r   r   r   r   r‚  Š  s&    
;
	5

 &r‚  c                   @   ó$   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)ÚLockra   ÚacquireÚreleaserù   r>   rÁ   ÚThreadError©rG   Ú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¶  )ÚRLockra   rÅ  rÆ  rù   r®   rÑ   rÈ  r   r   r   Ú
test_rlockØ  s   z_TestLock.test_rlockc                 C   s.   |   ¡ 	 W d   ƒ d S 1 sw   Y  d S r   ©rÄ  rl   r   r   r   Útest_lock_contextâ  s   
"ÿz_TestLock.test_lock_contextN)rQ   rR   rS   rÊ  rÌ  rÎ  r   r   r   r   rÃ  Ï  s    
rÃ  c                   @   rP  )
Ú_TestSemaphorec                 C   sª   |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | d¡d¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ d S )Nr´   TrY   r   F)rd   rj   ra   rÅ  rÆ  ©rG   Úsemr   r   r   Ú_test_semaphoreé  s   z_TestSemaphore._test_semaphorec                 C   sT   |   d¡}|  |¡ |  | ¡ d ¡ |  dt|¡ |  | ¡ d ¡ |  dt|¡ d S )Nr´   rs  rˆ  )Ú	SemaphorerÒ  ra   rÆ  rd   rj   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þ  ó   
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 )NrU   ry   r   Fr.   Tr¨   )rz   r{   r|   rÓ  rC   rÅ  ra   r_   rF   r  rŽ  r  )rG   rÑ  rÅ  r   r   r   r©    s   


z_TestSemaphore.test_timeoutN)rQ   rR   rS   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Úwokenr0   r   r   r   rg    s
   
z_TestCondition.fc              	   C   s\   t dƒD ]}z
|ƒ |krW  q!W n
 ty   Y  q!w t t¡ qt t¡ |  ||¡ d S ©NrÖ   )rí   r`   rJ   r²   rê   rd   )rG   rE   rb   rð   r   r   r   ÚassertReachesEventually'  s   
ÿÿ
z&_TestCondition.assertReachesEventuallyc                 C   s\   | j dkr,z|j ¡ |j ¡  }|  |d¡ |  |j ¡ d¡ W d S  ty+   Y d S w d S )NrU   r   )rz   Ú_sleeping_countrj   Ú_woken_countra   Ú_wait_semaphorer`   )rG   rÚ  Úsleepersr   r   r   Úcheck_invariant2  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–   TrY   r´   )Ú	ConditionrÓ  r   rg  r   r›   rû   rœ   rÁ   r*  rÅ  rJ   r²   rê   rd   rj   ÚnotifyrÆ  rã  )rG   rÚ  rÛ  rÜ  r    r   r   r   Útest_notify=  s6   





z_TestCondition.test_notifyc                    s¨  |   ¡ }|  d¡}|  d¡‰ tdƒD ]4}| j| j||ˆ tfd}d|_| ¡  |  |j	¡ t
j| j||ˆ tfd}d|_| ¡  |  |j	¡ qtdƒD ]}| ¡  qKtdƒD ]}ˆ  ¡  qV|  dtˆ ¡ |  |¡ tdƒD ]2}| j| j||ˆ fd}d|_| ¡  |  |j	¡ t
j| j||ˆ fd}d|_| ¡  |  |j	¡ qmtdƒD ]}| ¡  q¤t t¡ |  dtˆ ¡ | ¡  | ¡  | ¡  |  ‡ fdd„d¡ |  |¡ d S )Nr   rs  r–   Trƒ  c                      ó   t ˆ ƒS r   ©rj   r   ©rÜ  r   r   Ú<lambda>£  ó    z0_TestCondition.test_notify_all.<locals>.<lambda>)rä  rÓ  rí   r   rg  r  r   r›   rû   rœ   rÁ   r*  rÅ  rd   rj   rã  rJ   r²   rê   Ú
notify_allrÆ  rÞ  ©rG   rÚ  rÛ  rð   r    rN   r   ré  r   Útest_notify_allj  sP   


ÿ
ÿ




z_TestCondition.test_notify_allc                    sP  |   ¡ }|  d¡}|  d¡‰ tdƒD ]2}| j| j||ˆ fd}d|_| ¡  |  |j¡ t	j
| j||ˆ fd}d|_| ¡  |  |j¡ qtdƒD ]}| ¡  qIt 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   rs  r–   Trƒ  r´   )Únc                      rç  r   rè  r   ré  r   r   rê  Ç  rë  z._TestCondition.test_notify_n.<locals>.<lambda>rˆ  c                      rç  r   rè  r   ré  r   r   rê  Î  rë  )rä  rÓ  rí   r   rg  r   r›   rû   rœ   rÁ   r*  rÅ  rJ   r²   rê   rd   rj   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ä  rC   r-   rÅ  r  rÆ  ra   r_   rF   )rG   rÚ  r-   rc   r   r   r   r©  Ú  s   
z_TestCondition.test_timeoutc                    sr   |- dˆ _ | ¡  | ‡ fdd„¡}|rˆ j dkr't d¡ W d   ƒ d S W d   ƒ d S 1 s2w   Y  d S )Nr   c                      ó
   ˆ j dkS ©Nrˆ  ©rb   r   ©Ústater   r   rê  è  ó   
 z0_TestCondition._test_waitfor_f.<locals>.<lambda>rˆ  rY   )rb   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 s=w   Y  t
dƒD ]$}t d	¡ | ˆ  j	d
7  _	| ¡  W d   ƒ qF1 sew   Y  qFt|ƒ |  |jd¡ d S )Nrð   r:   r–   Tc                      rñ  ©Nr   ró  r   rô  r   r   rê  ÷  rö  z-_TestCondition.test_waitfor.<locals>.<lambda>r   rˆ  r
  rY   )rä  r   r   rø  r   r›   r÷  r   ra   rb   rí   rJ   r²   rå  r!   r‡   )rG   rÚ  r    rò   rð   r   rô  r   Útest_waitforì  s$   
ý

þz_TestCondition.test_waitforc                    sº   |  ¡  |M d}t ¡ }|j‡ fdd„|d}t ¡ | }|s;|d |  k r.|d k rKn nd|_W d   ƒ d S W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sVw   Y  d S )Nr)   c                      rñ  rò  ró  r   rô  r   r   rê  
  rö  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r¨   g333333ã?rõ   T)rÆ  rJ   rK   r÷  rb   )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 ]$}t d¡ | | jd	7  _| ¡  W d   ƒ q61 sUw   Y  q6t|ƒ |  |j¡ d S )
Nrð   r   Fr–   Tr¨   rs  r
  rY   )rä  r   rÓ  r   rý  r   r›   r   rÅ  r   r­   rí   rJ   r²   rb   rå  r!   )rG   rÚ  rõ  rû  rÑ  r    rð   r   r   r   Útest_waitfor_timeout  s$   

ÿ

þz#_TestCondition.test_waitfor_timeoutc                 C   sT   | |  ¡  W d   ƒ n1 sw   Y  t d¡ |d ur(t |tj¡ d S d S rX   )rå  rJ   r²   r;   rã   rØ   rH  )r“   rt   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rJ|  t|jd¡ | ¡  W d   ƒ d S 1 sYw   Y  d S )Nr+   r   r)   r–   é<   )r   ÚProcessesMixinrþ   r  r;   r†   rä  r   r-   r   rÿ  r›   r   rù   ÚKeyboardInterruptrœ   )rG   r’   rt   r    r   r   r   Útest_wait_result0  s   

"õz_TestCondition.test_wait_resultr   )rQ   rR   rS   rM  rg  rÞ  rã  ræ  rî  rð  r©  rø  r?   rN  ÚHAS_SHAREDCTYPESrú  rý  rþ  rÿ  r  r   r   r   r   rÙ    s(    ->2	






rÙ  c                   @   ó    e Zd Zedd„ ƒZdd„ ZdS )Ú
_TestEventc                 C   s   t  t¡ | ¡  d S r   )rJ   r²   rŽ  rü   rö   r   r   r   Ú_test_eventG  r@  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¸   rC   r-   ra   r,  r_   rF   r  rü   r(  r   r  r   r›   rœ   )rG   r÷   r-   r    r   r   r   Ú
test_eventL  s&   
z_TestEvent.test_eventN)rQ   rR   rS   rM  r  r  r   r   r   r   r  E  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)rG   ÚwrapperrÉ  r   r   r   rH   z  s   z_DummyList.__init__c                 C   s"   |\| _ | _| j  ¡  d¡| _d S )Nrð   )Ú_wrapperÚ_lockÚcreate_memoryviewÚcastr  )rG   rõ  r   r   r   r  €  s   z_DummyList.__setstate__c                 C   s   | j | jfS r   )r  r  rl   r   r   r   Ú__getstate__„  rÕ   z_DummyList.__getstate__c                 C   s>   | j  | jd  d7  < W d   ƒ d S 1 sw   Y  d S ©Nr   rY   ©r  r  )rG   Ú_r   r   r   rñ   ‡  s   "ÿz_DummyList.appendc                 C   s4   | j  | jd W  d   ƒ S 1 sw   Y  d S rù  r  rl   r   r   r   Ú__len__‹  s   $ÿz_DummyList.__len__N)rQ   rR   rS   rH   r  r  rñ   r  r   r   r   r   r	  x  s    r	  c                   C   rÈ   )Nr
  rÊ   r   r   r   r   Ú_wait  ru   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|_| ¡  | |¡ q%dd„ }	t | |	|¡| _dS )z¹
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        rŠ   Tc                 S   s   | D ]}|  ¡  qd S r   )rœ   )rW   r    r   r   r   Úfinalize®  s   
ÿz Bunch.__init__.<locals>.finalizeN)rg  rL   rï  Ú	DummyListÚstartedÚfinishedr¸   Ú	_can_exitrü   rí   r   Útaskr   r›   rñ   r  r  Ú
_finalizer)
rG   Ú	namespacerg  rL   rï  Zwait_before_exitrW   rð   r    r  r   r   r   rH   ˜  s    



zBunch.__init__c              	   C   sZ   t  ¡ }| j |¡ z| j| jŽ  W | j |¡ | j d¡ d S | j |¡ | j d¡ w )Né   )	r;   r†   r  rñ   rg  rL   r  r   r-   ©rG   r’   r   r   r   r!  ´  s   ÿz
Bunch.taskc                 C   ó.   t | jƒ| jk rtƒ  t | jƒ| jk sd S d S r   )r„   r  rï  r  rl   r   r   r   Úwait_for_started¾  ó   ÿzBunch.wait_for_startedc                 C   r&  r   )r„   r  rï  r  rl   r   r   r   Úwait_for_finishedÂ  r(  zBunch.wait_for_finishedc                 C   s   | j  ¡  d S r   )r   rü   rl   r   r   r   Ú	do_finishÆ  ó   zBunch.do_finishc                 C   s   |   ¡  d S r   )r"  rl   r   r   r   r   É  rÕ   zBunch.closeNrt  )
rQ   rR   rS   r·  rH   r!  r'  r)  r*  r   r   r   r   r   r  ”  s    

r  c                   @   rB   )Ú
AppendTruec                 C   s
   || _ d S r   )r›  )rG   r›  r   r   r   rH   Î  r   zAppendTrue.__init__c                 C   s   | j  d¡ d S r¶  )r›  rñ   rl   r   r   r   rO   Ð  ó   zAppendTrue.__call__NrP   r   r   r   r   r,  Í  ó    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.
    rq   g      >@c                 C   s   | j | j| jd| _d S )Nr¨   )ÚBarrierr  ÚdefaultTimeoutÚbarrierrl   r   r   r   ÚsetUpÛ  s   z_TestBarrier.setUpc                 C   s   | j  ¡  d | _ d S r   )r2  Úabortrl   r   r   r   ÚtearDownÞ  s   

z_TestBarrier.tearDownc                 C   s(   | j dkrg S | j dkr| j ¡ S tƒ S )NrW   rV   )rz   rV   r¼   r	  rl   r   r   r   r  â  s
   


z_TestBarrier.DummyListc                 C   s>   t | ||| jd ƒ}z||Ž  | ¡  W | ¡  d S | ¡  w rX   )r  r  r)  r   )rG   rg  rL   r^   r   r   r   Úrun_threadsê  s
   
z_TestBarrier.run_threadsc                 C   s\   |j }t|ƒD ]}|d  d¡ | ¡  |d  d¡ | ¡  qzW d S  ty-   Y d S w )Nr   TrY   )Úpartiesrí   rñ   r-   r`   )r“   r2  Úresultsrï  Úmrð   r   r   r   Ú	multipassò  s   
ÿz_TestBarrier.multipassrY   c                 C   s*   |   ¡ |   ¡ g}|  | j| j||f¡ dS )z;
        Test that a barrier is passed in lockstep
        N)r  r6  r:  r2  )rG   Úpassesr8  r   r   r   Útest_barrier  s   z_TestBarrier.test_barrierc                 C   r   )zC
        Test that a barrier works for 10 consecutive runs
        rÖ   N)r<  rl   r   r   r   Útest_barrier_10
  s   
z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r-   rr   )r“   r2  r   rc   r   r   r   Ú_test_wait_return_f  ó   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                    r  r   r  r  r   r   r   r    r  z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rY   N)	r   r6  r>  r2  rí   r  ra   Úcountr   ©rG   r8  r   r   r   Útest_wait_return  s
   z_TestBarrier.test_wait_returnc                 C   s   |  ¡  t|ƒdkrt‚d S rX   )r-   r„   rÑ   )r“   r2  r8  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
        )r4  rY   N)r  r0  r  r,  r6  rC  ra   r„   )rG   r8  r2  r   r   r   Útest_action%  s   z_TestBarrier.test_actionc                 C   sn   z|  ¡ }|| jd krt‚|  ¡  | d¡ W d S  tjy)   | d¡ Y d S  ty6   | ¡  Y d S w ©Nr´   T)r-   r  rÑ   rñ   rÁ   ÚBrokenBarrierErrorr4  )r“   r2  Úresults1Úresults2rð   r   r   r   Ú_test_abort_f.  s   ÿz_TestBarrier._test_abort_fc                 C   s^   |   ¡ }|   ¡ }|  | j| j||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  | jj¡ dS )zK
        Test that an abort will put the barrier in a broken state
        r   rY   N)	r  r6  rI  r2  ra   r„   r  r   Úbroken)rG   rG  rH  r   r   r   Ú
test_abort;  s   
ÿz_TestBarrier.test_abortc                 C   s–   |  ¡ }|| jd kr%|j| jd k r t d¡ |j| jd k s| ¡  nz|  ¡  | d¡ W n tjy?   | d¡ Y nw |  ¡  | d¡ d S )Nr´   rY   r  T)	r-   r  Ú	n_waitingrJ   r²   Úresetrñ   rÁ   rF  )r“   r2  rG  rH  Úresults3rð   r   r   r   Ú_test_reset_fG  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   rY   N)r  r6  rO  r2  ra   r„   r  )rG   rG  rH  rN  r   r   r   Ú
test_resetY  s   ÿz_TestBarrier.test_resetc                 C   s    z|  ¡ }|| jd krt‚|  ¡  | d¡ W n tjy'   | d¡ Y n ty3   | ¡  Y nw |  ¡ | jd krA| ¡  |  ¡  |  ¡  | d¡ d S rE  )r-   r  rÑ   rñ   rÁ   rF  r4  rM  )r“   r2  Úbarrier2rG  rH  rN  rð   r   r   r   Ú_test_abort_and_reset_ff  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   rY   N)r  r0  r  r6  rR  r2  ra   r„   )rG   rG  rH  rN  rQ  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 d S  tjy(   | d¡ Y d S w )Nr´   ç      ð?r"  T)r-   r  rJ   r²   rÁ   rF  rñ   ©r“   r2  r8  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  r6  rV  r2  ra   r„   r7  rA  r   r   r   r©  –  s   z_TestBarrier.test_timeoutc                 C   sT   |  | j¡}|| jd krt d¡ z|  ¡  W d S  tjy)   | d¡ Y d S w )Nr´   rT  T)r-   r1  r  rJ   r²   rÁ   rF  rñ   rU  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)r0  r  r  r6  rW  ra   r„   r7  )rG   r2  r8  r   r   r   Útest_default_timeout©  s   z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rX   )r0  r-   )rG   r^   r   r   r   Útest_single_thread²  s   
z_TestBarrier.test_single_threadc              	   C   sH   t |ƒD ]}| ¡  | | |¡ W d   ƒ q1 sw   Y  qd S r   )rí   r-   r¦   )r“   r2  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 ]}| j| j| j	|||fd}| 
¡  |  |j¡ q t|ƒD ]}t| jƒD ]
}|  | ¡ |¡ qEq>d S )NrV   ry   éè  Fr–   )rz   r{   r|   rÄ  r™   rí   r  r   r[  r2  r›   rû   rœ   ra   r   )rG   r;  rÉ  rZ  rR  Újr    rð   r   r   r   Útest_thousand¾  s    
ÿÿÿz_TestBarrier.test_thousandN)rY   )rQ   rR   rS   r·  r  r1  r3  r5  r  r6  rM  r:  r<  r=  r>  rB  rC  rD  rI  rK  rO  rP  rR  rS  rV  r©  rW  rX  rY  r[  r^  r   r   r   r   r/  Ô  sJ    




	






	
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ÿÿÿéê   )rs   ì        ì        rt   ÚxÚyc                 C   ó   t s	|  d¡ d S d S ©Nz%requires multiprocessing.sharedctypes©r  r{   rl   r   r   r   r3  Þ  ó   ÿz_TestValue.setUpc                 C   s$   t || jƒD ]	\}}|d |_qd S rÕ  )ÚzipÚcodes_valuesrb   )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 ¡ qEd S )Nc                    ó   g | ]\}}}ˆ   ||¡‘qS r   )ÚRawValue©r  Úcoderb   r  rl   r   r   r  ê  ó    ÿz)_TestValue.test_value.<locals>.<listcomp>c                    rp  r   )r   rr  rl   r   r   r  í  rt  rY   r–   Tr´   )	rl  rk  ra   rb   r   rŽ   r   r›   rœ   )rG   Úrawrm  rn  ro  r-  r   rl   r   Ú
test_valueè  s    
ÿ
ÿÿz_TestValue.test_valuec                 C   ó   | j dd d S ©NT)ru  )rv  rl   r   r   r   Útest_rawvalueû  r-  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ð   rq   ©rÉ  FÚget_lockÚget_objZnavalue)
r   r{  r|  rÄ  ra   r   r×   rù   r=   rq  )rG   Zval1Úlock1Úobj1Zval2Úlock2Úobj2rÉ  Zval3Úlock3Úobj3Úarr4Úarr5r   r   r   Útest_getobj_getlockþ  s$   z_TestValue.test_getobj_getlockNrt  )rQ   rR   rS   rh   r   rl  r3  rM  rŽ   rv  ry  r…  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 rX   )rí   r„   )r“   Úseqrð   r   r   r   rg    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ð   rs  r´   r‰  )rY   r´   rs  rˆ  rˆ  ru  r–   T)ÚRawArrayÚArrayra   r„   r¼   Úarrayrg  r   r   r›   rœ   )rG   ru  r‡  Úarrr    r   r   r   Ú
test_array!  s   $$
z_TestArray.test_arrayc                 C   sr   d}t dƒD ]0}|  d|¡}|  t|ƒ|¡ |  t|ƒdg| ¡ t dƒ|d d …< |  t|ƒtt dƒƒ¡ ~qd S )NrÖ   rs  rð   r   )rí   r‹  ra   r„   r¼   )rG   Úsizer  r  r   r   r   Útest_array_from_size:  s   úz_TestArray.test_array_from_sizec                 C   rw  rx  )rŽ  rl   r   r   r   Útest_rawarrayI  rJ  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Ö   rz  Fr{  r|  Znotalock)r‹  r¼   rí   r{  r|  rÄ  ra   r   r×   rù   r=   rŠ  )rG   Zarr1r}  r~  Zarr2r  r€  rÉ  Zarr3r  r‚  rƒ  r„  r   r   r   Útest_getobj_getlock_objM  s(   ÿz"_TestArray.test_getobj_getlock_objrt  )rQ   rR   rS   rh   rM  rg  r?   ÚskipIfr6   rŽ  r  r‘  r’  r   r   r   r   r†    s    


r†  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©rV   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Ö   rq   r´   )r´   rs  rˆ  )
r   rY   r´   rs  rˆ  r   rY   r´   rs  rˆ  rƒ  )r   rY   r´   rs  rˆ  r   rY   r´   rs  rˆ  rq   rƒ  c                 S   ó   g | ]}|d d … ‘qS r   r   )r  Úelementr   r   r   r  †  ó    z-_TestContainers.test_list.<locals>.<listcomp>)
r   rY   r´   rs  rˆ  rq   rƒ  r‰  ru  é	   r¶   r   )r   rY   r´   rs  rˆ  rq   rƒ  r‰  ru  r™  r¶   )r¼   rí   ra   Úextendrñ   )rG   r]   r^   r`  r¿   rg  r   r   r   Ú	test_listo  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í   rT  ra   Únext)rG   r]   Ú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¢¡ q7ˆ  |d
  ¡ d¡ ˆ  t|d
 ƒd¡ tdddƒD ]}ˆ  t|| ƒd¡ qb~ˆ   ¡ }| |¡ ~d S )Nc                    s   g | ]	}ˆ   td ƒ¡‘qS )rs  )r¼   rí   )r  Z_irl   r   r   r  ™  ó    z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rs  c                 S   r–  r   r   )r  Úinnerr   r   r   r  š  r˜  )r   rY   r´   é7   r   r:   )r   rY   r¡  rY   r´   )r¼   rí   ra   Úpopr„   rñ   )rG   r]   rð   r^   r   rl   r   Útest_list_proxy_in_list˜  s    
z'_TestContainers.test_list_proxy_in_listc                 C   sž   |   ¡ }ttddƒƒ}|D ]}t|ƒ||< q|  | ¡ t dd„ |D ƒƒ¡ |  t| ¡ ƒ|¡ |  t| ¡ ƒdd„ |D ƒ¡ |  t| 	¡ ƒdd„ |D ƒ¡ d S )NéA   éF   c                 s   s    | ]	}|t |ƒfV  qd S r   ©Úchrr  r   r   r   Ú	<genexpr>±  s   € z,_TestContainers.test_dict.<locals>.<genexpr>c                 S   ó   g | ]}t |ƒ‘qS r   r¦  r  r   r   r   r  ³  r  z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |ƒf‘qS r   r¦  r  r   r   r   r  ´  r˜  )
Údictr¼   rí   r§  ra   r   ÚsortedÚkeysrm  r/  )rG   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 )Nr¤  r¥  )
rª  r¼   rí   r§  rT  ra   r(  rù   rÑ   rœ  )rG   r`  r­  rð   r  r   r   r   Útest_dict_iter¶  s   z_TestContainers.test_dict_iterc                 C   sî  | j ddd}| j ddd}| j ||d}|  |d d¡ |  |d	 d d¡ d
|d	 d< |  |d d
¡ |  |d	 d d
¡ d|d	 d< |  |d d¡ |  |d	 d d¡ ~~|  |d d d¡ d|d	 d< |  |d	 d d¡ |d }|d	 }d|d< |  |d d¡ |  |d	 d d¡ | ¡  |  t|ƒd¡ |  |d d¡ |  |d d¡ |  ||g¡}d|d d< |  |d d¡ |  |d d d¡ ~~|  |d d d¡ |  ddg|g¡}|  |d t¡ |  |d d d d¡ d S )Nr´   rˆ  )ÚferretsÚhamstersrÖ   rs  )ÚwaterÚfeed)ÚpetsÚsuppliesr²  rµ  rq   Zblanketsr‰  r´  r°  é   r   r±  rY   ZmarmotséX   éc   r:   r³  )rª  ra   r(  r„   r¼   r‚   )rG   r´  rµ  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   rr   ra   r¾   rª  r\   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_hiddenra   rw  r   r×   )rG   rï  r   r   r   Útest_namespaceû  s   z_TestContainers.test_namespaceN)rQ   rR   rS   rh   r›  rž  r£  r®  r¯  rº  r½  rÂ  r   r   r   r   r”  k  s    

.
r”  r.   c                 C   s   t  |¡ | |  S r   rÊ   )re  r-   r   r   r   Úsqr
	  s   
rÃ  c                 C   s   | | S r   r   )re  rf  r   r   r   Úmul	  rg   rÄ  c                 C   s   t  | ¡ tdd ƒ‚)Nre  i   )rJ   r²   r>   r,   r   r   r   Úraise_large_valuerror	  r&  rÅ  c                 C   ó   | S r   r   ©re  r   r   r   Úidentity	  r«  rÈ  c                   @   r²  )ÚCountedObjectr   c                 C   s   |  j d7  _ t | ¡S rX   )Ún_instancesr®  Ú__new__rË   r   r   r   rË  	  s   
zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rX   )r»   rÊ  rl   r   r   r   Ú__del__	  s   zCountedObject.__del__N)rQ   rR   rS   rÊ  rË  rÌ  r   r   r   r   rÉ  	  s    rÉ  c                   @   ó   e Zd ZdS )ÚSayWhenErrorN©rQ   rR   rS   r   r   r   r   rÎ  "	  s    rÎ  c                 c   s:    |dkr	t dƒ‚t| ƒD ]}||krt dƒ‚|V  qd S )Nr:   zSomebody said when)rÎ  rí   )ÚtotalZwhenrð   r   r   r   Úexception_throwing_generator$	  s   €ýrÑ  c                       s  e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zed+d,„ ƒZd-d.„ Zed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z ‡  Z!S );Ú	_TestPoolc                    s   t ƒ  ¡  |  d¡| _d S rò  )ÚsuperÚ
setUpClassÚPoolÚpoolrË   ©Ú	__class__r   r   rÔ  /	  s   
z_TestPool.setUpClassc                    s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S r   )rÖ  r¯   rœ   rÓ  ÚtearDownClassrË   r×  r   r   rÙ  4	  s   

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rq   rq   r   re  rs  rÇ  )rÖ  Úapplyra   rÃ  )rG   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Ö  Úmapra   rÃ  r¼   rí   )rG   Zpmapr   r   r   Útest_map@	  s
   ,ÿz_TestPool.test_mapc                 C   s€   | j j}tttdƒtdddƒƒƒ}|  |t|ƒtt t|¡ƒ¡ tttdƒtdddƒƒƒ}|  |t|ddtt t|¡ƒ¡ d S )NrÖ   r™  r:   rÉ   r¸  r'  rÜ  )rÖ  Ústarmapr¼   rk  rí   ra   rÄ  Ú	itertools)rG   ZpsmapÚtuplesr   r   r   Útest_starmapF	  s   ÿÿz_TestPool.test_starmapc                 C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )NrÉ   r¸  r:   )
r¼   rk  rí   ra   rÖ  Zstarmap_asyncrÄ  r¾   rá  rà  )rG   râ  r   r   r   Útest_starmap_asyncO	  s   ÿz_TestPool.test_starmap_asyncc              	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S rÝ  )ra   rÖ  Ú	map_asyncrÃ  r¼   rí   r¾   rÞ  rl   r   r   r   Útest_map_asyncT	  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 )NrV   Ú1)ÚcallbackÚerror_callbackrY   r   r]   r´   )rz   rV   r¼   rÖ  rå  rç   rñ   r-   ra   r„   r‚   r>   )rG   Z	call_argsr   r   r   Útest_map_async_callbacksX	  s   þþz"_TestPool.test_map_async_callbacksc                 C   sr   | j dkr|  d | j ¡¡ G dd„ dtƒ}|  t¡ | j t|ƒ gd ¡ W d   ƒ d S 1 s2w   Y  d S )NrW   ry   c                   @   rm   )z*_TestPool.test_map_unplicklable.<locals>.Ac                 S   re   )Nzcannot picklerÐ   rl   r   r   r   rf   j	  rg   z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr¬  r   r   r   r   ÚAi	  rv   rë  rÖ   )	rz   r{   r|   r®  rù   rÑ   rÖ  rÞ  rÃ  )rG   rë  r   r   r   Útest_map_unplicklablee	  s   
"ÿz_TestPool.test_map_unplicklablec                 C   sB   z| j jtg ddjtd W d S  tjy    |  d¡ Y d S w )NrY   rÜ  r¨   z2pool.map_async with chunksize stalled on null list)rÖ  rå  rÃ  r¾   r  r   ÚTimeoutErrorr¤  rl   r   r   r   Útest_map_chunksizeo	  s
    ÿz_TestPool.test_map_chunksizec                 C   sh  | j dkr|  d | j ¡¡ |  t¡ | j ttddƒd¡ W d   ƒ n1 s)w   Y  |  t¡ | j ttddƒd¡ W d   ƒ n1 sIw   Y  |  t¡ | j ttddƒd¡ W d   ƒ n1 siw   Y  G dd„ dƒ}|  t¡ | j t|ƒ d¡ W d   ƒ n1 sŽw   Y  |  t¡ | j t|ƒ d¡ W d   ƒ d S 1 s­w   Y  d S )	NrV   ry   rY   r:   rÖ   rs  c                   @   rÂ  )zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                 S   rÆ  r   r   rl   r   r   r   Ú__iter__„	  r«  zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c                 S   rª  r   )rÎ  rl   r   r   r   Ú__next__†	  r«  zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c                 S   ó   dS rX   r   rl   r   r   r   r  ˆ	  r«  zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rQ   rR   rS   rï  rð  r  r   r   r   r   ÚSpecialIterableƒ	  ó    rò  )	rz   r{   r|   rù   rÎ  rÖ  rÞ  rÃ  rÑ  )rG   rò  r   r   r   Ú"test_map_handle_iterable_exceptionu	  s$   
ÿÿÿÿ"ÿz,_TestPool.test_map_handle_iterable_exceptionc                 C   s<   | j  tdtf¡}t|jƒ}|  |ƒ d¡ |  |jt¡ d S )Nr‰  é1   )	rÖ  Úapply_asyncrÃ  r  rC   r¾   ra   r_   rF   ©rG   rc   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 )Nrƒ  rT  r¨   )rÖ  rö  rÃ  rŽ  rC   r¾   rù   r   rí  r_   rF   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|ƒ|| ¡ q+|  t	|j
¡ | j jtttdƒƒdd}tdƒD ]}|  t|ƒ|| ¡ qP|  t	|j
¡ d S ©NrÖ   r\  rÉ   rÜ  )rÖ  ÚimaprÃ  r¼   rí   ra   rÞ  rœ  rù   ÚStopIterationrð  ©rG   r  rð   r   r   r   Ú	test_imap›	  s   "z_TestPool.test_imapc                 C   s:  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ qA|  t|j	¡ | j ttddƒd	¡}t
d
ƒD ]}|  t|ƒ|| ¡ qd|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ q‡|  t|j	¡ d S )NrV   ry   rY   r:   rÖ   rs  r'  r‰  r´   rƒ  rˆ  )rz   r{   r|   rÖ  rû  rÃ  rÑ  rù   rÎ  rð  rí   ra   rœ  rý  r   r   r   Ú#test_imap_handle_iterable_exception©	  s$   
z-_TestPool.test_imap_handle_iterable_exceptionc              	   C   sx   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j jtttdƒƒdd}|  t|ƒtttttdƒƒƒƒ¡ d S rú  )rÖ  Úimap_unorderedrÃ  r¼   rí   ra   r«  rÞ  )rG   r  r   r   r   Útest_imap_unorderedÃ	  s   "&z_TestPool.test_imap_unorderedc                 C   sn  | 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|ƒ}|  ||¡ | |¡ qRW d   ƒ n1 snw   Y  | j ttddƒd	¡}t
ttt
tdƒƒƒƒ}|  t¡ tdƒD ]}t|ƒ}|  ||¡ | |¡ q“W d   ƒ d S 1 s°w   Y  d S )
NrV   ry   rY   r:   rÖ   rs  r'  r‰  r´   )rz   r{   r|   rÖ  r   rÃ  rÑ  rù   rÎ  rð  r¼   rÞ  rí   rœ  r½   r=  )rG   r  Zexpected_valuesrð   rb   r   r   r   Ú-test_imap_unordered_handle_iterable_exceptionÊ	  sH   
þþþýþþý"ÿz7_TestPool.test_imap_unordered_handle_iterable_exceptionc                 C   s†   | j dkrtnt}|  || jd¡ |  || jd¡ | j dkrA|  d¡}z|  dt|jƒ¡ W | ¡  | 	¡  d S | ¡  | 	¡  w d S )NrV   r:   r   rs  )
rz   ÚRemoteErrorr>   rù   rÕ  ra   r„   Ú_poolr   rœ   )rG   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  ÿ	  ó    z,_TestPool.test_terminate.<locals>.<listcomp>i'  rY   rÜ  rC  )
rÖ  rå  rJ   r²   rí   r¯   rC   rœ   Ú
assertLessrF   )rG   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 rX   )rÕ  ra   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rDttdƒƒ}dd„ |D ƒ}|  d¡}| t|¡}|  | ¡ |¡ W d   ƒ n1 s0w   Y  | ¡  |  	t
|jt|¡ d S d S )NrU   rÖ   c                 S   r©  r   )rÃ  r  r   r   r   r  
  r  z*_TestPool.test_context.<locals>.<listcomp>r´   )rz   r¼   rí   rÕ  rå  rÃ  ra   r¾   rœ   rù   r>   )rG   ÚLró   r    Úrr   r   r   Útest_context
  s   
þùz_TestPool.test_contextc                 C   re   )Nr»  rÐ   rË   r   r   r   Ú_test_traceback
  ó   z_TestPool._test_tracebackc                 C   sÊ  | j dkrã|  d¡*}z| | j¡ W n ty' } z|}W Y d }~n
d }~ww |  d¡ W d   ƒ n1 s7w   Y  | ¡  |  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ tj ¡ }z|‚ t	y{   tjt ¡ Ž  Y nw W d   ƒ n1 s†w   Y  |  d| ¡ ¡ |  d¡=}z| ttddƒd¡ W n ty¹ } z|}W Y d }~n
d }~ww |  d¡ |  t|ƒt¡ |  |jd ¡ W d   ƒ n1 sØw   Y  | ¡  d S d S )NrU   rY   zexpected RuntimeError)r»  z&raise RuntimeError(123) # some commentr:   zexpected SayWhenError)rz   rÕ  rÚ  r  Ú	Exceptionr¤  rœ   r  r»   rÑ   ra   rL   Ú	__cause__r   rÖ  ZRemoteTracebackr½   Útbr¯  r   r°  rþ   Ú
excepthookÚexc_infoÚgetvaluerÞ  rÃ  rÑ  rÎ  )rG   r    r¿   ÚexcÚcauseÚf1r   r   r   Útest_traceback!
  sR   
€ÿ
€úÿüÿ€ÿ
ø	ßz_TestPool.test_tracebackc                 C   re   )Nr¿  rÐ   rË   r   r   r   Ú_test_wrapped_exceptionG
  r  z!_TestPool._test_wrapped_exceptionc              	   C   sl   |   d¡#}|  t¡ | | j¡ W d   ƒ n1 sw   Y  W d   ƒ n1 s+w   Y  | ¡  d S rX   )rÕ  rù   rÑ   rÚ  r  rœ   rë   r   r   r   Útest_wrapped_exceptionK
  s   ÿ€ÿz _TestPool.test_wrapped_exceptionc                 C   sÀ   t  ¡ }|  t¡C |  d¡.}z| tddg¡ W t  d¡ | ¡  | 	¡  nt  d¡ | ¡  | 	¡  w W d   ƒ n1 s@w   Y  W d   ƒ n1 sOw   Y  |  
t  ¡ | d¡ d S )Nr´   r   rY   r"  gÍÌÌÌÌÌì?)rJ   rK   rù   r>   rÕ  rÞ  rÅ  r²   r   rœ   ÚassertGreater)rG   Zt_startr    r   r   r   Útest_map_no_failfastR
  s   


þú€ÿ
z_TestPool.test_map_no_failfastc                 C   sh   dd„ t dƒD ƒ}dd„ |D ƒ}| j t|¡ ~t t¡ |  tdd„ |D ƒƒd h¡ |  t	j
d¡ d S )Nc                 S   s   g | ]}t ƒ ‘qS r   )rÉ  r  r   r   r   r  i
  ó    z4_TestPool.test_release_task_refs.<locals>.<listcomp>rÖ   c                 S   s   g | ]}t  |¡‘qS r   )r  r  )r  Úor   r   r   r  j
  s    c                 s   s    | ]}|ƒ V  qd S r   r   )r  r  r   r   r   r¨  o
  ó   € z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )rí   rÖ  rÞ  rÈ  rJ   r²   rê   ra   rü   rÉ  rÊ  )rG   ZobjsZrefsr   r   r   Útest_release_task_refsf
  s   
z _TestPool.test_release_task_refsc              	   C   sœ   | j dkr
|  d¡ |  d¡}| W d   ƒ n1 sw   Y  |  t¡ | W d   ƒ n1 s4w   Y  W d   ƒ n1 sCw   Y  | ¡  d S )NrV   útest not applicable to managerrY   )rz   r{   rÕ  rù   r>   rœ   ©rG   rÖ  r   r   r   Ú
test_entert
  s   


ÿÿ€þz_TestPool.test_enterc                 C   sx   | j dkr
|  d¡ |  d¡}| ¡  | ¡  tjj|_t	 
dtf¡ d }t ¡  W d   ƒ d S 1 s5w   Y  d S )NrV   r   rY   z%unclosed running multiprocessing pool)rz   r{   rÕ  r¯   rœ   r   rÖ  ZRUNÚ_stater   Zcheck_warningsÚResourceWarningr   Ú
gc_collectr!  r   r   r   Útest_resource_warning„
  s   



ÿ
"ýz_TestPool.test_resource_warning)"rQ   rR   rS   rM  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Ò  -	  sD    	
$


&
rÒ  c                   C   re   )NÚkey)ÚKeyErrorr   r   r   r   Úraising”
  rg   r*  c                   C   s   dd„ S )Nc                   S   rñ  )Né*   r   r   r   r   r   rê  ˜
  ó    z%unpickleable_result.<locals>.<lambda>r   r   r   r   r   Úunpickleable_result—
  rg   r-  c                   @   r²  )Ú_TestPoolWorkerErrorsr[  c                    sj   t  d¡}d g‰ ‡ fdd„}|jt|d}|  t|j¡ |  ˆ d ¡ |  ˆ d t¡ | 	¡  | 
¡  d S )Nr´   c                    ó   | ˆ d< d S rù  r   ©r  ©Z
scratchpadr   r   Úerrback¡
  rÕ   z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback©ré  r   )r   rÕ  rö  r*  rù   r)  r¾   r   r‚   r   rœ   )rG   r    r2  rc   r   r1  r   Útest_async_error_callback
  s   
z/_TestPoolWorkerErrors.test_async_error_callbackc                    s    ddl m} t d¡}tdƒD ]6}d g‰ ‡ fdd„}|jt|d}|  ||j¡ ˆ d }|  	|¡ |  
ˆ d |¡ |  |j¡ |  |j¡ q| ¡  | ¡  d S )Nr   )ÚMaybeEncodingErrorr´   r'  c                    r/  rù  r   r0  r1  r   r   r2  ´
  rÕ   z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr3  )Úmultiprocessing.poolr5  r   rÕ  rí   rö  r-  rù   r¾   r   r‚   ZassertIsNotNoner  rb   r   rœ   )rG   r5  r    Z	iterationr2  rc   Úwrappedr   r1  r   Útest_unpickleable_result¬
  s   

z._TestPoolWorkerErrors.test_unpickleable_resultN)rQ   rR   rS   rh   r4  r8  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}|retdd	„ |jD ƒƒse|d
8 }t t¡ |retdd	„ |jD ƒƒrPdd„ |jD ƒ}|  d |¡ |  d |¡ |  t|ƒt|ƒ¡ | ¡  | ¡  d S )Nrs  rÖ   ©Úmaxtasksperchildc                 S   ó   g | ]}|j ‘qS r   ©r’   ©r  rj  r   r   r   r  È
  r  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rÉ   é2   c                 s   ó    | ]}|  ¡ V  qd S r   ©r€   r>  r   r   r   r¨  Ö
  ó   € zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rY   c                 S   r<  r   r=  r>  r   r   r   r  Ù
  r  )r   rÕ  ra   r„   r  rí   rñ   rö  rÃ  Ú	enumerater¾   Z_repopulate_poolÚallrJ   r²   rê   r¹   rÅ   r«  r   rœ   )	rG   r    Zorigworkerpidsr8  rð   r]  rc   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|ƒ¡ q'd S )Nrs  rY   r:  rƒ  g333333Ó?)r   rÕ  rí   rñ   rö  rÃ  r   rœ   rC  ra   r¾   )rG   r    r8  rð   r]  rc   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_okra   ©rG   Úcmdr   Úoutrh  r   r   r   Ú>test_worker_finalization_via_atexit_handler_of_multiprocessingï
  s   zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rQ   rR   rS   rh   rE  rF  rM  r   r   r   r   r9  Â
  s
    r9  )ÚBaseManagerÚ	BaseProxyr  c                   @   rÂ  )ÚFooBarc                 C   rñ  )Núf()r   rl   r   r   r   rg    r«  zFooBar.fc                 C   rª  r   )r>   rl   r   r   r   Úg
  r«  zFooBar.gc                 C   rñ  )Nú_h()r   rl   r   r   r   Ú_h  r«  z	FooBar._hN)rQ   rR   rS   rg  rR  rT  r   r   r   r   rP    ró  rP  c                  c   s    t dƒD ]} | |  V  qd S rÝ  )rí   )rð   r   r   r   Úbaz  s   €ÿrU  c                   @   r²  )ÚIteratorProxy)rð  c                 C   rÆ  r   r   rl   r   r   r   rï    r«  zIteratorProxy.__iter__c                 C   r   )Nrð  )Ú_callmethodrl   r   r   r   rð    r   zIteratorProxy.__next__N)rQ   rR   rS   Z	_exposed_rï  rð  r   r   r   r   rV    s    rV  c                   @   rÍ  )Ú	MyManagerNrÏ  r   r   r   r   rX    ó    rX  ÚFoo)ÚcallableÚBar)rg  rT  )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ù  )	rX  r›   ÚcommonÚshutdownr½   Ú_processr‡   rØ   rß   ©rG   rV   r   r   r   Útest_mymanager&  s
   
z_TestMyManager.test_mymanagerc                 C   sL   t ƒ }|  |¡ W d   ƒ n1 sw   Y  |  |jjdtj f¡ d S rù  )rX  r^  r½   r`  r‡   rØ   rß   ra  r   r   r   Útest_mymanager_context1  s   ÿz%_TestMyManager.test_mymanager_contextc                 C   sP   t ƒ }| ¡  | |  |¡ W d   ƒ n1 sw   Y  |  |jjd¡ d S rù  )rX  r›   r^  ra   r`  r‡   ra  r   r   r   Ú!test_mymanager_context_prestarted9  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                    ó   g | ]	}t ˆ |ƒr|‘qS r   ©r×   ©r  r%   )r¿  r   r   r  E  rŸ  z)_TestMyManager.common.<locals>.<listcomp>)rg  rR  rT  c                    re  r   rf  rg  )Úbarr   r   r  F  rŸ  rg  rR  rT  rQ  rS  c                 S   s   g | ]}|| ‘qS r   r   r  r   r   r   r  U  r  rÖ   )rZ  r\  rU  ra   rg  rù   r>   rR  rW  r  rT  r¼   rí   )rG   rV   rU  Zfoo_methodsZbar_methodsr   )rh  r¿  r   r^  @  s    "z_TestMyManager.commonN)rQ   rR   rS   rh   rb  rc  rd  r^  r   r   r   r   r]  "  s    r]  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queue]  r«  rj  c                   @   ó   e Zd ZdZdS )ÚQueueManagerz$manager class used by server processN©rQ   rR   rS   r·  r   r   r   r   rl  `  ó    rl  c                   @   rk  )ÚQueueManager2z@manager class which specifies the same interface as QueueManagerNrm  r   r   r   r   ro  d  rn  ro  Ú	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©Úaddressr~   Z
serializer)ro  Ú
SERIALIZERÚconnectrj  rr   Útuplerm  ©r“   ru  r~   rV   r   r   r   r   Ú_putteru  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   rt  r–   T)r;   Úurandomrl  r   ÚHOSTrv  r›   rû   r_  r   rz  ru  r   ro  rw  rj  ra   r¾   rò   rù   r  rr   rJ   r²   )rG   r~   rV   r    Zmanager2r   r   r   r   Útest_remote  s"   
ÿÿz_TestRemoteManager.test_remote)	rQ   rR   rS   rh   rm  rò   rM  rz  r~  r   r   r   r   rq  k  s    
	rq  Úmd5c                   @   r  )Ú_TestManagerRestartc                 C   s,   t ||td}| ¡  | ¡ }| d¡ d S )Nrt  rr  )rl  rv  rw  rj  rr   ry  r   r   r   rz  Ÿ  s   ÿz_TestManagerRestart._putterc              
   C   sF  t  d¡}ttjdf|td}z;| ¡ }|j}|j 	¡  | 
¡  | j| j|j|fd}| 
¡  | ¡  | ¡ }|  | ¡ d¡ ~W t|dƒrJ| ¡  nt|dƒrU| ¡  w w t||td}z| 
¡  |  |j¡ W d S  ty¢ } z,|jtjkry‚ t d¡ t||td}t|dƒr—|  |j¡ W Y d }~d S W Y d }~d S d }~ww )Nr{  r   rt  r–   rr  r_  rT  )r;   r|  rl  r   r}  rv  Z
get_serverru  Úlistenerr   r›   r   rz  rœ   rj  ra   r¾   r×   r_  rû   ÚOSErrorÚerrnoZ
EADDRINUSErJ   r²   )rG   r~   rV   ZsrvrÚaddrr    r   r¿   r   r   r   Útest_rapid_restart§  sN   
ÿ

€
ÿ
ÿÿ
ÿ
ÿ€øz&_TestManagerRestart.test_rapid_restartN)rQ   rR   rS   rM  rz  r…  r   r   r   r   r€  œ  s    
r€  Ú 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 )%Ú_TestConnectionrx   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )rT  Ú
recv_bytesÚSENTINELÚ
send_bytesr   )r“   rZ  Ú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r;|  
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 n tjy } z|  
|j|f¡ W Y d }~nd }~ww |  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)rY   rs  Nrr  rÖ   rð   rˆ  rU   r   rs  r‰  z(                                        zexpected BufferTooShort, got %sFr:   r)   ÚXi   )(r™   r   rŒ  r   r›   r   rŒ  r¼   rí   rz   ra   r»   Úfilenorç   r¦   r   rŠ  rˆ  r„   Úrecv_bytes_intoÚitemsizeÚ	bytearrayr   ÚBufferTooShortrL   r¤  rC   r¬   r_   rF   r  rJ   r²   r‰  r   ÚreadableÚwritablerù   ÚEOFErrorrœ   )rG   rZ  rR  r    r‡  r‹  Zlongmsgr  Úbufferró   rc   r¿   r¬   Zreally_big_msgr   r   r   Útest_connectionÝ  sz   
ÿ$ÿ€ÿ




z_TestConnection.test_connectionc                 C   s¨   | j dd\}}|  | d¡d ¡ |  | ¡ d¡ | jdkrR|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t|jd¡ |  t|j¡ |  t|j	¡ d S d S )NFr”   rY   rU   Tr´   )
r™   ra   r¦   r   rz   r“  r”  rù   r‚  r¬   )rG   ÚreaderÚwriterr   r   r   Útest_duplex_false,  s   
ùz!_TestConnection.test_duplex_falsec                 C   st   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  tdƒ}| |¡ |  | 	¡ |¡ | t
¡ | ¡  | ¡  d S )Nr–   Tr¶   )r™   r   rŒ  r   r›   r   r   rŠ  ra   rˆ  r‰  rœ   )rG   rZ  rR  r    r‹  r   r   r   Útest_spawn_close9  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 )NrU   ry   Úabcdefghijklmnopqrstuvwxyzrq   r‰  ru  é   é   r†  r   é   é   rY   r:   rˆ  )
rz   r{   r|   r   r™   rŠ  ra   rˆ  rù   r>   )rG   r‹  r]   r^   r   r   r   Útest_sendbytesN  s&   

z_TestConnection.test_sendbytesc              
   C   sF   zt  |¡ W dS  ty" } z|jtjkrW Y d }~dS ‚ d }~ww )NFT)r;   Úfstatr‚  rƒ  ÚEBADF)r“   rp  r¿   r   r   r   Ú_is_fd_assignedn  s   û€ýz_TestConnection._is_fd_assignedFc                 C   sd   |rt ddƒD ]}|  |¡st | ¡ |¡ qt |¡}tr%t |tj	¡}t 
||¡ t |¡ d S )Nr   r3   )rí   r¤  r;   Údup2rŽ  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerm  r¡  r   )r“   rZ  ÚdataZcreate_dummy_fdsrð   rp  r   r   r   Ú_writefdy  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	tj
¡ ttj
dƒ}| ¡ }tr=t |¡}t |||j¡ W d   ƒ n1 sOw   Y  | ¡  ttj
dƒ}|  | ¡ d¡ W d   ƒ d S 1 srw   Y  d S )	NrU   úonly makes sense with processesTr”   s   foor–   ÚwbÚrb)rz   r{   r™   r   rª  r   r›   rû   r   rb  ra  rd  rŽ  r§  Zget_osfhandler   Úsend_handler’   rœ   ra   re  )rG   rZ  rR  r    rg  rp  r   r   r   Útest_fd_transfer…  s"   


ü"ÿz _TestConnection.test_fd_transferr+   ú*test semantics don't make sense on Windowsr3   z)largest assignable fd number is too smallr¥  ztest needs os.dup2()c              
   C   s6  | j dkr
|  d¡ | jdd\}}| j| j|ddfd}d|_| ¡  |  tj	tj
¡ ttj
dƒ<}| ¡ }tdtƒD ]	}|  |¡sE qKq<|  d	¡ t ||¡ zt |||j¡ W t |¡ nt |¡ w W d   ƒ n1 sqw   Y  | ¡  ttj
d
ƒ}|  | ¡ d¡ W d   ƒ d S 1 s”w   Y  d S )NrU   r¬  Tr”   s   barr–   r­  r3   z2could not find an unassigned large file descriptorr®  )rz   r{   r™   r   rª  r   r›   rû   r   rb  ra  rd  rŽ  rí   ÚMAXFDr¤  r¤  r;   r¥  r   r¯  r’   r   rœ   ra   re  )rG   rZ  rR  r    rg  rp  Znewfdr   r   r   Útest_large_fd_transfer˜  s.   
	

ÿ
õ"ÿz&_TestConnection.test_large_fd_transferc                 C   s   t  | ¡ d¡ d S )Nó    )r;   r¡  rŽ  ©rG   rZ  r   r   r   Ú_send_data_without_fd¹  ó   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 )NrU   r¬  Tr”   r–   )rz   r{   r™   r   r¶  r   r›   rù   rÑ   r   r¦  rœ   ©rG   rZ  rR  r    r   r   r   Útest_missing_fd_transfer½  s   

z(_TestConnection.test_missing_fd_transferc              	   C   sÖ   |   ¡ \}}|8 |& | d¡ |  | ¡ d¡ | jdkr*|  |j¡ |  |j¡ W d   ƒ n1 s4w   Y  W d   ƒ n1 sCw   Y  | jdkri|  |j¡ |  |j¡ |  t	|j¡ |  t	|j¡ d S d S ©NéÁ  rU   )
r™   r¦   ra   r   rz   r   Úclosedr   rù   r‚  r\   r   r   r   r  Ì  s"   

€û€ 
üz_TestConnection.test_contextNrt  )rQ   rR   rS   rh   rM  rŒ  r—  rš  r›  r¡  r¤  rª  r?   rN  ÚHAS_REDUCTIONr°  r“  rþ   r  r²  r×   r;   r³  r¶  r¹  r  r   r   r   r   r‡  Ó  s>    
O 




ÿ
ÿÿ

r‡  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 ]}| j j|d}|  |j¡ |  t| j j|j|¡ qd S )N©Úfamily)Ú
connectionÚfamiliesÚListenerrû   r   rù   r‚  ru  )rG   rÀ  r¹  r   r   r   Útest_multiple_bindà  s   ÿýz _TestListener.test_multiple_bindc              
   C   sº   | j  ¡ @}| j  |j¡)}| ¡ }| d¡ |  | ¡ d¡ W d   ƒ n1 s*w   Y  W d   ƒ n1 s9w   Y  W d   ƒ n1 sHw   Y  | jdkr[|  	t
|j¡ d S d S rº  ©rÁ  rÃ  ÚClientru  Úacceptr¦   ra   r   rz   rù   r‚  )rG   r¹  rt   r`  r   r   r   r  ç  s   

þ€ÿ€ÿ
ÿz_TestListener.test_contextz"test needs abstract socket supportc              
   C   s¼   | j  d¡@}| j  |j¡)}| ¡ }| d¡ |  | ¡ d¡ W d   ƒ n1 s+w   Y  W d   ƒ n1 s:w   Y  W d   ƒ n1 sIw   Y  | jdkr\|  	t
|j¡ d S d S )Nz
 somethingr»  rU   rÅ  )rG   r  Úclientr`  r   r   r   Útest_abstract_socketñ  s   

þ€ÿ€ÿ
ÿz"_TestListener.test_abstract_socketN)rQ   rR   rS   rh   rÄ  r  r?   rN  r
   Úabstract_sockets_supportedrÉ  r   r   r   r   r¾  Ü  s    
ÿr¾  c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )Ú_TestListenerClientrx   c                 C   s"   | j  |¡}| d¡ | ¡  d S )Nr¶   )rÁ  rÆ  r¦   r   )r“   ru  rZ  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 )Nr¿  r–   Tr¶   )rÁ  rÂ  rÃ  r   rŽ   ru  r   r›   rÇ  ra   r   rœ   r   )rG   rÀ  r¹  r    rZ  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–   TrY   r¶   )rÁ  rÃ  r   rŽ   ru  r   r›   rJ   r²   rÇ  ra   r   r   rœ   )rG   r¹  r    rZ  r   r   r   Útest_issue14725  s   

z#_TestListenerClient.test_issue14725c                 C   sh   | j jD ]-}| j j|d}| j  |j¡}| ¡ }| d¡ |  | d¡¡ | 	¡  | 	¡  | 	¡  qd S )Nr¿  ó   hellorY   )
rÁ  rÂ  rÃ  rÆ  ru  rÇ  rŠ  r   r¬   r   )rG   Úfamr¹  rt   r]   r   r   r   Útest_issue16955#  s   

øz#_TestListenerClient.test_issue16955N)	rQ   rR   rS   rh   rM  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 )Ú	_TestPollrx   c                 C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFó    T)r™   ra   r¬   rŠ  r\   r   r   r   Útest_empty_string2  s
   
z_TestPoll.test_empty_stringc                 C   s*   |D ]}t  d¡ | |¡ q| ¡  d S ©Nr)   )rJ   r²   rŠ  r   )r“   rZ  Ústringsr   r   r   r   Ú_child_strings9  s   
z_TestPoll._child_stringsc                 C   sr   d}|   ¡ \}}| j| j||fd}| ¡  |D ]}tdƒD ]	}| d¡r' q(q| ¡ }|  ||¡ q| ¡  d S )N)rÎ  rÒ  ó   aó   brÒ  s   byerÒ  s   lopr–   éÈ   r
  )	r™   r   rÖ  r›   rí   r¬   rˆ  ra   rœ   )rG   rÕ  r]   r^   r    r   rð   re  r   r   r   Útest_strings@  s   
ÿz_TestPoll.test_stringsc                 C   ro   rp   )r¬   )r“   r
  r   r   r   Ú_child_boundariesO  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›   rJ   r²   rŠ  r   rœ   r½   rˆ  )rG   r
  rj  r    r	  r›  r   r   r   Útest_boundariesW  s   
z_TestPoll.test_boundariesc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nr×  rØ  ó   cd)rŠ  )r“   r^   r   r   r   Ú_child_dont_mergec  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×  rT  TrØ  rÝ  )r™   ra   r¬   r   rÞ  r›   rˆ  rœ   )rG   r]   r^   r    r   r   r   Útest_dont_mergei  s   z_TestPoll.test_dont_mergeN)rQ   rR   rS   rh   rÓ  rM  rÖ  rÚ  rÛ  rÜ  rÞ  rß  r   r   r   r   rÑ  .  s    


rÑ  r«  c                   @   sP   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
dS )Ú_TestPicklingConnectionsr[  c                 C   s   ddl m} |jtjd d S )Nr   )Úresource_sharerr¨   )r   rá  rY  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 )Nr¿  r   )rÁ  rÃ  r¦   ru  rÇ  r   ÚsocketÚcreate_serverr   r}  Úgetsocknamer   )r“   rZ  rÂ  rÏ  r¹  Únew_connr„  r   r   r   Ú	_listener‹  s   


z"_TestPicklingConnections._listenerc                 C   sx   t |jd ƒD ]\}}| j |¡}| | ¡ ¡ | ¡  q| ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S r   )
rT  r   rÁ  rÆ  r¦   rU  r   râ  rw  Úsendall)r“   rZ  ru  r‹  rÈ  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¡}	| 
¡ }
| |
|	f¡ | 
¡ }|  | 
¡ |	 ¡ ¡ q;| d ¡ tdƒ}	| 
¡ }
| |
|	f¡ | 
¡ }g }	 | 
d¡}|sq‡| |¡ qyd |¡}|  ||	 ¡ ¡ | ¡  | d ¡ | ¡  | ¡  | ¡  | ¡  d S )Nr–   TzThis connection uses family %sÚasciiz$This connection uses a normal socketrÉ   rÒ  )rÁ  rÂ  r™   r   ræ  r   r›   r   rè  r   r   r¦   ra   rU  r   rñ   rœ   )rG   rÂ  ZlconnZlconn0Zlprž   Zrconn0ZrprÏ  r‹  ru  rå  Úbufr   r   r   r   Útest_pickling­  sJ   


ü

z&_TestPicklingConnections.test_picklingc                 C   sD   |  ¡ }| d¡ | ¡  |  ¡ }|  ¡ }| |d ¡ | ¡  d S )Núall is wellr´   )r   r¦   r   )r“   rZ  rj  r
  r‹  r   r   r   Úchild_accessÛ  s   
z%_TestPicklingConnections.child_accessc                 C   s¾   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  | j dd\}}| |¡ | ¡  |  | ¡ d¡ | ¡  | j dd\}}| |¡ | ¡  | d¡ | ¡  |  | ¡ d¡ | 	¡  d S )Nr–   TFr”   rì  ZfoobarZfoobarfoobar)
r™   r   rí  r   r›   r   r¦   ra   r   rœ   )rG   rZ  rR  r    r
  rj  r   r   r   Útest_accessç  s"   


z$_TestPicklingConnections.test_accessN)rQ   rR   rS   rh   rM  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Ó  r3  r   r
  r  Ú_heapÚold_heapZHeaprl   r×  r   r   r3    s   
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )rñ  r   r
  r  rð  rÓ  r5  rl   r×  r   r   r5    ó   z_TestHeap.tearDownc              
   C   sb  d}d}g }t jjj}d|_t|ƒD ]&}tt dd¡d ƒ}t j |¡}| 	|¡ t
|ƒ|kr7t |¡}||= ~q|j¯ g }d}	d}
t|j ¡ ƒD ] }|D ]\}}}| 	|j |¡|||| df¡ |	|| 7 }	qNqJ|j ¡ D ]!\}}|D ]\}}| 	|j |¡|||| df¡ |
|| 7 }
qvqp|  |	|
 tdd	„ |jD ƒƒ¡ | ¡  tt
|ƒd ƒD ]5}|| d d
… \}}}||d  d d
… \}}}||krÝ|  ||j| j¡ |  |d¡ q®|  ||¡ q®W d   ƒ n1 sîw   Y  t |¡ |r| ¡  |sû|  |j|j¡ |  t
|jƒd¡ |  t
|jƒd¡ |  t
|jƒd|j¡ |  t
|jƒd¡ d S )Néˆ  r?  r   rY   r\  ÚfreeÚoccupiedc                 s   s    | ]}|j V  qd S r   ©r  )r  Úarenar   r   r   r¨  <  r  z&_TestHeap.test_heap.<locals>.<genexpr>rs  )r   r
  r  rð  Z_DISCARD_FREE_SPACE_LARGER_THANrí   rç   ÚrandomÚlognormvariaterñ   r„   Ú	randranger  r¼   Z_len_to_seqrm  Z_arenasÚindexZ_allocated_blocksr/  ra   ÚsumÚsortr  Úshuffler¢  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rG   Z
iterationsZ	maxblocksZblocksr
  rð   r  r^   rD  rô  rõ  r	  r÷  r›   rY  Zarena_blocksZnarenaZnstartZnstopr   r   r   Ú	test_heap  sj   


ÿýÿý
ÿ÷ê
"ÿ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¡}||_||_q%d S )NrÖ   ró  rY   )r  Ú	isenabledÚenablerû   ÚdisableÚget_thresholdÚset_thresholdrí   r   r
  r  Zbuddy)rG   Z
thresholdsrð   r]   r^   r   r   r   Útest_free_from_gcV  s   
ûz_TestHeap.test_free_from_gc)	rQ   rR   rS   rh   r3  r5  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 )Ú_Foore  rf  ÚzN)rQ   rR   rS   r6   r7   r8   Z_fields_r   r   r   r   r  p  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   rg  rh  ri  rl   r   r   r   r3  {  rj  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  < q0d S rÕ  )rb   re  rf  rí   r„   )r“   re  rf  r  r¿  r  Ú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 ¡ qv|  |jtdƒ¡ d S )Nrð   r‰  rz  gUUUUUUÕ?rc  rs  r´   r`  rÖ   rt   r'  r¶   r–   Té   gUUUUUUå?rd  rƒ  ç      @Z
hellohello)r   r7   r8   r  r‹  r¼   rí   r   rb   r   r
  r   r›   rœ   ra   r[   re  rf  )
rG   rÉ  re  rf  r  r¿  r  r	  r    rð   r   r   r   Útest_sharedctypesŠ  s&   
z#_TestSharedCTypes.test_sharedctypesc                 C   rw  )NTrz  )r  rl   r   r   r   Útest_synchronize¡  r-  z"_TestSharedCTypes.test_synchronizec                 C   sT   t dddƒ}t|ƒ}d|_d|_d|_|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr´   ç      @rc  r   )r  r   re  rf  r  ra   r[   )rG   r¿  rh  r   r   r   Ú	test_copy¤  s   z_TestSharedCTypes.test_copyNrt  )
rQ   rR   rS   rh   r3  rM  r
  r  r  r  r   r   r   r   r  w  s    


r  z&requires multiprocessing.shared_memoryc                   @   sˆ   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Ze	 
ejd
kd¡dd„ ƒZe	 
ejd
kd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_TestSharedMemoryr[  c                 C   s8   t | tƒrt | ¡}n| }||jd t|ƒ…< | ¡  d S r   )r   rw  r   ÚSharedMemoryrê  r„   r   )Zshmem_name_or_objZbinary_dataZ	local_smsr   r   r   Ú!_attach_existing_shmem_then_writeµ  s
   
z3_TestSharedMemory._attach_existing_shmem_then_writec                 C   s   |t t ¡ ƒ S r   )rw  r;   r†   )rG   Úprefixr   r   r   Ú_new_shm_name¾  s   z_TestSharedMemory._new_shm_namec              	      sz  |   d¡}tj|ddd}|  |j¡ |  |j|¡ |  |jd¡ |  t	|j
ƒ|j¡ |  |jt|ƒ¡ |  t|jƒt|ƒ¡ d|j
dd…< t |¡}t |¡}|  |j|j¡ |  t|j
dd… ƒt|j
dd… ƒd¡ 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¼w   Y  |  t¡ tjdd W d   ƒ n1 s×w   Y  tj d¡P}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 s6w   Y  tjr†|   d¡}tj|ddd}|  t¡, z|  |jd¡ t |¡}| ¡  | ¡  | ¡  W | ¡  n| ¡  w W d   ƒ n	1 sw   Y  |  t¡ tj|ddd}W d   ƒ n	1 sŸw   Y  tjrÁG dd„ dtjƒ}||ƒ}|  |j|j¡ | ¡  |  t¡ t d¡}| ¡  W d   ƒ n	1 sÛw   Y  | ¡  |  t¡ tjddd}W d   ƒ n	1 süw   Y  |  t¡ tjddd}W d   ƒ n	1 sw   Y  |  t¡ tjdd}W d   ƒ d S 1 s6w   Y  d S )NZtest01_tsmbTé   ©Úcreater  s   pickler   rƒ  r+  r'  rö  éþÿÿÿF©r  z,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc                    s   g | ]}ˆ | ‘qS r   r   rg  ©ZNAME_PREFIXr   r   r  ø  r  z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rY   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)rQ   rR   rS   r;   rn  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory-  ó    r  Ztest01_nottherer:   )r  r   r  rû   rb  ra   r%   r§  r  r„   rê  r½   rw  ÚpickleÚdumpsÚloadsrƒ   r   r  rù   r>   r?   ÚmockZpatchZ_SHM_NAME_PREFIXZside_effectÚ_nameZ
_USE_POSIXÚFileNotFoundErrorÚFileExistsError)rG   Z	name_tsmbÚsmsZpickled_smsZsms2Z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ª   


*

ÿÿÿï
ý

öýý	

þÿÿ$ÿ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–   rq   s   HELLO)r   r  rû   rb  r   r  r%   r   r›   rœ   ra   rƒ   rê  r   )rG   r&  r    r   r   r   Ú#test_shared_memory_across_processesG  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 s9w   Y  | ¡  d S rÝ  )r   ÚmanagersÚSharedMemoryManagerr›   ÚShareableListrí   r;   rã   r`  r’   rØ   rH  rù   r  r†   r_  )rG   ÚsmmÚslZsl2r   r   r   Ú4test_shared_memory_SharedMemoryServer_ignores_sigintc  s   
ÿ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()
        rG  )r¯  r   rH  rI  r   rJ  r   r   r   Ú>test_shared_memory_SharedMemoryManager_reuses_resource_tracker{  s   	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc                    s¦  t j ¡ ‰ |  t¡ ˆ jdd W d   ƒ n1 sw   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…w   Y  t j ¡ }| 	d¡}|jd	d}	|j
j}W d   ƒ n1 s©w   Y  tjdkrÑ|  t¡ tj	|d}
W d   ƒ d S 1 sÊw   Y  d S 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>rq   rÖ   c                    s   g | ]}ˆ j |d ‘qS )rö  )r  )r  r]  r1  r   r   r  –  r˜  r{  é€   é   r   ©r%   r+   Úhowdy)r   r*  r+  rù   r>   r  r›   rí   r   r,  Úshmr%   ra   r„   r§  rê  r_  rþ   r  r$  )rG   ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2r.  r6  Z	absent_slr   r1  r   Ú-test_shared_memory_SharedMemoryManager_basics  s6   
ÿ

þ

ý
"þÿz?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc              	   C   sÊ  t  g d¢¡}|  |jj¡ |  |jjt|ƒ¡ |  tt|ƒƒt|ƒ¡ |  	t
¡ |d  W d   ƒ n1 s8w   Y  |  	t
¡ d|d< W d   ƒ n1 sQw   Y  | d¡}d|d< |  || d¡¡ |  |jd¡ |  t|ƒd¡ t ¡ 0 t d¡ |  	t¡ | d¡ W d   ƒ n1 s–w   Y  |  | d	¡d
¡ W d   ƒ n1 s®w   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 sÿw   Y  |  |d d¡ d|d< |  |d d¡ |  |d d¡ |  td¡ d|d< W d   ƒ n	1 s6w   Y  |  |d d¡ |  td¡ d|d< W d   ƒ n	1 sYw   Y  |  |d d¡ t ¡ ( t d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ W d   ƒ n	1 s–w   Y  |  d¡}t j||d}zD|  |jj|jj¡ |  ||jj¡ |  t|ƒt|ƒ¡ |  |j|j¡ d|d< |  |d d¡ |  |d d¡ |j ¡  W |j ¡  n|j ¡  w 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 sMw   Y  |j ¡  W |j ¡  d S |j ¡  w ) N)r5  ó   HoWdYgX9´ÈvqÀrÉ   NTr+  r‰  r´   r   r5  z8s8sdqxxxxxx?xxxxxxxx?qÚignoreZ100rÉ   rs  r  Tr+  Zsomerˆ  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srY   r8  u	   encodÃ©ess	   123456789s   adiosZtest03_duplicater4  éM   r:   ip  r†  Úany)r   r,  rû   r6  rb  r½   r%   rw  r¼   rù   Ú
IndexErrorZ_get_packing_formatra   r|   r„   ÚwarningsÚcatch_warningsÚsimplefilterr>   rû  rx  rÀ  r@  r  rÅ   r   )rG   r.  Zcurrent_formatZname_duplicateZsl_copyZsl_tetheredZempty_slr   r   r   Ú'test_shared_memory_ShareableList_basics®  s´   ÿ
ÿ
ÿ


ÿûþÿ
þÿ
þÿ
þ

û


ÿ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Ö   r:   r™  Úchangedrˆ  r]   i  )r   r,  rí   rû   r6  rb  r  r   r!  r   r   r   ra   r„   r%   r   )rG   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l}|j ¡  ¡  ¡ }| 	¡  | 
¡  t ¡ tj }d}t ¡ |k rWt |¡ t|d dƒ}z	tj|dd	}W n	 tyP   Y q[w t ¡ |k s2td
ƒ‚tjdkru|j ¡  ¡ }|  d|¡ W d   ƒ d S W d   ƒ d S 1 s€w   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)
        ú-ErG  r7  r)   r´   rq   Fr  zJA SharedMemory segment was leaked after a process was abruptly terminated.r"   z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)Ú
subprocessÚPopenrþ   Ú
executableÚPIPEr8  ÚreadlineÚstripÚdecoder¯   r-   rJ   rK   r   r­   r²   Úminr   r  r$  r®   r;   r%   r9  re  r½   )rG   rK  r    r%   ÚdeadlinerN   r-  rh  r   r   r   Ú4test_shared_memory_cleaned_after_process_termination8  s<   
þ
ÿû
þä"ézF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rQ   rR   rS   rh   rº  r  r  r(  r)  r?   r“  r;   r%   r/  r0  r7  r@  rB  rM  r   r   r   r   r  ¯  s     
 

q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(  rl   r   r   r   r3  k  rò  z_TestFinalize.setUpc                 C   s   |   tj¡ tj | j¡ d S r   )r   r
   rO  ÚupdaterP  rl   r   r   r   r5  o  ó   z_TestFinalize.tearDownc                 C   s  G dd„ dt ƒ}|ƒ }tj||jdd ~|ƒ }tj||jdd}|ƒ  |ƒ  ~|ƒ }tj||jdd |ƒ }tj||jddd	 |ƒ }tj||jd
dd	 |ƒ }	tj|	|jddd	 |ƒ }
tj|
|jddd	 tjd |jddd	 tjd |jddd	 t ¡  | ¡  t d¡ d S )Nc                   @   rÍ  )z)_TestFinalize._test_finalize.<locals>.FooNrÏ  r   r   r   r   rZ  u  rY  rZ  )r]   rÒ   )r^   )rt   )Úd10rY   )rL   Úexitpriority)Úd01r   )Úd02)Úd03©r¿   iöÿÿÿ)ÚSTOPiœÿÿÿ)r®  r
   ÚFinalizer¦   Ú_exit_functionr   r;   Ú_exit)r“   rZ  rZ  r]   r^   Zclose_brt   rS  rU  rV  rW  r   r   r   Ú_test_finalizes  s0   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  r›  r   r   r   r  ¡  r  z/_TestFinalize.test_finalize.<locals>.<listcomp>rY  )r]   r^   rS  rW  rV  rU  r¿   )	r™   r   r]  r   r›   rœ   rT  r   ra   )rG   rZ  rR  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 ¡ }zKt d
¡ t ddd¡ tj|dtj|dg}t	 
|¡ t d¡ d‰W d   ƒ n1 sYw   Y  ˆd urdˆ‚W t |¡ tj|Ž  t ¡  d S t |¡ tj|Ž  t ¡  w )Nc                   S   ó   d S r   r   r   r   r   r   Úcb¦  r«  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 )NrY   rÉ   )rT  )r  r
   rZ  rø  Úrandintrl   ©r`  r   r   rH   ª  s   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rQ   rR   rS   rH   r   rb  r   r   rZ  ©  r  rZ  Fc               
      sX   ˆs*t  t ¡ d ¡ zt ¡  W n ty% }  z| ‰ W Y d } ~ nd } ~ ww ˆrd S d S rÔ  )rJ   r²   rø  r
   Ú_run_finalizersr  rX  )r  Úfinishr   r   Úrun_finalizers²  s   €ÿúz8_TestFinalize.test_thread_safety.<locals>.run_finalizersc               
      sj   i } ˆs3z‡ fdd„t dƒD ƒ| t d¡< W n ty. } z|‰|  ¡  W Y d }~nd }~ww ˆrd S d S )Nc                    s   h | ]}ˆ ƒ ’qS r   r   r  )rZ  r   r   Ú	<setcomp>Ä  r  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÖ   rq   )rí   rø  Úgetrandbitsr  r(  )r`  r¿   )rZ  r  rd  r   r   Úmake_finalizers½  s   $€þûz9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rq   rŠ   r  T)r®  rþ   Úgetswitchintervalr  r  Úsetswitchintervalr  rÁ   r*  r   Zstart_threadsrJ   r²   r  )rG   re  rh  Zold_intervalZold_thresholdrW   r   )rZ  r`  r  rd  r   Útest_thread_safety¤  s6   


ÿ
þÿ


þ

z _TestFinalize.test_thread_safetyN)
rQ   rR   rS   rh   r3  r5  rM  r]  r^  rk  r   r   r   r   rN  g  s    
%rN  c                   @   rB   )Ú_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 )rY   r   )r;   ÚpathÚsplitextÚsplit)r  rg  r   r   r   r  æ  s   ( z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zmultiprocessing.r   )r  r9  r   r   r   r  ç  r  zmultiprocessing.__init__r   )
Úglobr;   rm  Údirnamer   Ú__file__rœ   Úescaper=  rñ   )rG   rp  ZfolderÚpatternÚfilesÚmodulesr   r   r   Úget_module_namesá  s   


z _TestImportStar.get_module_namesc                 C   s´   |   ¡ }tjdkr| d¡ | d¡ | d¡ n| d¡ ts%| d¡ td u r.| d¡ |D ]'}t|ƒ tj| }|  t	|dƒ|¡ |j
D ]}|  t	||ƒd||f ¡ qGq0d 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)rw  rþ   r  r=  r½  r6   r£  rv  r   r×   rx  )rG   rv  r%   ÚmodÚattrr   r   r   Útest_importì  s*   








þÿûz_TestImportStar.test_importN)rQ   rR   rS   rw  r{  r   r   r   r   rl  ß  s    rl  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
   Ú
SUBWARNINGr   ÚdebugÚinfoÚ	LOG_LEVEL)rG   Úloggerr   r   r   Útest_enable_logging  s   

z _TestLogging.test_enable_loggingc                 C   s   t  ¡ }| | ¡ ¡ d S r   )r   r}  r¦   ÚgetEffectiveLevel)r“   rZ  rƒ  r   r   r   Ú_test_level  s   z_TestLogging._test_levelc           	      C   sÜ   d}d}t  ¡ }t ¡ }|j}t jdd\}}| |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | tj¡ | |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | |¡ |jtd d S )Nr{  é%   Fr”   r–   )Úlevel)r   r}  ÚloggingÚ	getLoggerrˆ  r™   r~  r   r†  r›   ra   r   rœ   r   ÚNOTSETr‚  )	rG   ZLEVEL1ZLEVEL2rƒ  Zroot_loggerZ
root_levelr˜  r™  r    r   r   r   Ú
test_level  s*   


z_TestLogging.test_levelN)rQ   rR   rS   rh   r„  rM  r†  rŒ  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Ô  )rJ   r²   r;   rã   rØ   ÚSIGUSR1)r“   r’   r   r   r   Ú_killerS  s   
z_TestPollEintr._killerrŽ  úrequires SIGUSR1c              
      s¼   dg‰ ‡ fdd„}t  ¡ }t tj|¡}zA| j| j|fd}| ¡  z| jtjdd}| ¡  | 	¡  W | 	¡  n| 	¡  w |  
ˆ d ¡ |  |jd¡ W t tj|¡ d S t tj|¡ w )NFc                     s   dˆ d< d S )NTr   r   rÒ   ©Z
got_signalr   r   Úrecord[  rÕ   z._TestPollEintr.test_poll_eintr.<locals>.recordr–   )r´   r   )r;   r†   rØ   rŽ  r   r  r›   rJ   r²   rœ   r   ra   r‡   )rG   r’  r’   Z
oldhandlerZkillerr    r   r‘  r   Útest_poll_eintrX  s   
"z_TestPollEintr.test_poll_eintrN)rQ   rR   rS   rh   rM  r  r?   rN  r×   rØ   r“  r   r   r   r   r  O  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y   Y nw W d |_nd |_w |  ttft jjd¡ d S )NiÈM®r:   )r   rÁ  Ú
Connectionr¬   r>   r‚  Ú_handlerù   rµ  r   r   r   Útest_invalid_handless  s   ÿ€
ÿz&TestInvalidHandle.test_invalid_handlesN)rQ   rR   rS   r?   r“  ÚWIN32r˜  r   r   r   r   r”  q  s    
r”  c                   @   rB   )Ú	OtherTestc                 C   ó,   G dd„ dt ƒ}|  tjtjj|ƒ d¡ d S )Nc                   @   rB   )zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc                 S   rñ  )Nó   something bogusr   ©rG   r  r   r   r   rˆ  ‰  r«  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   r_  r   r   ©rG   r©  r   r   r   rŠ  ‹  r«  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQ   rR   rS   rˆ  rŠ  r   r   r   r   Ú_FakeConnectionˆ  r.  rŸ  ó   abc)r®  rù   r   ÚAuthenticationErrorrÁ  Údeliver_challenge©rG   rŸ  r   r   r   Ú#test_deliver_challenge_auth_failure‡  s
   þz-OtherTest.test_deliver_challenge_auth_failurec                 C   r›  )Nc                   @   rÂ  )zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc                 S   ó
   d| _ d S rù  )r@  rl   r   r   r   rH   “  r   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 )NrY   r´   rœ  rÒ  )r@  r   rÁ  Ú	CHALLENGEr  r   r   r   rˆ  •  s   

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   r_  r   r   rž  r   r   r   rŠ  œ  r«  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQ   rR   rS   rH   rˆ  rŠ  r   r   r   r   rŸ  ’  s    rŸ  r   )r®  rù   r   r¡  rÁ  Úanswer_challenger£  r   r   r   Ú"test_answer_challenge_auth_failure‘  s
   þz,OtherTest.test_answer_challenge_auth_failureN)rQ   rR   rS   r¤  r¨  r   r   r   r   rš  „  s    
rš  c                 C   s   |  j d7  _ d S rX   )r¯  )Únsr   r   r   Úinitializer¦  r(   rª  c                   @   rP  )
ÚTestInitializersc                 C   s"   t  ¡ | _| j ¡ | _d| j_d S rù  )r   ÚManagerÚmgrrÁ  r©  r¯  rl   r   r   r   r3  «  s   
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )r­  r_  rœ   rl   r   r   r   r5  °  rØ  zTestInitializers.tearDownc                 C   sN   t j ¡ }|  t|jd¡ | t| jf¡ |  | jj	d¡ | 
¡  | ¡  d S rX   )r   r*  ÚSyncManagerrù   Ú	TypeErrorr›   rª  r©  ra   r¯  r_  rœ   )rG   r9  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 )NrY   )rª  )
rù   r¯  r   rÕ  rª  r©  r   rœ   ra   r¯  rë   r   r   r   Útest_pool_initializer¼  s
   z&TestInitializers.test_pool_initializerN)rQ   rR   rS   r3  r5  r°  r±  r   r   r   r   r«  ©  s
    r«  c                 C   s*   z	| j dd}W d S  tjy   Y d S w )NF)Úblock)r¾   r‹  r”  )rs   Ú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´  r   r›   rœ   )r   ZsubProcr   r   r   Ú_test_processÎ  s
   rµ  c                 C   s   | |  S r   r   rÇ  r   r   r   Ú_afuncÕ  rg   r¶  c                  C   s0   t jdd} |  tg d¢¡}|  ¡  |  ¡  d S )Nrˆ  r[  )rY   r´   rs  rˆ  rq   rƒ  r‰  )r   rÕ  rÞ  r¶  r   rœ   )rÖ  re  r   r   r   Úpool_in_processØ  s   r·  c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
Ú
_file_likec                 C   rD   r   )Ú	_delegateÚ_pid)rG   Zdelegater   r   r   rH   ß  rI   z_file_like.__init__c                 C   s$   t  ¡ }|| jkr|| _g | _| jS r   )r;   r†   rº  Ú_cacher%  r   r   r   Úcacheã  s
   
z_file_like.cachec                 C   s   | j  |¡ d S r   )r¼  rñ   rž  r   r   r   r¡  ì  r-  z_file_like.writec                 C   s   | j  d | j¡¡ g | _d S )Nr†  )r¹  r¡  rœ   r¼  r»  rl   r   r   r   Úflushï  s   
z_file_like.flushN)rQ   rR   rS   rH   Úpropertyr¼  r¡  r½  r   r   r   r   r¸  Þ  s    
r¸  c                   @   rÂ  )ÚTestStdinBadfiledescriptorc                 C   ó    t jtd}| ¡  | ¡  d S ©NrŠ   )r   r   rµ  r›   rœ   )rG   r-  r   r   r   Útest_queue_in_processõ  ó   z0TestStdinBadfiledescriptor.test_queue_in_processc                 C   rÀ  rÁ  )r   r   r·  r›   rœ   rë   r   r   r   Útest_pool_in_processú  rÃ  z/TestStdinBadfiledescriptor.test_pool_in_processc                    s:   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  d S )Nr¿  c                      s   ˆ   ¡ S r   )r½  r   ©Zfliker   r   rê    rë  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>rŠ   )r0  r1  r¸  r¡  r   r   r½  )rG   Úsior-  r   rÅ  r   Útest_flushingÿ  s
   
z(TestStdinBadfiledescriptor.test_flushingN)rQ   rR   rS   rÂ  rÄ  rÇ  r   r   r   r   r¿  ó  s    r¿  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í   rJ   r²   rø  r¦   r;   r†   r   )r“   rj  Ú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|ri||ƒD ] }z| ¡ }	W n ty`   | |¡ | 	¡  Y qFw | 
|	¡ qF|sB| ¡  t‡ fdd	„td
ƒD ƒƒ}
|  ||
¡ d S )Nr   r,   rˆ  Fr”   r–   Tc                 3   s$    | ]}ˆ D ]}||j fV  qqd S r   r=  )r  rð   r    ©r  r   r   r¨  -  s   €" z%TestWait.test_wait.<locals>.<genexpr>rÖ   )Úmultiprocessing.connectionr-   rí   r   r™   r   rÊ  r   r›   r   rñ   rû   rœ   r   r•  r=  rý  r«  ra   )rG   rÉ  r-   ÚreadersZmessagesrð   r
  rj  r    r‹  ró   r   rË  r   Ú	test_wait  s4   


þø
zTestWait.test_waitc                 C   sV   t   ¡ }| |¡ tdƒD ]}|rt t ¡ d ¡ | d|  d¡¡ q| ¡  d S )NrÖ   r)   ú%s
ré  )	râ  rw  rí   rJ   r²   rø  rç  r   r   )r“   ru  rÉ  r   rð   r   r   r   Ú_child_test_wait_socket0  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¡ qtdƒD ]}| ¡ \}
}| |
¡ g ||
< q?| ¡  |rx||ƒD ]}
|
 d¡}|sn| |
¡ |
 ¡  q[||
  |¡ q[|sWd dd	„ td
ƒD ƒ¡ d¡}| ¡ D ]}|  d |¡|¡ q‹d S )Nr   r,   rˆ  r–   Tr{  r†  c                 s   s    | ]}d | V  qdS )rÏ  Nr   r  r   r   r   r¨  Y  rB  z,TestWait.test_wait_socket.<locals>.<genexpr>rÖ   ré  rÒ  )rÌ  r-   râ  rã  r   r}  rä  rí   r   r   rÐ  r   r›   rñ   rû   rœ   rÇ  r   r   r=  r   rm  ra   )rG   rÉ  r-   r¹  r„  rÍ  r  Zdicrð   r    r
  r  r‹  ró   Úvr   r   r   Útest_wait_socket:  s>   ÿ





ù	ÿzTestWait.test_wait_socketc                 C   ó   |   d¡ d S r¶  )rÎ  rl   r   r   r   Útest_wait_slow]  r+  zTestWait.test_wait_slowc                 C   rÓ  r¶  )rÒ  rl   r   r   r   Útest_wait_socket_slow`  r+  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,   rq   r´   r"  r'  çš™™™™™Ù?)
rÌ  r-   r   r™   rJ   rK   ra   r  r  r¦   )rG   r-   ró   r]   r^   r›   rc   r¨  r   r   r   Útest_wait_timeoutc  s   
zTestWait.test_wait_timeoutc                 C   s   |  ¡  t |¡ d S r   )rÆ  rJ   r²   )r“   rÑ  Zperiodr   r   r   Úsignal_and_sleepz  r?  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,   rs  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rï   rÇ  r   r   r   rê  ƒ  rë  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r(  )r«  )r¹  r   r   r   rê  ƒ  r  z,TestWait.test_wait_integer.<locals>.<lambda>r–   r'  r¨   r´   rÖ  )rÌ  r-   r   rÓ  r™   r   rØ  r›   r‚   rú   rç   r   rÅ  rJ   rK   ra   r  r  r¦   r¯   rœ   )rG   r-   ró   Zsorted_rÑ  r]   r^   r    r›   rc   r¨  r   r   r   Útest_wait_integer  s>   
ÿ

zTestWait.test_wait_integerc                 C   sf   ddl m} t ¡ \}}t ¡ }||gdd}t ¡ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   r,   r:   r¨   rY   )	rÌ  r-   r   r™   rJ   rK   ra   r  r   )rG   r-   r]   r^   rN   rc   r   r   r   Útest_neg_timeoutª  s   zTestWait.test_neg_timeoutNrt  )rQ   rR   rS   rM  rÊ  rÎ  rÐ  rÒ  rÔ  rÕ  r×  rØ  rÙ  rÚ  r   r   r   r   rÈ    s    



	#
+rÈ  c                   @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyr•  c                 C   ó<   |   t¡ tj d¡ W d   ƒ d S 1 sw   Y  d S )Nz\\.\test©rù   r>   r   rÁ  rÃ  rl   r   r   r   Útest_invalid_family»  ó   "ÿz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc                 C   rÜ  )Nz/var/test.piperÝ  rl   r   r   r   Útest_invalid_family_win32À  rß  z+TestInvalidFamily.test_invalid_family_win32N)	rQ   rR   rS   r?   r“  r™  rÞ  rN  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¦   rx  rþ   Úflags©r“   rZ  r   r   r   Úrun_in_grandchildÊ  r·  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   rx  rþ   râ  Úprintr   )r“   rå  r
  rj  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()rC  z-Sz-OrG  ré  )rå  rD  Úcheck_outputrþ   rF  r!  rJ  ra   )rG   rå  Úprogr©  Zchild_flagsrç  r   r   r   Ú
test_flagsÛ  s   ÿzTestFlags.test_flagsN)rQ   rR   rS   rM  rä  rè  rë  r   r   r   r   rá  É  s    

rá  c                   @   r  )ÚTestTimeoutsc                 C   s>   t  d¡ | d¡ | ¡  tj |¡}| d¡ | ¡  d S )NrY   r»  r¼  )rJ   r²   r¦   r   r   rÁ  rÆ  )r“   Úchildru  rZ  r   r   r   Ú_test_timeoutê  s   


zTestTimeouts._test_timeoutc              	   C   s¼   t  ¡ }zSt  d¡ tjdd\}}tjjdd}tj| j||j	fd}| 
¡  | ¡  |  | ¡ d¡ | ¡  | ¡ }|  | ¡ d¡ | ¡  | ¡  t|ƒ W t  |¡ d S t  |¡ w )	Nr)   Tr”   ÚAF_INETr¿  r–   r»  r¼  )râ  ÚgetdefaulttimeoutÚsetdefaulttimeoutr   r™   rÁ  rÃ  r   rî  ru  r›   r   ra   r   rÇ  r!   )rG   Zold_timeoutÚparentrí  r¹  r    rZ  r   r   r   r©  ó  s$   
ÿ
zTestTimeouts.test_timeoutN)rQ   rR   rS   rM  rî  r©  r   r   r   r   rì  é  s    
rì  c                   @   rm   )ÚTestNoForkBombc                 C   sŽ   t  ¡ }tj tj t¡d¡}|dkr,tjj	 
||¡\}}}|  |d¡ |  d|¡ d S tjj	 ||¡\}}}|  | ¡ d¡ |  |d¡ d S )Nzmp_fork_bomb.pyr  rÒ  s   RuntimeErrors   123)r   r  r;   rm  rœ   rq  rr  r¯  r   rH  Zassert_python_failurera   r½   rI  rv  )rG   r  r%   r   rL  rh  r   r   r   Útest_noforkbomb  s   zTestNoForkBomb.test_noforkbombN)rQ   rR   rS   rô  r   r   r   r   ró    rv   ró  c                   @   r  )ÚTestForkAwareThreadLockc                 C   sV   |dkrt j| j|d |fd}| ¡  | ¡  t|ƒ n| ttj	ƒ¡ | ¡  d S )NrY   r–   )
r   r   rí  r›   r   r!   r¦   r„   r
   Ú_afterfork_registry)r“   rï  rZ  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 )NFrq   r–   )r   r™   r
   ÚForkAwareThreadLockr„   rö  r   rí  r›   r   r   r!   ZassertLessEqual)rG   r
  rj  r¹  Zold_sizer    Znew_sizer   r   r   rÊ  ,  s   
z!TestForkAwareThreadLock.test_lockN)rQ   rR   rS   rM  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   s\   t rt ¡  ¡ S t ¡  ¡ }g }|dk r"| |¡ t |¡}|dk s|D ]}t |¡ q$|S )Nr?  )r™  râ  Údetachrñ   r;   Údupr   )rG   rp  Úto_closere  r   r   r   Úget_high_socket_fd=  s   

þzTestCloseFds.get_high_socket_fdc                 C   s.   t rtjtjtj|d ¡  d S t |¡ d S )N)rŽ  )r™  râ  rï  ÚSOCK_STREAMr   r;   )rG   rp  r   r   r   r   O  s   zTestCloseFds.closec              
   C   s^   zt  |t jt j¡}W n ty# } z| |¡ W Y d }~d S d }~ww | ¡  | d ¡ d S r   )râ  Úfromfdrï  rý  r  r¦   r   )r“   rZ  rp  r   r¿   r   r   r   Ú_test_closefdsU  s   €ÿzTestCloseFds._test_closefdsc              	   C   sà   t st d¡‚t ¡ \}}|  ¡ }z)tj| j||fd}| ¡  | 	¡  | 
¡ }t|ƒ W |  	|¡ | 	¡  | 	¡  n|  	|¡ | 	¡  | 	¡  w t ¡ dkrW|  |d ¡ d S d}|  |t¡ |  |jtjkpk|j|k|¡ d S )Nzrequires fd picklingr–   r  i6'  )r½  r?   r@   r   r™   rü  r   rÿ  r›   r   r   r!   r  r  r‚   r‚  r   rƒ  r£  Úwinerror)rG   r˜  r™  rp  r    r¿   ZWSAENOTSOCKr   r   r   Útest_closefd_  s2   
ÿ



þ

ÿzTestCloseFds.test_closefdN)rQ   rR   rS   rü  r   rM  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   r_  r   r   ©rF  Úframer   r   r   rÔ   „  r«  z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)rØ   rŽ  r¦   r   rŠ  ÚCONN_MAX_SIZE)r“   rZ  rÔ   re  r   r   r   Ú_test_ignore‚  s   

zTestIgnoreEINTR._test_ignorerŽ  r  c                 C   sÞ   t  ¡ \}}zct 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 | ¡  d S | ¡  w )Nr–   Tr  r)   iÒ  r  )r   r™   r   r  r   r›   r   ra   r   rJ   r²   r;   rã   r’   rØ   rŽ  r¦   rˆ  r  rœ   r¸  r   r   r   Útest_ignoreŒ  s(   ÿ





zTestIgnoreEINTR.test_ignorec                 C   sd   dd„ }t   t j|¡ tj ¡ }| |j¡ | ¡ }| d¡ W d   ƒ d S 1 s+w   Y  d S )Nc                 S   r_  r   r   r  r   r   r   rÔ   ¥  r«  z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerÚwelcome)rØ   rŽ  r   rÁ  rÃ  r¦   ru  rÇ  )r“   rZ  rÔ   r¹  r]   r   r   r   Ú_test_ignore_listener£  s   "ýz%TestIgnoreEINTR._test_ignore_listenerc                 C   sž   t  ¡ \}}zCt j| j|fd}d|_| ¡  | ¡  | ¡ }t 	d¡ t
 |jtj¡ t 	d¡ t j |¡}|  | ¡ d¡ | ¡  W | ¡  d S | ¡  w )Nr–   Tr)   r
  )r   r™   r   r  r   r›   r   r   rJ   r²   r;   rã   r’   rØ   rŽ  rÁ  rÆ  ra   rœ   )rG   rZ  rR  r    ru  rÈ  r   r   r   Útest_ignore_listener­  s    ÿ


z$TestIgnoreEINTR.test_ignore_listenerN)rQ   rR   rS   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr  rM  r  r?   rN  r×   rØ   r	  r  r  r   r   r   r   r  }  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Á  ó   zTestStartMethod._check_contextc                 C   s^   |j dd\}}|j| j|fd}| ¡  | ¡  | ¡ }| ¡  | ¡  |  || ¡ ¡ d S )NFr”   r–   )	r™   r   r  r›   r   r   rœ   ra   r  )rG   r¼  r
  rj  r    Zchild_methodr   r   r   Úcheck_contextÅ  s   zTestStartMethod.check_contextc              	   C   sz   dD ]8}zt  |¡}W n	 ty   Y qw |  | ¡ |¡ |  | ¡ |¡ |  t|jd¡ |  t|jd ¡ |  |¡ qd S )N©r  r	  rA  r	  )	r   r½  r>   ra   r  r  rù   Úset_start_methodr  )rG   Úmethodr¼  r   r   r   r  Ï  s   ÿ÷zTestStartMethod.test_contextc              
   C   sæ   t  t¡ d}t  ¡ }zWdD ]K}z	t j|dd W n	 ty"   Y qw |  t  ¡ |¡ t  ¡ }|  | ¡ |¡ |  t	|ƒj
 ¡  |¡¡ |  |jj
 ¡  |¡¡ |  t ¡ |d7 }qW t j|dd nt j|dd w |  |d¡ d S )Nr   r  T©ÚforcerY   )r   Úset_forkserver_preloadÚPRELOADr  r  r>   ra   r½  r   r»   rQ   ÚlowerÚ
startswithr   r  r§  )rG   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¡ d S |  |ddgkp+|ddgkp+|g d¢kp+|g d¢k¡ d S )Nr+   r	  r  r  )r	  r  rA  )r   Úget_all_start_methodsrþ   r  ra   r   )rG   Ú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s2|dkrAt|ƒ t|ƒ |  d¡ d S d S )NrA  z*test only relevant for 'forkserver' methodzmp_preload.pyÚokr†  z(failed spawning forkserver or grandchild)r   r  r{   r;   rm  rœ   rq  rr  r¯  r   rH  rI  rJ  rv  ræ  r¤  )rG   r%   r   rL  rh  r   r   r   Útest_preload_resourcesû  s   
ýz&TestStartMethod.test_preload_resourcesN)
rQ   rR   rS   rM  r  r  r  r  r  r   r   r   r   r   r  À  s    


r  r±  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r	 W d   ƒ qt ¡ \}}tjtjdd|j	||dg|gtj
d}t |¡ t|dd	d
}| ¡  ¡  d¡}| ¡  ¡  d¡}W d   ƒ n1 s]w   Y  t||ƒ | ¡  | ¡  t ¡ tj }	t ¡ |	k r¬t d¡ zt||ƒ W n ty¥ }
 z|  |
jtjtjf¡ W Y d }
~
q´d }
~
ww t ¡ |	k s|td|› dƒ‚|j ¡  d¡}|j ¡  d 	|¡}|   ||¡ |   |d| ¡ W d   ƒ q1 sÞw   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&   ÚnooprC  rG  )rj  r&   )Úpass_fdsr9  r®  T)rl  ré  r"  zA z= resource was leaked after a process was abruptly terminated.r]  z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r#   r$   rx  r;   ÚpiperD  rE  rþ   rF  r|   rG  r   rd  rH  rv  rJ  r'   r¯   r-   rJ   rK   r   r­   r²   r‚  r½   rƒ  ÚENOENTÚEINVALr®   r9  re  ZassertRegex)rG   rK  r&   r
  rj  r    rg  Zname1Zname2rL  r¿   rh  ró   r   r   r   Útest_resource_tracker  s\   
ýÿý
þ

€üü

ÿ
ÿÿÛÿz)TestResourceTracker.test_resource_trackerc           
      C   sr  ddl m} |j}|d urt |tj¡ tj|tj d t	 
¡  t	 d¡ | ¡  W d   ƒ n1 s5w   Y  |j}t ||¡ t d¡ t d¡}t	j
dd\}t	 d	¡ | ¡ }| ¡  | ¡  t |¡}~t ¡  |  |ƒ ¡ |r—|  t|ƒd
¡ |d }	|  t|	jtƒ¡ |  dt|	j ƒv ¡ n|  t|ƒd¡ W d   ƒ d S W d   ƒ d S 1 s²w   Y  d S )Nr   ©Ú_resource_tracker)r‡   r9  rT  r	  T)r’  ÚalwaysrY   zresource_tracker: process died)!Ú multiprocessing.resource_trackerr)  rº  r;   rã   rØ   rä   r   Zwait_processr=  r>  r?  rE  rJ   r²   r   r½  rÓ  rÅ  rÆ  r  r  r  r  r—   ra   r„   r   Ú
issubclassÚcategoryÚUserWarningrw  Úmessage)
rG   rF  Z
should_dier)  r’   r¼  Zall_warnrÑ  r  Zthe_warnr   r   r   Úcheck_resource_tracker_deathV  sB   


þ



ÿî"ñz0TestResourceTracker.check_resource_tracker_deathc                 C   ó   |   tjd¡ d S r³  )r0  rØ   rH  rl   r   r   r   Útest_resource_tracker_sigint{  r  z0TestResourceTracker.test_resource_tracker_sigintc                 C   r1  r³  )r0  rØ   rß   rl   r   r   r   Útest_resource_tracker_sigterm  r  z1TestResourceTracker.test_resource_tracker_sigtermc                 C   r1  r¶  )r0  rØ   rä   rl   r   r   r   Útest_resource_tracker_sigkillƒ  r  z1TestResourceTracker.test_resource_tracker_sigkillc                 C   s<   ddl m} | ¡  |jd |fv }|| ¡ M }|  |¡ d S )Nr   r(  )r+  r)  rE  rº  Ú_check_aliver¦   )rZ  r’   r)  Zreusedr   r   r   Ú_is_resource_tracker_reused‡  s
   z/TestResourceTracker._is_resource_tracker_reusedc                 C   st   ddl m} | ¡  |j}tjdd\}}tj| j||fd}| ¡  | 	¡ }| 
¡  | ¡  | ¡  |  |¡ d S )Nr   r(  Fr”   r–   )r+  r)  rE  rº  r   r™   r   r6  r›   r   rœ   r   r   )rG   r)  r’   r
  rj  r    Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reused‘  s   ÿz0TestResourceTracker.test_resource_tracker_reusedN)rQ   rR   rS   r'  r0  r2  r3  r4  rº  r6  r7  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 | ¡  d S | ¡  w r   )r-   rr   r{  rü   r‘  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   r9  r   r›   r   r{  rü   r-   r   ra   r¾   rœ   )rG   r   r„  r…  r-  r   r   r   Ú
test_empty°  s"   þzTestSimpleQueue.test_emptyc                 C   s   t  ¡ }| ¡  | ¡  d S r   )r   r:  r   ©rG   r   r   r   r   r  È  s   zTestSimpleQueue.test_closec                 C   s0   t  ¡ }| ¡  |  |jj¡ |  |jj¡ d S r   )r   r:  r   r   Ú_readerr¼  Ú_writerr<  r   r   r   Útest_closedÏ  s   zTestSimpleQueue.test_closedN)rQ   rR   rS   rM  r9  r;  r  r¯  r   Zcpython_onlyr?  r   r   r   r   r8  ¤  s    
	r8  c                   @   rm   )ÚTestPoolNotLeakOnFailurec                    sŽ   d‰g ‰ G ‡ ‡fdd„dƒ}|   td¡ tjjdtjj|dd}| ¡  | 	¡  W d   ƒ n1 s4w   Y  |  
tdd	„ ˆ D ƒƒ¡ d S )
Nrs  c                       s<   e Zd Z‡ fdd„Z‡fdd„Zdd„ Zdd„ Zd	d
„ ZdS )zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                    s    d| _ d | _d | _ˆ  | ¡ d S )NzFake Process)r%   r‡   rõ  rñ   )rG   r·   )Úforked_processesr   r   rH   à  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 OSErrorrY   r  )r‚  rõ  rl   )Úwill_fail_inr   r   r›   æ  s   
zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startc                 S   r¥  )NÚstoppingrô  rl   r   r   r   r¯   í  r   z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatec                 S   s   | j dkr
d| _ d S d S )NrD  Ústoppedrô  rl   r   r   r   rœ   ð  s   

ÿzWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joinc                 S   s   | j dkp	| j dkS )Nr  rD  rô  rl   r   r   r   r€   ô  s   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rQ   rR   rS   rH   r›   r¯   rœ   r€   r   ©rA  rC  r   r   ÚFailingForkProcessß  s    rG  rB  rq   )r   )Úcontextc                 s   r@  r   rA  )r  r    r   r   r   r¨  ý  rB  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)rÀ  r‚  r   rÖ  rÕ  r?   r"  Z	MagicMockr   rœ   r   r;  )rG   rG  r    r   rF  r   Útest_release_unused_processesÙ  s   
ÿ
üÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rQ   rR   rS   rI  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dHdd„Ze
dd„ ƒZdId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dJd/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 )KÚ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_classrV   r›   r-  rl   r   r   r   r3    s   


zTestSyncManagerTypes.setUpc                 C   sB   | j d ur| j  ¡ r| j  ¡  | j  ¡  | j ¡  d | _d | _ d S r   )r-  r€   r¯   rœ   rV   r_  rl   r   r   r   r5    s   



zTestSyncManagerTypes.tearDownc                 C   s   t  ¡  d S r   )r   Úreap_childrenrË   r   r   r   rÔ  &  ó   zTestSyncManagerTypes.setUpClassc                 C   sŒ   t | jƒ t ¡ }d}tt ¡ ƒdkrDt |¡ |d9 }t ¡ | }|dkr:dtj	_
t	 dt ¡ › d|› d¡ d S tt ¡ ƒdksd S d S )	Nr
  rY   r´   r  Tú"multiprocessing.Manager still has ú active children after ú seconds)r!   r-  rJ   rK   r„   r   rº   r²   r¯  r   Úenvironment_alteredÚprint_warning)rG   Ú
start_timerN   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-  r   r›   rT  ra   r‡   )rG   Zworkerr›  r   r   r   Ú
run_worker>  s
   
zTestSyncManagerTypes.run_workerc                 C   s   |  ¡  | ¡  |  d¡ d S ©Nr  )r-   r(  ©r“   r›  r   r   r   r  E  s   z TestSyncManagerTypes._test_eventc                 C   s.   | j  ¡ }| ¡  |  | j|¡ | d¡ d S rV  )rV   r¸   rü   rU  r  r-   ©rG   r  r   r   r   r  L  s   
zTestSyncManagerTypes.test_eventc                 C   ó   |  ¡  d S r   ©rÅ  rW  r   r   r   Ú
_test_lockS  rM  zTestSyncManagerTypes._test_lockrÄ  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )r:  rV   rU  r[  rÆ  rù   rÑ   ©rG   Zlnamer  r   r   r   rÊ  W  s   zTestSyncManagerTypes.test_lockc                 C   ó   |  ¡  | ¡  d S r   ©rÅ  rÆ  rW  r   r   r   Ú_test_rlock]  ó   z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r:  rV   rU  r_  r\  r   r   r   rÌ  b  ó   zTestSyncManagerTypes.test_rlockc                 C   rY  r   rZ  rW  r   r   r   rÒ  f  rM  z$TestSyncManagerTypes._test_semaphorerÓ  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r:  rV   rU  rÒ  rÆ  )rG   Úsnamer  r   r   r   rÔ  j  s   z#TestSyncManagerTypes.test_semaphorec                 C   rw  )NrÖ  )rb  )rÔ  rl   r   r   r   r×  o  r-  z+TestSyncManagerTypes.test_bounded_semaphorec                 C   r]  r   r^  rW  r   r   r   Ú_test_conditionr  r`  z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rV   rä  rU  rc  rX  r   r   r   Útest_conditionw  s   
z#TestSyncManagerTypes.test_conditionc                 C   rY  r   )rM  rW  r   r   r   Ú_test_barrier{  s   z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S rp   )rV   r0  rU  re  rX  r   r   r   r<  €  rR  z!TestSyncManagerTypes.test_barrierc                 C   s*   |	 W d   ƒ d S 1 sw   Y  d S r   r   rW  r   r   r   Ú
_test_pool„  s   "ÿzTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nrˆ  r[  )rV   rÕ  rU  rf  rX  r   r   r   Ú	test_poolŠ  ra  zTestSyncManagerTypes.test_poolc                 C   r_  r   r   rW  r   r   r   Ú_test_queueŽ  r,  z TestSyncManagerTypes._test_queuer   c                 C   s6   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ d S )Nr´   rq   rƒ  )r:  rV   rr   rU  rh  )rG   Zqnamer  r   r   r   Ú
test_queue˜  s   

zTestSyncManagerTypes.test_queuec                 C   rÓ  )Nrž  )ri  rl   r   r   r   Útest_joinable_queue   r+  z(TestSyncManagerTypes.test_joinable_queuec                 C   s   |  ¡  | ¡  |D ]}q
d S r   )rý  Úreverse)r“   r›  re  r   r   r   Ú
_test_list£  s
   ÿzTestSyncManagerTypes._test_listc                 C   s6   | j  ¡ }| d¡ |  | j|¡ |  t|ƒd¡ d S )Nrq   r   )rV   r¼   rñ   rU  rl  ra   r„   rX  r   r   r   r›  ¯  s   

zTestSyncManagerTypes.test_listc                 C   r_  r   r   rW  r   r   r   Ú
_test_dict¶  r,  zTestSyncManagerTypes._test_dictc                 C   s4   | j  ¡ }d|d< |  | j|¡ |  t|ƒd¡ d S )Nrq   r¿  r   )rV   rª  rU  rm  ra   r„   rX  r   r   r   r®  Á  s   
zTestSyncManagerTypes.test_dictc                 C   ro   rÕ  )rü   rW  r   r   r   Ú_test_valueÈ  s   z TestSyncManagerTypes._test_valuec                 C   s>   | j  dd¡}|  | j|¡ |  |jd¡ |  | ¡ d¡ d S )Nrð   rY   r´   )rV   r   rU  rn  ra   rb   r¾   rX  r   r   r   rv  Î  s   zTestSyncManagerTypes.test_valuec                 C   r_  r   r   rW  r   r   r   Ú_test_arrayÔ  r,  z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )Nrð   r   rY   )rV   r‹  rU  ro  rX  r   r   r   rŽ  Û  s   zTestSyncManagerTypes.test_arrayc                 C   r_  r   r   rW  r   r   r   Ú_test_namespaceß  r,  z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S r  )rV   rÁ  re  rf  rU  rp  rX  r   r   r   rÂ  ä  s   
z#TestSyncManagerTypes.test_namespaceNrÍ  )rÓ  )r   )+rQ   rR   rS   r·  r   r*  r®  rK  r3  r5  rM  rÔ  rÙ  rT  rU  r  r  r[  rÊ  r_  rÌ  rÒ  rÔ  r×  rc  rd  re  r<  rf  rg  rh  ri  rj  rl  r›  rm  r®  rn  rv  ro  rŽ  rp  rÂ  r   r   r   r   rJ     sf    












	





rJ  c                   @   rm   )ÚMiscTestCasec                 C   s   t j| ttjddgd d S )NÚSUBDEBUGr  )ÚextraZnot_exported)r   Zcheck__all__r   rx  rl   r   r   r   Útest__all__ì  s   
ÿzMiscTestCase.test__all__N)rQ   rR   rS   rt  r   r   r   r   rq  ë  rv   rq  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 ƒ }|r<dt j_t 	d|› ¡ d }d S )Nr   TúDangling processes: rY   úDangling threads: )r¯  r   r%  rü   r   r    rv  rw  rQ  rR  rÁ   )r“   rU   rW   r   r   r   rÙ  ü  s   
zBaseMixin.tearDownClassN)rQ   rR   rS   rM  rÔ  rÙ  r   r   r   r   ru  ö  s
    
ru  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  rU   N)rQ   rR   rS   rz   r   r   rÁ  rº  r}   r˜   rº   rÕ  r™   r   rž  rÄ  rË  rÓ  rÖ  rä  r¸   r0  r   r‹  rq  rŠ  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 )ÚManagerMixinrV   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   )rV   rÕ  )r“   rL   rM   r   r   r   rÕ  9  r  zManagerMixin.Poolc                    s   t ƒ  ¡  t ¡ | _d S r   )rÓ  rÔ  r   r¬  rV   rË   r×  r   r   rÔ  =  rÇ   zManagerMixin.setUpClassc                    sØ   t  ¡ }d}tt ¡ ƒdkr<t  |¡ |d9 }t  ¡ | }|dkr4dtj_t 	dt ¡ › d|› d¡ q<tt ¡ ƒdkst
 ¡  | j ¡ d	krXdtj_t 	d
¡ t 	| j ¡ ¡ | j ¡  | j ¡  d | _tƒ  ¡  d S )Nr
  rY   r´   r  TrN  rO  rP  r   z5Shared objects which still exist at manager shutdown:)rJ   rK   r„   r   rº   r²   r¯  r   rQ  rR  r  r  rV   Z_number_of_objectsZ_debug_infor_  rœ   rÓ  rÙ  )r“   rS  rN   rü  r×  r   r   rÙ  B  s0   
ÿ
þ÷


zManagerMixin.tearDownClass)rQ   rR   rS   rz   r   r   r¾  ÚoperatorÚ
attrgetterr   rž  rÄ  rË  rÓ  rÖ  rä  r¸   r0  r   r‹  r¼   rª  rÁ  rM  rÕ  rÔ  rÙ  r'  r   r   r×  r   rz  '  s.    
rz  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 )ÚThreadsMixinrW   N)rQ   rR   rS   rz   r   Zdummyr   rÁ  rº  r}   rº   rÕ  r™   r   rž  rÄ  rË  rÓ  rÖ  rä  r¸   r0  r   r‹  r   r   r   r   r}  d  s&    r}  c                    s:  | d }t ƒ }h d£}| ¡ D ]m\}}t|tƒsqt|tƒr`|tu r#q|jD ]U}d| ¡  |dd …  }|| ¡ d  }	G dd„ d||	tj	ƒ}
|dkrRt
 d	¡|
ƒ}
| |
_|
_||
_|
| |< q&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 )NrQ   >   rU   rV   rW   ZWithrY   ÚMixinc                   @   rÍ  ©z*install_tests_in_module_dict.<locals>.TempNrÏ  r   r   r   r   ÚTemp‹  rY  r€  rV   r  c                   @   rÍ  r  rÏ  r   r   r   r   r€  “  rY  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
y8   t ˆd ¡‚w tj d¡rRzt  ¡ } W n tyQ   t d¡‚w tƒ  t ¡  t  ¡  t¡ d S )	Nr   rY   T)Ú
allow_noner  z start method not supportedÚlinuxz1OSError raises on RLock creation, see issue 3111!)r   r  r  r    Ú_cleanuprv  r   rÁ   r  r  r>   r?   r@   rþ   r  r  rË  r‚  rA   r
   Úget_temp_dirr}  r~  r‚  rz  ©rw  Ú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 ƒ }|r,d} dt j_t 	d|› ¡ d }tt
jƒtˆ d ƒ }|rId} dt j_t 	d|› ¡ d }| rRt d¡ tj ¡  d S )	NFr   Tr  rx  rY   ry  r"  )r¯  r   r%  r   r  rü   r    rv  rQ  rR  rÁ   rJ   r²   r
   Ú_cleanup_tests)Z
need_sleeprU   rW   )rw  r†  r   r   ÚtearDownModule²  s$   

z4install_tests_in_module_dict.<locals>.tearDownModulerˆ  rŠ  )Úglobalsr/  r   r»   r,  rT   rh   Ú
capitalizer?   ÚTestCaser   Úrequires_hashdigestrQ   rS   rR   r®  )Zremote_globsr‡  rR   Zlocal_globsZ	ALL_TYPESr%   ÚbaseZtype_Znewnamer~  r€  rˆ  rŠ  r   r…  r   Úinstall_tests_in_module_dict|  s<   



€r  rL  )¸r?   Zunittest.mockr   r‹  rJ   r0  rá  rþ   r;   r  rƒ  rØ   rŒ  râ  rø  r‰  rD  r  r{  r  r  r=  Ztest.supportr¯  Ztest.support.script_helperr   r   r   r   r   r   r   Úimport_moduler	   Z*skip_if_broken_multiprocessing_synchronizerÁ   rÌ  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr6  Úmultiprocessing.queuesr
   r   ÚHAVE_SEND_HANDLEr½  ÚImportErrorZmultiprocessing.sharedctypesr   r   r  r   Z	HAS_SHMEMr§  r   r   r!   r%   r#   r'   r  r‚  rê   rZ   r  rŽ  r  r:  ZHAVE_GETVALUEr  r™  r-   r1   r<   r²  r  Zctypesr5   r6   r7   r8   r®  rA   rC   rT   rj   rn   rw   r   rQ  rZ  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.  r9  rN  rO  r  rP  rU  rV  rX  Úregisterr]  r   ri  rj  rl  ro  rv  rq  rŽ  r€  r‰  r‡  r¾  rË  rÑ  rN  rà  rï  r  r  r  rN  r  rl  r|  r  r”  rš  rª  r«  r´  rµ  r¶  r·  r¸  r¿  rÈ  rÛ  rá  rì  ró  rõ  rø  r  r  r“  r!  r8  r@  rJ  rq  ru  r  rz  r}  r  r   r   r   r   Ú<module>   s¸  

ÿÿÿÿ
ÿ
þ    ,W  G6  *39 FS 
 
	  i(C:
14  "0
R h
8   9x+E"! 2 "BCHÿ 3) k=