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   sP   	 d} zt  d¡}W n ttfy   Y d S w |dks|| kr!d S t d|  ¡‚)Nr3   ÚSC_SEM_NSEMS_MAXéÿÿÿÿ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                   @   s   e Zd Z	 dd„ Zdd„ ZdS )zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablec                 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   rH   rf   r   r   r   r   r­  ¤  s    r­  c                       s   e Zd Z	 e‡ fdd„ƒZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuec                    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   Ú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                   @   s@   e Zd Z	 ddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚBunchFc           
      C   s”   	 || _ || _|| _| ¡ | _| ¡ | _| ¡ | _|s | j ¡  g }t	|ƒD ]}|j
| jd}d|_| ¡  | |¡ q&dd„ }	t | |	|¡| _d S )NrŠ   Tc                 S   s   | D ]}|  ¡  qd S r   )rœ   )rW   r    r   r   r   Úfinalize®  s   
ÿz Bunch.__init__.<locals>.finalize)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   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d„ Zdd„ Zdd„ Zd	d
„ Ze	dd„ ƒZ
d5d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.d/„ Ze	d0d1„ ƒZd2d3„ Zd4S )6Ú_TestBarrierrq   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   )r0  Ú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“   r0  Úresultsrí  Úmrð   r   r   r   Ú	multipassò  s   
ÿz_TestBarrier.multipassrY   c                 C   s,   	 |   ¡ |   ¡ g}|  | j| j||f¡ d S r   )r  r4  r8  r0  )rG   Úpassesr6  r   r   r   Útest_barrier  s   z_TestBarrier.test_barrierc                 C   s   	 |   d¡S rÛ  )r:  rl   r   r   r   Útest_barrier_10
  s   
z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r-   rr   )r“   r0  r   rc   r   r   r   Ú_test_wait_return_f  ó   z _TestBarrier._test_wait_return_fc                    sT   	 |   ¡ ‰ |  | j| jˆ f¡ ‡ fdd„t| jƒD ƒ}|  | d¡d¡ tˆ ƒ d S )Nc                    r  r   r  r  r   r   r   r    r  z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rY   )	r   r4  r<  r0  rí   r  ra   Úcountr   ©rG   r6  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“   r0  r6  r   r   r   Ú_test_action_f  s   ÿz_TestBarrier._test_action_fc                 C   sD   	 |   ¡ }| j| jt|ƒd}|  | j||f¡ |  t|ƒd¡ d S )N)r4  rY   )r  r.  r  r*  r4  rA  ra   r„   )rG   r6  r0  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Á   ÚBrokenBarrierErrorr2  )r“   r0  Ú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 r  )	r  r4  rG  r0  ra   r„   r  r   Úbroken)rG   rE  rF  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Á   rD  )r“   r0  rE  rF  Úresults3rð   r   r   r   Ú_test_reset_fG  s   
ÿ
ÿz_TestBarrier._test_reset_fc                 C   sn   	 |   ¡ }|   ¡ }|   ¡ }|  | j| j|||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S r  )r  r4  rM  r0  ra   r„   r  )rG   rE  rF  rL  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 rC  )r-   r  rÑ   rñ   rÁ   rD  r2  rK  )r“   r0  Úbarrier2rE  rF  rL  rð   r   r   r   Ú_test_abort_and_reset_ff  s    ÿz$_TestBarrier._test_abort_and_reset_fc                 C   s|   	 |   ¡ }|   ¡ }|   ¡ }|  | j¡}|  | j| j||||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S r  )r  r.  r  r4  rP  r0  ra   r„   )rG   rE  rF  rL  rO  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Á   rD  rñ   ©r“   r0  r6  rð   r   r   r   Ú_test_timeout_f‹  s   
ÿz_TestBarrier._test_timeout_fc                 C   s6   	 |   ¡ }|  | j| j|f¡ |  t|ƒ| jj¡ d S r   )r  r4  rT  r0  ra   r„   r5  r?  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´   rR  T)r-   r/  r  rJ   r²   rÁ   rD  rñ   rS  r   r   r   Ú_test_default_timeout_fž  s   
ÿz$_TestBarrier._test_default_timeout_fc                 C   sB   	 | j | jdd}|  ¡ }|  | j||f¡ |  t|ƒ|j¡ d S )Nr"  r¨   )r.  r  r  r4  rU  ra   r„   r5  )rG   r0  r6  r   r   r   Útest_default_timeout©  s
   z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rX   )r.  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“   r0  r9  Ú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   rY  r0  r›   rû   rœ   ra   r   )rG   r9  rÇ  rX  rR  Újr    rð   r   r   r   Útest_thousand¾  s    
ÿÿÿz_TestBarrier.test_thousandN)rY   )rQ   rR   rS   r  r/  r1  r3  r  r4  rM  r8  r:  r;  r<  r@  rA  rB  rG  rI  rM  rN  rP  rQ  rT  r©  rU  rV  rW  rY  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   r1  Þ  ó   ÿ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                    rn  r   )r   rp  rl   r   r   r  í  rr  rY   r–   Tr´   )	rj  ri  ra   rb   r   rŽ   r   r›   rœ   )rG   Úrawrk  rl  rm  r-  r   rl   r   Ú
test_valueè  s    
ÿ
ÿÿz_TestValue.test_valuec                 C   ó   | j dd d S ©NT)rs  )rt  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   ry  rz  rÂ  ra   r   r×   rù   r=   ro  )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   rj  r1  rM  rŽ   rt  rw  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   rs  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   ru  rv  )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Ö   rx  Fry  rz  Znotalock)r‰  r¼   rí   ry  rz  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Úkeysrk  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Ê   )rc  r-   r   r   r   Úsqr
	  s   
rÁ  c                 C   s   | | S r   r   )rc  rd  r   r   r   Úmul	  rg   rÂ  c                 C   s   t  | ¡ tdd ƒ‚)Nrc  i   )rJ   r²   r>   r,   r   r   r   Úraise_large_valuerror	  r&  rÃ  c                 C   ó   | S r   r   ©rc  r   r   r   Úidentity	  r«  rÆ  c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )Ú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   rc  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¼   ri  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¼   ri  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ƒ  rR  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Ö   rZ  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    r1  rc   r   r0  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   r/  r0  r   r   r1  ´
  rÕ   z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr2  )Úmultiprocessing.poolr4  r   rÔ  rí   rõ  r,  rù   r¾   r   r‚   ZassertIsNotNoner  rb   r   rœ   )rG   r4  r    Z	iterationr1  rc   Úwrappedr   r0  r   Útest_unpickleable_result¬
  s   

z._TestPoolWorkerErrors.test_unpickleable_resultN)rQ   rR   rS   rh   r3  r7  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origworkerpidsr6  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   r9  rƒ  g333333Ó?)r   rÔ  rí   rñ   rõ  rÁ  r   rœ   rB  ra   r¾   )rG   r    r6  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   rD  rE  rL  r   r   r   r   r8  Â
  s
    r8  )Ú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  rQ  rS  r   r   r   r   rO    rò  rO  c                  c   s    t dƒD ]} | |  V  qd S rÛ  )rí   )rð   r   r   r   Úbaz  s   €ÿrT  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   rU    s    rU  c                   @   rÌ  )Ú	MyManagerNrÎ  r   r   r   r   rW    ó    rW  ÚFoo)ÚcallableÚBar)rg  rS  )rZ  Zexposed)rZ  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÷  )	rW  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÷  )rW  r]  r½   r_  r‡   rØ   rß   r`  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÷  )rW  r›   r]  ra   r_  r‡   r`  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  rQ  rS  c                    rd  r   re  rf  )Úbarr   r   r  F  r  rg  rQ  rS  rP  rR  c                 S   s   g | ]}|| ‘qS r   r   r  r   r   r   r  U  r  rÖ   )rY  r[  rT  ra   rg  rù   r>   rQ  rV  r  rS  r¼   rí   )rG   rV   rT  Zfoo_methodsZbar_methodsr   )rg  r½  r   r]  @  s    "z_TestMyManager.commonN)rQ   rR   rS   rh   ra  rb  rc  r]  r   r   r   r   r\  "  s    r\  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queue]  r«  ri  c                   @   rÌ  )ÚQueueManagerNrÎ  r   r   r   r   rj  `  rX  rj  c                   @   rÌ  )ÚQueueManager2NrÎ  r   r   r   r   rk  d  rX  rk  Ú	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)rk  Ú
SERIALIZERÚconnectri  rr   Útuplerk  ©r“   rq  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   rp  r–   T)r;   Úurandomrj  r   ÚHOSTrr  r›   rû   r^  r   rv  rq  r   rk  rs  ri  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   rk  rò   rM  rv  rz  r   r   r   r   rm  k  s    
	rm  Úmd5c                   @   r  )Ú_TestManagerRestartc                 C   s,   t ||td}| ¡  | ¡ }| d¡ d S )Nrp  rn  )rj  rr  rs  ri  rr   ru  r   r   r   rv  Ÿ  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 )Nrw  r   rp  r–   rn  r^  rR  )r;   rx  rj  r   ry  rr  Z
get_serverrq  Úlistenerr   r›   r   rv  rœ   ri  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  rv  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“   rX  Ú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   ro  Nrn  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   rX  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   rX  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“   rX  Ú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   rX  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   rX  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   rX  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   rX  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~  rq  )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¿  ÚClientrq  Ú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“   rq  rX  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Ž   rq  r   r›   rÃ  ra   r   rœ   r   )rG   r¼  r·  r    rX  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Ž   rq  r   r›   rJ   r²   rÃ  ra   r   r   rœ   )rG   r·  r    rX  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Â  rq  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“   rX  Ú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ð   rc  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Ó  rR  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¦   rq  rÃ  r   ÚsocketÚcreate_serverr   ry  Úgetsocknamer   )r“   rX  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Þ  rs  Úsendall)r“   rX  rq  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‡  rq  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“   rX  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   rX  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Ò  r1  r   r  r	  Ú_heapÚold_heapZHeaprl   rÖ  r   r   r1    s   
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )rí  r   r  r	  rì  rÒ  r3  rl   rÖ  r   r   r3    ó   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   rZ  Ú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_seqrk  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^   rC  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   r1  r3  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 )Ú_Foorc  rd  Ú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   re  rf  rg  rl   r   r   r   r1  {  rh  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   rc  rd  rí   r„   )r“   rc  rd  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‰  rx  gUUUUUUÕ?ra  rs  r´   r^  rÖ   rt   r'  r¶   r–   Té   gUUUUUUå?rb  rƒ  ç      @Z
hellohello)r   r7   r8   r  r‰  r¼   rí   r   rb   r   r  r   r›   rœ   ra   r[   rc  rd  )
rG   rÇ  rc  rd  r  r½  r‹  r  r    rð   r   r   r   Útest_sharedctypesŠ  s&   
z#_TestSharedCTypes.test_sharedctypesc                 C   ru  )NTrx  )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´   ç      @ra  r   )r  r   rc  rd  r  ra   r[   )rG   r½  rg  r   r   r   Ú	test_copy¤  s   z_TestSharedCTypes.test_copyNrt  )
rQ   rR   rS   rh   r1  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   rf  ©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()
        rF  )r¯  r   rG  rH  r   rI  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[  r-  r   r   r  –  r–  rw  é€   é   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*  r2  Z	absent_slr   r-  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)r1  ó   HoWdYgX9´ÈvqÀrÉ   NTr*  r‰  r´   r   r1  z8s8sdqxxxxxx?xxxxxxxx?qÚignoreZ100rÉ   rs  r  Tr*  Zsomerˆ  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srY   r4  u	   encodÃ©ess	   123456789s   adiosZtest03_duplicater0  éM   r:   ip  r‚  Úany)r   r(  rû   r2  rb  r½   r%   rw  r¼   rù   Ú
IndexErrorZ_get_packing_formatra   r|   r„   ÚwarningsÚcatch_warningsÚsimplefilterr>   r÷  rt  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û   r2  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)
        ú-ErF  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   rJ  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+  r,  r3  r<  r>  rI  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   r1  k  rî  z_TestFinalize.setUpc                 C   s   |   tj¡ tj | j¡ d S r   )r   r
   rK  ÚupdaterL  rl   r   r   r   r3  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   rY  u  rX  rY  )r]   rÒ   )r^   )rt   )Úd10rY   )rL   Úexitpriority)Úd01r   )Úd02)Úd03©r¿   iöÿÿÿ)ÚSTOPiœÿÿÿ)r®  r
   ÚFinalizer¦   Ú_exit_functionr   r;   Ú_exit)r“   rX  rY  r]   r^   Zclose_brt   rO  rQ  rR  rS  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>rU  )r]   r^   rO  rS  rR  rQ  r¿   )	r™   r   rY  r   r›   rœ   rT  r   ra   )rG   rX  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É   )rP  )r  r
   rV  rô  Úrandintrl   ©r\  r   r   rH   ª  s   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rQ   rR   rS   rH   r   r^  r   r   rY  ©  r  rY  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  rT  )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  )rY  r   r   Ú	<setcomp>Ä  r  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÖ   rq   )rí   rô  Úgetrandbitsr  r(  )r^  r¿   )rY  r  r`  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   ra  rd  Zold_intervalZold_thresholdrW   r   )rY  r\  r  r`  r   Útest_thread_safety¤  s6   


ÿ
þÿ


þ

z _TestFinalize.test_thread_safetyN)
rQ   rR   rS   rh   r1  r3  rM  rY  rZ  rg  r   r   r   r   rJ  g  s    
%rJ  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  r7  r   r   r   r  ç  r  zmultiprocessing.__init__r   )
Úglobr;   ri  Údirnamer   Ú__file__rœ   Úescaper=  rñ   )rG   rl  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)rs  rþ   r  r=  r¹  r6   r£  rr  r   r×   rt  )rG   rr  r%   ÚmodÚattrr   r   r   Útest_importì  s*   








þÿûz_TestImportStar.test_importN)rQ   rR   rS   rs  rw  r   r   r   r   rh  ß  s    rh  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   ry  r¦   ÚgetEffectiveLevel)r“   rX  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 )Nrw  é%   Fr”   r–   )Úlevel)r   ry  ÚloggingÚ	getLoggerr„  r™   rz  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   rx  
  s    
rx  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   r1  «  s   
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )r©  r^  rœ   rl   r   r   r   r3  °  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   r7  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   r1  r3  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Õ  rc  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Þ  rs  rí   rJ   r²   rô  rã  r   r   )r“   rq  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–   Trw  r‚  c                 s   s    | ]}d | V  qdS )rË  Nr   r  r   r   r   r¦  Y  rA  z,TestWait.test_wait_socket.<locals>.<genexpr>rÖ   rå  rÎ  )rÈ  r-   rÞ  rß  r   ry  rà  rí   r   r   rÌ  r   r›   rñ   rû   rœ   rÃ  r   r   r=  r   rk  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¦   rt  rþ   Úflags©r“   rX  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   rt  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()r?  z-Sz-OrF  rå  )rá  r@  Úcheck_outputrþ   rB  r  rF  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“   Úchildrq  rX  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ê  rq  r›   r   ra   r   rÃ  r!   )rG   Zold_timeoutÚparentré  r·  r    rX  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;   ri  rœ   rm  rn  r¯  r   rG  Zassert_python_failurera   r½   rH  rv  )rG   r  r%   r   rK  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í  rX  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_closerc  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“   rX  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“   rX  rÔ   rc  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¦   rq  rÃ  )r“   rX  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   rX  rR  r    rq  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;   ri  rœ   rm  rn  r¯  r   rG  rH  rF  rv  râ  r¤  )rG   r%   r   rK  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&   Únoopr?  rF  )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;   Úpiper@  rA  rþ   rB  r|   rC  r   rd  rD  rv  rF  r'   r¯   r-   rJ   rK   r   r­   r²   r~  r½   r  ÚENOENTÚEINVALr®   r9  re  ZassertRegex)rG   rJ  r&   r	  rj  r    rg  Zname1Zname2rH  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‡   r5  rR  r	  T)rŽ  ÚalwaysrY   zresource_tracker: process died)!Ú multiprocessing.resource_trackerr%  r¶  r;   rã   rØ   rä   r   Zwait_processr9  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²  )r,  rØ   rH  rl   r   r   r   Útest_resource_tracker_sigint{  r  z0TestResourceTracker.test_resource_tracker_sigintc                 C   r-  r²  )r,  rØ   rß   rl   r   r   r   Útest_resource_tracker_sigterm  r  z1TestResourceTracker.test_resource_tracker_sigtermc                 C   r-  rµ  )r,  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¦   )rX  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   r2  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#  r,  r.  r/  r0  r¸  r2  r3  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   r5  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   r6  r   ©rG   r   r   r   r   r  È  s   zTestSimpleQueue.test_closec                 C   s0   t  ¡ }| ¡  |  |jj¡ |  |jj¡ d S r   )r   r6  r   r   Ú_readerr¸  Ú_writerr8  r   r   r   Útest_closedÏ  s   zTestSimpleQueue.test_closedN)rQ   rR   rS   rM  r5  r7  r  r¯  r   Zcpython_onlyr;  r   r   r   r   r4  ¤  s    
	r4  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 )Nr@  Ú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  r@  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   ©r=  r?  r   r   ÚFailingForkProcessß  s    rC  r>  rq   )r   )Úcontextc                 s   r?  r   r@  )r  r    r   r   r   r¦  ý  rA  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r¾  r~  r   rÕ  rÔ  r?   r  Z	MagicMockr   rœ   r   r7  )rG   rC  r    r   rB  r   Útest_release_unused_processesÙ  s   
ÿ
üÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rQ   rR   rS   rE  r   r   r   r   r<  ×  s    r<  c                   @   sb  e 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dGdd„Ze	dd„ ƒZdGdd„Ze	dd„ ƒZdHd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dId.d/„Zd0d1„ Ze	d2d3„ ƒZ d4d5„ Z!e	d6d7„ ƒZ"d8d9„ Z#e	d:d;„ ƒZ$d<d=„ Z%e	d>d?„ ƒZ&d@dA„ Z'e	dBdC„ ƒZ(dDdE„ Z)dFS )JÚTestSyncManagerTypesc                 C   s   |   ¡ | _| j ¡  d | _d S r   )Úmanager_classrV   r›   r-  rl   r   r   r   r1    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   r3    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›   rP  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 rR  )rV   r¸   rü   rQ  r  r-   ©rG   r  r   r   r   r  L  s   
zTestSyncManagerTypes.test_eventc                 C   ó   |  ¡  d S r   ©rÃ  rS  r   r   r   Ú
_test_lockS  rI  zTestSyncManagerTypes._test_lockrÂ  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )r:  rV   rQ  rW  rÄ  rù   rÑ   ©rG   Zlnamer  r   r   r   rÈ  W  s   zTestSyncManagerTypes.test_lockc                 C   ó   |  ¡  | ¡  d S r   ©rÃ  rÄ  rS  r   r   r   Ú_test_rlock]  ó   z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r:  rV   rQ  r[  rX  r   r   r   rÊ  b  ó   zTestSyncManagerTypes.test_rlockc                 C   rU  r   rV  rS  r   r   r   rÐ  f  rI  z$TestSyncManagerTypes._test_semaphorerÑ  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r:  rV   rQ  rÐ  rÄ  )rG   Úsnamer  r   r   r   rÒ  j  s   z#TestSyncManagerTypes.test_semaphorec                 C   ru  )NrÔ  )r^  )rÒ  rl   r   r   r   rÕ  o  r+  z+TestSyncManagerTypes.test_bounded_semaphorec                 C   rY  r   rZ  rS  r   r   r   Ú_test_conditionr  r\  z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rV   râ  rQ  r_  rT  r   r   r   Útest_conditionw  s   
z#TestSyncManagerTypes.test_conditionc                 C   rU  r   )rK  rS  r   r   r   Ú_test_barrier{  s   z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S rp   )rV   r.  rQ  ra  rT  r   r   r   r:  €  rN  z!TestSyncManagerTypes.test_barrierc                 C   s*   |	 W d   ƒ d S 1 sw   Y  d S r   r   rS  r   r   r   Ú
_test_pool„  s   "ÿzTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nrˆ  r[  )rV   rÔ  rQ  rb  rT  r   r   r   Ú	test_poolŠ  r]  zTestSyncManagerTypes.test_poolc                 C   r[  r   r   rS  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   rQ  rd  )rG   Zqnamer  r   r   r   Ú
test_queue˜  s   

zTestSyncManagerTypes.test_queuec                 C   rÏ  )Nrž  )re  rl   r   r   r   Útest_joinable_queue   r)  z(TestSyncManagerTypes.test_joinable_queuec                 C   s   |  ¡  | ¡  |D ]}q
d S r   )rù  Úreverse)r“   r›  rc  r   r   r   Ú
_test_list£  s
   ÿzTestSyncManagerTypes._test_listc                 C   s6   | j  ¡ }| d¡ |  | j|¡ |  t|ƒd¡ d S )Nrq   r   )rV   r¼   rñ   rQ  rh  ra   r„   rT  r   r   r   r™  ¯  s   

zTestSyncManagerTypes.test_listc                 C   r[  r   r   rS  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¨  rQ  ri  ra   r„   rT  r   r   r   r¬  Á  s   
zTestSyncManagerTypes.test_dictc                 C   ro   rÓ  )rü   rS  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   rQ  rj  ra   rb   r¾   rT  r   r   r   rt  Î  s   zTestSyncManagerTypes.test_valuec                 C   r[  r   r   rS  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‰  rQ  rk  rT  r   r   r   rŒ  Û  s   zTestSyncManagerTypes.test_arrayc                 C   r[  r   r   rS  r   r   r   Ú_test_namespaceß  r+  z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S r  )rV   r¿  rc  rd  rQ  rl  rT  r   r   r   rÀ  ä  s   
z#TestSyncManagerTypes.test_namespaceNrË  )rÑ  )r   )*rQ   rR   rS   r   r&  rª  rG  r1  r3  rM  rÓ  rØ  rP  rQ  r  r  rW  rÈ  r[  rÊ  rÐ  rÒ  rÕ  r_  r`  ra  r:  rb  rc  rd  re  rf  rh  r™  ri  r¬  rj  rt  rk  rŒ  rl  rÀ  r   r   r   r   rF     sf    












	





rF  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   rt  rl   r   r   r   Útest__all__ì  s   
ÿzMiscTestCase.test__all__N)rQ   rR   rS   rp  r   r   r   r   rm  ë  rv   rm  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    rr  rs  rM  rN  rÁ   )r“   rU   rW   r   r   r   rØ  ü  s   
zBaseMixin.tearDownClassN)rQ   rR   rS   rM  rÓ  rØ  r   r   r   r   rq  ö  s
    
rq  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¸   r.  r   r‰  ro  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  TrJ  rK  rL  r   z5Shared objects which still exist at manager shutdown:)rJ   rK   r„   r   rº   r²   r¯  r   rM  rN  r  r  rV   Z_number_of_objectsZ_debug_infor^  rœ   rÒ  rØ  )r“   rO  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¸   r.  r   r‰  r¼   r¨  r¿  rM  rÔ  rÓ  rØ  r&  r   r   rÖ  r   rv  '  s.    
rv  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¸   r.  r   r‰  r   r   r   r   ry  d  s&    ry  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   >   rV   rW   rU   ZWithrY   ÚMixinc                   @   rÌ  ©z*install_tests_in_module_dict.<locals>.TempNrÎ  r   r   r   r   ÚTemp‹  rX  r|  rV   r{  c                   @   rÌ  r{  rÎ  r   r   r   r   r|  “  rX  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    Ú_cleanuprr  r   rÁ   r  r  r>   r?   r@   rþ   r  r  rÉ  r~  rA   r
   Úget_temp_dirry  rz  r~  rx  ©rs  Ú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  rt  rY   ru  r"  )r¯  r   r$  r   r  rü   r    rr  rM  rN  rÁ   rJ   r²   r
   Ú_cleanup_tests)Z
need_sleeprU   rW   )rs  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newnamerz  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…  r@  r
  rw  r  r  r9  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.managersr5  Ú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-  r8  rM  rN  r  rO  rT  rU  rW  Úregisterr\  r   rh  ri  rj  rk  rr  rm  rŠ  r|  r…  rƒ  rº  rÇ  rÍ  rN  rÜ  rë  r  r  r  rJ  r‰  rh  rx  r‰  r  r–  r¦  r§  r°  r±  r²  r³  r´  r»  rÄ  r×  rÝ  rè  rï  rñ  rô  rþ  r
  r‘  r  r4  r<  rF  rm  rq  rÿ  rv  ry  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=