o
    °ó®gIí ã                   @   sÖ  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ e  d	¡Z!e "¡  d dl#Z#d dl$Z%d dl&Z%d dl'Z%d dl(Z%d dl)Z%d dl*Z%d d
l%m+Z+ zd dl%m,Z, e,j-Z.W n e/yÇ   dZ.Y nw zd dl0m1Z1m2Z2 dZ3W n e/yß   dZ3Y nw z
d dl%m4Z4 dZ5W n e/yõ   dZ5Y nw zd dl6Z6W n e/y   dZ6Y nw dd„ Z7dd„ Z8dd„ Z9ej:dkr%d dl%m;Z; dd„ Z<e+j=Z>dZ?dZ@e@r5d\ZAZBZCnd\ZAZBZCeDe!ddƒ ZEejFdkZGd dl$mHZH d d!„ ZIze Jd"¡ZKW n   d#ZKY d$d%gZLzd d&lMmNZNmOZOmPZPmQZQ W n e/y‚   eRZNd ZO ZPZQY nw d'd(„ ZSG d)d*„ d*eRƒZTG d+d,„ d,eRƒZUd-d.„ ZVG d/d0„ d0ƒZWG d1d2„ d2eUƒZXG d3d4„ d4e%jYƒZZG d5d6„ d6eUƒZ[d7d8„ Z\d9d:„ Z]G d;d<„ d<eUƒZ^G d=d>„ d>eUƒZ_G d?d@„ d@eUƒZ`G dAdB„ dBeUƒZaG dCdD„ dDeUƒZbG dEdF„ dFeRƒZcdGdH„ ZdG dIdJ„ dJeRƒZeG dKdL„ dLeRƒZfG dMdN„ dNeUƒZgG dOdP„ dPeUƒZhG dQdR„ dReUƒZiG dSdT„ dTeUƒZjdãdVdW„ZkdXdY„ ZldZd[„ Zmd\d]„ ZnG d^d_„ d_eRƒZoG d`da„ daepƒZqdbdc„ ZrG ddde„ deeUƒZsdfdg„ Ztdhdi„ ZuG djdk„ dkeUƒZvG dldm„ dmeUƒZwd dnl(mxZxmyZymzZz G dodp„ dpeRƒZ{dqdr„ Z|G dsdt„ dteyƒZ}G dudv„ dvexƒZ~e~jdwe{dx e~jdye{dzd{ e~jdre|e}d| G d}d~„ d~eUƒZ€e ¡ Z‚dd€„ ZƒG dd‚„ d‚exƒZ„e„jd€eƒdx G dƒd„„ d„exƒZ…e… d€¡ d…Z†G d†d‡„ d‡eUƒZ‡e ˆdˆ¡G d‰dŠ„ dŠeUƒƒZ‰e7d‹ƒZŠG dŒd„ deUƒZ‹G dŽd„ deUƒZŒG dd‘„ d‘eUƒZG d’d“„ d“eUƒZŽe  e.d”¡e ˆdˆ¡G d•d–„ d–eUƒƒƒZG d—d˜„ d˜eUƒZ‘G d™dš„ dšeNƒZ’G d›dœ„ dœeUƒZ“e  e5d¡e ˆdˆ¡G dždŸ„ dŸeUƒƒƒZ”G d d¡„ d¡eUƒZ•G d¢d£„ d£e j–ƒZ—G d¤d¥„ d¥eUƒZ˜G d¦d§„ d§eUƒZ™G d¨d©„ d©e j–ƒZše ˆdˆ¡G dªd«„ d«e j–ƒƒZ›d¬d­„ Zœe ˆdˆ¡G d®d¯„ d¯e j–ƒƒZd°d±„ Zžd²d³„ ZŸd´dµ„ Z d¶d·„ Z¡G d¸d¹„ d¹eRƒZ¢G dºd»„ d»e j–ƒZ£G d¼d½„ d½e j–ƒZ¤G d¾d¿„ d¿e j–ƒZ¥G dÀdÁ„ dÁe j–ƒZ¦G dÂdÃ„ dÃe j–ƒZ§G dÄdÅ„ dÅe j–ƒZ¨G dÆdÇ„ dÇe j–ƒZ©G dÈdÉ„ dÉe j–ƒZªG dÊdË„ dËe j–ƒZ«G dÌdÍ„ dÍe j–ƒZ¬e  ­ejFdkdÎ¡G dÏdÐ„ dÐe j–ƒƒZ®G dÑdÒ„ dÒe j–ƒZ¯G dÓdÔ„ dÔe j–ƒZ°e ˆdˆ¡G dÕdÖ„ dÖe j–ƒƒZ±G d×dØ„ dØe j–ƒZ²G dÙdÚ„ dÚeRƒZ³G dÛdÜ„ dÜe³ƒZ´G dÝdÞ„ dÞe³ƒZµG dßdà„ dàe³ƒZ¶dádâ„ Z·dS )äé    N)Úsupport)Úhashlib_helper)Úimport_helper)Ú	os_helper)Úsocket_helper)Úthreading_helper)Úwarnings_helperÚ_multiprocessing)Úutil)Ú	reductionF)ÚValueÚcopyT)Úshared_memoryc                 C   ó
   |   d¡S )NÚlatin)Úencode)Ús© r   úP/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/_test_multiprocessing.pyr   L   ó   
r   c                 C   s&   t | tjjƒr|  ¡  |  ¡  d S d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueP   s   þr   c                 C   s   t  | ¡ d S r   )r   r   )Úprocessr   r   r   Újoin_processV   s   r!   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r#   Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlink_   ó   r'   çš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)r)   r)   r)   ÚHAVE_BROKEN_SEM_GETVALUEÚwin32©Úwaitc                 C   s    |d ur
|dk r
d }t | g|ƒS )Nç        r,   )ÚhandleÚtimeoutr   r   r   Úwait_for_handle{   s   r1   ÚSC_OPEN_MAXé   Ú__main__z$test.test_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc               	   C   sN   d} zt  d¡}W n ttfy   Y dS w |dks|| kr dS t d|  ¡‚)zACheck that the system supports enough semaphores to run the test.r3   ÚSC_SEM_NSEMS_MAXNéÿÿÿÿzHThe OS doesn't support enough semaphores to run the test (required: %d).)ÚosÚsysconfÚAttributeErrorÚ
ValueErrorÚunittestÚSkipTest)Z	nsems_minZnsemsr   r   r   Úcheck_enough_semaphores“   s   þÿrA   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTimingWrapperc                 C   ó   || _ d | _d S r   )ÚfuncÚelapsed)ÚselfrE   r   r   r   Ú__init__¨   ó   
zTimingWrapper.__init__c                 O   s:   t  ¡ }z| j|i |¤ŽW t  ¡ | | _S t  ¡ | | _w r   )ÚtimeÚ	monotonicrE   rF   )rG   ÚargsÚkwdsÚtr   r   r   Ú__call__¬   s    zTimingWrapper.__call__N©Ú__name__Ú
__module__Ú__qualname__rH   rO   r   r   r   r   rC   ¦   s    rC   c                   @   s,   e Zd ZdZdd„ Zdd„ Zdd„ ZeZdS )	ÚBaseTestCase)Ú	processesÚmanagerÚthreadsc                 C   s   t r|  ||d¡ d S d S ©Né   )ÚCHECK_TIMINGSÚassertAlmostEqual©rG   ÚaÚbr   r   r   ÚassertTimingAlmostEqual»   s   ÿz$BaseTestCase.assertTimingAlmostEqualc                 G   s.   z||Ž }W n
 t y   Y d S w |  ||¡S r   )ÚNotImplementedErrorÚassertEqual)rG   ÚvaluerE   rL   Úresr   r   r   ÚassertReturnsIfImplemented¿   s   ÿz'BaseTestCase.assertReturnsIfImplementedc                 G   ó   t dƒ‚)Nz#shouldn't try to pickle a test case)r`   )rG   rL   r   r   r   Ú
__reduce__É   ó   zBaseTestCase.__reduce__N)rQ   rR   rS   ÚALLOWED_TYPESr_   rd   rf   Ú__reduce_ex__r   r   r   r   rT   ·   s    
rT   c                 C   sZ   z|   ¡ W S  ty,   z| jW  Y S  ty+   z| jW  Y  Y S  ty*   t‚w w w r   )Ú	get_valuer=   Z_Semaphore__valueÚ_valuer`   ©rG   r   r   r   rj   Ò   s   
ÿýýrj   c                   @   ó   e Zd Zdd„ ZdS )ÚDummyCallablec                 C   s   t |tƒsJ ‚| d¡ d S ©Né   )r   rn   Úput)rG   ÚqÚcr   r   r   rO   ã   s   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   rw   ©ÚtargetT©r‰   r   F)
rx   ry   rz   Ú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{   rq   r%   rx   r   r|   Úpid)Úclsrr   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   rw   F©Úduplex©r‰   rL   )rx   ry   rz   Ú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   rw   Fr’   r”   ©r0   z(Could not communicate with child processÚaliveú	not alive)rx   ry   rz   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{   rx   ra   r|   r~   ÚassertNotInÚactive_childrenr}   ÚtypeÚlistr…   r™   ÚassertInÚgetr%   r   rš   r   )rG   rr   Ú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   rw   rY   r”   )rx   ry   rz   Ú	threadingÚmain_threadÚ	native_idr   r‹   Ú"_test_process_mainthread_native_idr™   r¼   rš   r   ÚassertNotEqual)rG   Zcurrent_mainthread_native_idrr   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Á   rq   )r‘   rr   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ˆ  ó   z_TestProcess._sleep_somec                 C   s   t  |¡ d S r   rÈ   )r‘   Údelayr   r   r   Ú_test_sleepŒ  rË   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   rw   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)rx   ry   rz   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   ó   |  d¡ d S )Nç      $@r,   ©r‘   Úeventr   r   r   Ú_test_sentinel  rË   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   rw   r”   r.   r¦   rY   )rx   ry   rz   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‘   Úrcrr   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   rw   rr   )r‰   rµ   TFr   )rx   ry   rz   r   r‹   r  r   r™   ra   r~   rù   r>   r   rq   rš   r…   r­   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )rG   rr   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   rw   Úspawnrp   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)rx   ry   rz   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”   rp   )rn   r  r  r   r‹   r™   rš   r  ra   r¼   r   )rG   rs   r  rr   rž   r   r   r   Útest_lose_target_ref^  s   
z!_TestProcess.test_lose_target_refc                 C   s   |  t ¡ ¡ | ¡  d S r   )rq   r   Zfd_countr-   )rG   Úevtrr   r   r   r   Ú_test_child_fd_inflationj  ó   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   rw   Úforkrp   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r”   )r‹   r  r  ©r  rr   rG   r   r   r    s    ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    ó   g | ]}ˆ   ¡ ‘qS r   ©r¼   r  ©rr   r   r   r  …  ó    rY   )rx   ry   rz   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   rw   r”   )
rx   ry   rz   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   sT   |  ¡ D ]\}}|dkrt ¡ }| ¡  n|dksJ ‚d }tt|d ƒ q| ¡  d S )Nr   Úremove)Ú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”   )r2  r3  r   Úgetattrrþ   r4  r¶   r‹   r8  r™   rš   r}   r-  ra   r…   )rG   Zstreamsr5  r7  Ú
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 )Nr9  )r   r0  r”   r   )r<  rþ   r¶   r‹   r8  r™   rš   r}   r-  ra   r…   r4  )rG   r5  r6  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   rw   Ú
forkserverr   )Ú_forkserverr#  r”   ç       @)r   éÿ   )rx   ry   rz   r   r  Zmultiprocessing.forkserverrC  Úensure_runningr¶   r‹   r@  r™   Z_forkserver_pidr;   râ   rJ   r°   rš   r}   r-  ra   r…   r»   )
rG   Úsignumr  rC  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   )rH  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%   rH  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/  r8  r>  r?  r@  rH  rJ  rL  r   r   r   r   ru   è   sl    
	


(



3


 #

&ru   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   )rT  r   ÚiterrS  r›   r¤   Úupper©rG   r   r   r   r   Úrun  s   
z_UpperCaser.runc                 C   s&   t |ƒtu sJ ‚| j |¡ | j ¡ S r   )r¹   ÚstrrT  r¤   r›   rW  r   r   r   Úsubmit  s   
z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )rT  r¤   r   rS  rl   r   r   r   Ústop!  s   
z_UpperCaser.stopN)rQ   rR   rS   rH   rX  rZ  r[  r   r   r   r   rR    s
    rR  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)rR  r   r™   ra   rZ  r[  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   rw   r”   úutf-8©ÚencodingÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rx   ry   rz   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©ra  ÚclosefdrY   r   )r;   rf  ÚO_WRONLYÚO_CREATÚO_EXCLrþ   r;  )r‘   rh  Úfdr   r   r   re  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 )Nrl  r_  Frm  )r;   rf  ro  rp  rq  rþ   r;  rÿ   )r‘   Úreasonrh  rr  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   rw   )rY   r²   é   zignore thisr”   TrY   r_  r`  )))TrY   )©Fr   ))é   rw  )r   r   )r   r   rÑ   )rx   ry   rz   r   rc  rû   rd  r‹   rt  r   r™   r!   ra   r…   rf  rg  ÚrstriprY  r;   ÚsubTestrþ   rÿ   )	rG   rh  rs  rž   ri  ZcontentÚcasesrL   rò   r   r   r   Útest_sys_exitQ  s6   
þ
ÿûÿz%_TestSubclassingProcess.test_sys_exitN)
rQ   rR   rS   rh   r^  rk  rN  re  rt  r{  r   r   r   r   r\  &  s    	

r\  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}  )rr   Ú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²   ru  é   rp   é   r   r¦   )r   r¶   r‹   r‡  r   r™   ra   r~  r‚  rq   Ú
put_nowaitrJ   r°   ré   rC   rù   ÚpyqueueÚFullr_   rF   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3rü   r-   rš   r   )rG   ZMAXSIZEr   r…  r†  r.  rq   r‹  r   r   r   Útest_put”  sR   þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr²   ru  r‰  rp   )r-   rq   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²   ru  rY   r¦   r‰  rp   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ì   rq   )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ì   rq   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   rp   r²   )r   ra   r}  r`   ry   rq   r¼   r   ©rG   rr   r   r   r   Ú
test_qsize2  s   ÿ

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )rU  r¼   rJ   r°   ré   Ú	task_done)r‘   rr   Ú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™   rq   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.pyrl  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_cwdrf  Úwriter   ZDirsOnSysPathr;   ÚgetcwdÚ
__import__rŒ  r•  Úfail)rG   Úmodule_nameri  r   r   r   Útest_no_import_lock_contention^  s    
ÿÿ€ýó"óz)_TestQueue.test_no_import_lock_contentionc                 C   sH   t  ¡ }t ¡ }|  tj|jdd¡ t ¡ | }|  |d¡ t	|ƒ d S )NTgš™™™™™É?r)   )
r   r   rJ   rK   rù   rŒ  r•  r¼   ÚassertGreaterEqualr   )rG   rr   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   rw   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ƒ  rt   r®  Tr¦   rY   rˆ  )rx   ry   rz   ÚobjectÚtestr   Úcaptured_stderrr   rq   r}   r¼   r±   r   ra   r}  r`   r|  )rG   r®  rr   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   rw   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc                 S   s   d| _ d| _d S ©NF)Úreduce_was_calledÚ on_queue_feeder_error_was_calledrl   r   r   r   rH   ¦  rI   zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s
   d| _ t‚©NT)rµ  r=   rl   r   r   r   rf   ª  s   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rQ   rR   rS   Ú__doc__rH   rf   r   r   r   r   r®  ¤  s    r®  c                       s    e Zd ZdZe‡ fdd„ƒZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                    s&   t | tƒrt |ˆ ƒrd|_d S d S d S r·  )r   r=   r¶  )r½   rœ  ©r®  r   r   Ú_on_queue_feeder_error°  s
   
ÿ
þz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rQ   rR   rS   r¸  Ústaticmethodrº  r   r¹  r   r   Ú	SafeQueue®  s    r¼  )ÚctxTr¦   )rx   ry   rz   r¯  r   r   r   r°  r   r±  Úget_contextrq   r}   r¼   r±   rµ  r¶  )rG   r¼  Znot_serializable_objrr   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>   rq   r¼   r™  r   r   r   Ú$test_closed_queue_put_get_exceptionsÄ  s   ÿ
ÿüz/_TestQueue.test_closed_queue_put_get_exceptionsN)rQ   rR   rS   rN  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                   @   rQ  )
Ú_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²   ru  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   rw   r   Fr.   Tr¦   )rx   ry   rz   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   ri    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   )rx   Ú_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‹   ri  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   ru  r”   Tr„  c                      ó   t ˆ ƒS r   ©rj   r   ©rÝ  r   r   Ú<lambda>£  ó    z0_TestCondition.test_notify_all.<locals>.<lambda>)rå  rÔ  rì   r‹   ri  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   ru  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‹   ri  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¦   ru  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×   rI  )r‘   rs   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   rs   rž   r   r   r   Útest_wait_result0  s   

"õz_TestCondition.test_wait_resultr   )rQ   rR   rS   rN  ri  rß  rä  rç  rï  rñ  rª  rù  r?   rO  Ú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  rA  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   rN  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  rË   r  c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚBunchz
    A bunch of threads.
    Fc           
      C   s’   || _ || _|| _| ¡ | _| ¡ | _| ¡ | _|s| j ¡  g }t	|ƒD ]}|j
| jd}d|_| ¡  | |¡ q%dd„ }	t | |	|¡| _dS )z¹
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        rˆ   Tc                 S   s   | D ]}|  ¡  qd S r   )rš   )rW   rž   r   r   r   Úfinalize®  s   
ÿz Bunch.__init__.<locals>.finalizeN)ri  rL   rð  Ú	DummyListÚstartedÚfinishedr¶   Ú	_can_exitrü   rì   r‹   Útaskr   r™   rð   r  r  Ú
_finalizer)
rG   Ú	namespaceri  rL   rð  Zwait_before_exitrW   rï   rž   r  r   r   r   rH   ˜  s    



zBunch.__init__c              	   C   sv   t  ¡ }| j |¡ z| j| jŽ  W | j |¡ | j d¡ | j 	¡ s%J ‚d S | j |¡ | j d¡ | j 	¡ s:J ‚w )Né   )
r;   r„   r  rð   ri  rL   r   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.closeNrv  )
rQ   rR   rS   r¸  rH   r"  r(  r*  r+  r   r   r   r   r   r  ”  s    

r  c                   @   rB   )Ú
AppendTruec                 C   s
   || _ d S r   )rœ  )rG   rœ  r   r   r   rH   Î  r   zAppendTrue.__init__c                 C   s   | j  d¡ d S r·  )rœ  rð   rl   r   r   r   rO   Ð  ó   zAppendTrue.__call__NrP   r   r   r   r   r-  Í  ó    r-  c                   @   sþ   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	e
dd„ ƒZd6dd„Zdd„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdd„ Ze
dd „ ƒZd!d"„ Ze
d#d$„ ƒZd%d&„ Ze
d'd(„ ƒZd)d*„ Ze
d+d,„ ƒZd-d.„ Zd/d0„ Ze
d1d2„ ƒZd3d4„ Zd5S )7Ú_TestBarrierz$
    Tests for Barrier objects.
    rp   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   )r3  Ú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   )rx   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   ri  rL   r^   r   r   r   Úrun_threadsê  s
   
z_TestBarrier.run_threadsc                 C   s¶   |j }|| jks
J ‚t|ƒD ]2}|d  d¡ t|d ƒ|| ks#J ‚| ¡  |d  d¡ t|d ƒ|d | ks<J ‚| ¡  qz	|jdksIJ ‚W n	 tyS   Y nw |jrYJ ‚d S )Nr   TrY   )	Úpartiesr  rì   rð   r‚   r-   Ú	n_waitingr`   Úbroken)r‘   r3  Úresultsrð  Úmrï   r   r   r   Ú	multipassò  s   
ÿz_TestBarrier.multipassrY   c                 C   s*   |   ¡ |   ¡ g}|  | j| j||f¡ dS )z;
        Test that a barrier is passed in lockstep
        N)r  r7  r=  r3  )rG   Úpassesr;  r   r   r   Útest_barrier  s   z_TestBarrier.test_barrierc                 C   r   )zC
        Test that a barrier works for 10 consecutive runs
        rÕ   N)r?  rl   r   r   r   Útest_barrier_10
  s   
z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r-   rq   )r‘   r3  r   rc   r   r   r   Ú_test_wait_return_f  ó   z _TestBarrier._test_wait_return_fc                    sR   |   ¡ ‰ |  | j| jˆ f¡ ‡ fdd„t| jƒD ƒ}|  | d¡d¡ tˆ ƒ dS )z9
        test the return value from barrier.wait
        c                    r  r   r  r  r   r   r   r    r   z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rY   N)	r   r7  rA  r3  rì   r  ra   Úcountr   ©rG   r;  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‘   r3  r;  r   r   r   Ú_test_action_f  s   ÿz_TestBarrier._test_action_fc                 C   sB   |   ¡ }| j| jt|ƒd}|  | j||f¡ |  t|ƒd¡ dS )z,
        Test the 'action' callback
        )r6  rY   N)r  r1  r  r-  r7  rF  ra   r‚   )rG   r;  r3  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¿   ÚBrokenBarrierErrorr5  )r‘   r3  Úresults1Úresults2rï   r   r   r   Ú_test_abort_f.  s   ÿz_TestBarrier._test_abort_fc                 C   s^   |   ¡ }|   ¡ }|  | j| j||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  | jj¡ dS )zK
        Test that an abort will put the barrier in a broken state
        r   rY   N)	r  r7  rL  r3  ra   r‚   r  r}   r:  )rG   rJ  rK  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  r9  rJ   r°   Úresetrð   r¿   rI  )r‘   r3  rJ  rK  Úresults3rï   r   r   r   Ú_test_reset_fG  s   
ÿ
ÿz_TestBarrier._test_reset_fc                 C   sl   |   ¡ }|   ¡ }|   ¡ }|  | j| j|||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   rY   N)r  r7  rP  r3  ra   r‚   r  )rG   rJ  rK  rO  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 rH  )r-   r  rÐ   rð   r¿   rI  r5  rN  )r‘   r3  Úbarrier2rJ  rK  rO  rï   r   r   r   Ú_test_abort_and_reset_ff  s    ÿz$_TestBarrier._test_abort_and_reset_fc                 C   sz   |   ¡ }|   ¡ }|   ¡ }|  | j¡}|  | j| j||||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ dS )zF
        Test that a barrier can be reset after being broken.
        r   rY   N)r  r1  r  r7  rS  r3  ra   r‚   )rG   rJ  rK  rO  rR  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¿   rI  rð   ©r‘   r3  r;  rï   r   r   r   Ú_test_timeout_f‹  s   
ÿz_TestBarrier._test_timeout_fc                 C   s4   |   ¡ }|  | j| j|f¡ |  t|ƒ| jj¡ dS )z$
        Test wait(timeout)
        N)r  r7  rW  r3  ra   r‚   r8  rD  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²   rU  T)r-   r2  r  rJ   r°   r¿   rI  rð   rV  r   r   r   Ú_test_default_timeout_fž  s   
ÿz$_TestBarrier._test_default_timeout_fc                 C   s@   | j | jdd}|  ¡ }|  | j||f¡ |  t|ƒ|j¡ dS )z4
        Test the barrier's default timeout
        r#  r¦   N)r1  r  r  r7  rX  ra   r‚   r8  )rG   r3  r;  r   r   r   Útest_default_timeout©  s   z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rX   )r1  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‘   r3  r>  ÚconnrÊ  rï   r   r   r   Ú_test_thousand_f·  s   ÿþz_TestBarrier._test_thousand_fc                 C   s¦   | j dkr|  d | j ¡¡ d}|  ¡ }|  d¡\}}t| jƒD ]}| j| j| j	|||fd}| 
¡  |  |j¡ q t|ƒD ]}t| jƒD ]
}|  | ¡ |¡ qEq>d S )NrV   rw   éè  Fr”   )rx   ry   rz   rÅ  r—   rì   r  r‹   r\  r3  r™   rû   rš   ra   r›   )rG   r>  rÊ  r[  rS  Újrž   rï   r   r   r   Útest_thousand¾  s    
ÿÿÿz_TestBarrier.test_thousandN)rY   )rQ   rR   rS   r¸  r  r2  r4  r6  r  r7  rN  r=  r?  r@  rA  rE  rF  rG  rL  rM  rP  rQ  rS  rT  rW  rª  rX  rY  rZ  r\  r_  r   r   r   r   r0  Ô  sJ    




	






	
r0  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ÿÿÿéê   )rr   ì        ì        rs   ÚxÚyc                 C   ó   t s	|  d¡ d S d S ©Nz%requires multiprocessing.sharedctypes©r  ry   rl   r   r   r   r4  Þ  ó   ÿ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                    rq  r   )r   rs  rl   r   r   r  í  ru  rY   r”   Tr²   )	rm  rl  ra   rb   r‹   rŒ   r   r™   rš   )rG   Úrawrn  ro  rp  r.  r   rl   r   Ú
test_valueè  s    
ÿ
ÿÿz_TestValue.test_valuec                 C   ó   | j dd d S ©NT)rv  )rw  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ï   rp   ©rÊ  FÚget_lockÚget_objZnavalue)
r   r|  r}  rÅ  ra   r   rÖ   rù   r=   rr  )rG   Zval1Úlock1Úobj1Zval2Úlock2Úobj2rÊ  Zval3Úlock3Úobj3Úarr4Úarr5r   r   r   Útest_getobj_getlockþ  s$   z_TestValue.test_getobj_getlockNrv  )rQ   rR   rS   rh   r   rm  r4  rN  rŒ   rw  rz  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   ri    s   ÿz_TestArray.fNzrequires _ctypesFc                 C   sü   g d¢}|r|   d|¡}n|  d|¡}|  t|ƒt|ƒ¡ |  |d |d ¡ |  t|dd… ƒt|dd… ƒ¡ t dg d¢¡ |dd…< |dd…< |  t|d d … ƒ|¡ |  |¡ | j| j|fd	}d
|_| 	¡  | 
¡  |  t|d d … ƒ|¡ d S )N)
i¨  ir  i¦  i5  é–   éé   i$  iÖ  iÊ  i?  rï   ru  r²   rŠ  )rY   r²   ru  r‰  r‰  rw  r”   T)ÚRawArrayÚArrayra   r‚   rº   Úarrayri  r‹   r   r™   rš   )rG   rv  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Õ   ru  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   rx  ry  )r  rl   r   r   r   Útest_rawarrayI  rK  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Õ   r{  Fr|  r}  Znotalock)rŒ  rº   rì   r|  r}  rÅ  ra   r   rÖ   rù   r=   r‹  )rG   Zarr1r~  r  Zarr2r€  r  rÊ  Zarr3r‚  rƒ  r„  r…  r   r   r   Útest_getobj_getlock_objM  s(   ÿz"_TestArray.test_getobj_getlock_objrv  )rQ   rR   rS   rh   rN  ri  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Õ   rp   r²   )r²   ru  r‰  )
r   rY   r²   ru  r‰  r   rY   r²   ru  r‰  r„  )r   rY   r²   ru  r‰  r   rY   r²   ru  r‰  rp   r„  c                 S   ó   g | ]}|d d … ‘qS r   r   )r  Úelementr   r   r   r  †  ó    z-_TestContainers.test_list.<locals>.<listcomp>)
r   rY   r²   ru  r‰  rp   r„  rŠ  rw  é	   r´   r   )r   rY   r²   ru  r‰  rp   r„  rŠ  rw  rš  r´   )rº   rì   ra   Úextendrð   )rG   r]   r^   ra  r½   ri  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ì   rU  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 )ru  )rº   rì   )r  Z_irl   r   r   r  ™  ó    z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>ru  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Úkeysrn  r1  )rG   ra  Ú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¨  rU  ra   r)  rù   rÐ   r  )rG   ra  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Õ   ru  )ÚwaterÚfeed)ÚpetsÚsuppliesr³  r¶  rp   ZblanketsrŠ  rµ  r±  é   r   r²  rY   ZmarmotséX   éc   r:   r´  )r«  ra   r)  r‚   rº   r€   )rG   rµ  r¶  ra  Ú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   rq   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   rY  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È   )rf  r-   r   r   r   Úsqr
	  s   
rÄ  c                 C   s   | | S r   r   ©rf  rg  r   r   r   Úmul	  rg   rÆ  c                 C   s   t  | ¡ tdd ƒ‚)Nrf  i   )rJ   r°   r>   r,   r   r   r   Úraise_large_valuerror	  r'  rÇ  c                 C   ó   | S r   r   ©rf  r   r   r   Úidentity	  r¬  rÊ  c                   @   r³  )ÚCountedObjectr   c                 C   s   |  j d7  _ t | ¡S rX   )Ún_instancesr¯  Ú__new__rÉ   r   r   r   rÍ  	  s   
zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rX   )r¹   rÌ  rl   r   r   r   Ú__del__	  s   zCountedObject.__del__N)rQ   rR   rS   rÌ  rÍ  rÎ  r   r   r   r   rË  	  s    rË  c                   @   ó   e Zd ZdS )ÚSayWhenErrorN©rQ   rR   rS   r   r   r   r   rÐ  "	  s    rÐ  c                 c   s:    |dkr	t dƒ‚t| ƒD ]}||krt dƒ‚|V  qd S )Nr:   zSomebody said when)rÐ  rì   )ÚtotalZwhenrï   r   r   r   Úexception_throwing_generator$	  s   €ýrÓ  c                       s  e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zed+d,„ ƒZd-d.„ Zed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z ‡  Z!S );Ú	_TestPoolc                    s   t ƒ  ¡  |  d¡| _d S ró  )ÚsuperÚ
setUpClassÚPoolÚpoolrÉ   ©Ú	__class__r   r   rÖ  /	  s   
z_TestPool.setUpClassc                    s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S r   )rØ  r­   rš   rÕ  ÚtearDownClassrÉ   rÙ  r   r   rÛ  4	  s   

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rp   rp   r   rf  ru  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º   rl  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º   rl  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²   )rx   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   rw   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	  rt   rí  rÕ   )	rx   ry   rz   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   rw   rY   r:   rÕ   ru  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ô  )	rx   ry   rz   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„  rU  r¦   )rØ  rø  rÄ  r  rC   r¼   rù   r   rï  r_   rF   rù  r   r   r   Útest_async_timeout•	  s   
z_TestPool.test_async_timeoutc              	   C   sÌ   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j  tttdƒƒ¡}tdƒD ]}|  t|ƒ|| ¡ q+|  t	|j
¡ | j jtttdƒƒdd}tdƒD ]}|  t|ƒ|| ¡ qP|  t	|j
¡ d S ©NrÕ   r]  rÇ   rÞ  )rØ  ÚimaprÄ  rº   rì   ra   rà  r  rù   ÚStopIterationrò  ©rG   rž  rï   r   r   r   Ú	test_imap›	  s   "z_TestPool.test_imapc                 C   s:  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ qA|  t|j	¡ | j ttddƒd	¡}t
d
ƒD ]}|  t|ƒ|| ¡ qd|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ q‡|  t|j	¡ d S )NrV   rw   rY   r:   rÕ   ru  r(  rŠ  r²   r„  r‰  )rx   ry   rz   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   rw   rY   r:   rÕ   ru  r(  rŠ  r²   )rx   ry   rz   rØ  r  rÄ  rÓ  rù   rÐ  rò  rº   rà  rì   r  r»   r0  )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   ru  )
rx   Ú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Þ  rD  )
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²   )rx   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)rx   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   )rx   ry   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)rx   ry   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   rN  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ë  ˜
  s    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ž   r3  rc   r   r2  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                    r0  rú  r   r1  r2  r   r   r3  ´
  rÔ   z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr4  )Úmultiprocessing.poolr6  r   r×  rì   rø  r.  rù   r¼   r}   r€   ZassertIsNotNoner  rb   r   rš   )rG   r6  rž   Z	iterationr3  rc   Úwrappedr   r2  r   Útest_unpickleable_result¬
  s   

z._TestPoolWorkerErrors.test_unpickleable_resultN)rQ   rR   rS   rh   r5  r9  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 )Nru  rÕ   ©Úmaxtasksperchildc                 S   ó   g | ]}|j ‘qS r   ©r   ©r  rl  r   r   r   r  È
  r  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rÇ   é2   c                 s   ó    | ]}|  ¡ 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origworkerpidsr;  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 )Nru  rY   r;  r„  g333333Ó?)r   r×  rì   rð   rø  rÄ  r   rš   rD  ra   r¼   )rG   rž   r;  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   Úoutrj  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   rF  rG  rN  r   r   r   r   r:  Â
  s
    r:  )ÚBaseManagerÚ	BaseProxyr  c                   @   rÃ  )ÚFooBarc                 C   ró  )Núf()r   rl   r   r   r   ri    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   ri  rS  rU  r   r   r   r   rQ    rõ  rQ  c                  c   s    t dƒD ]} | |  V  qd S rÞ  )rì   )rï   r   r   r   Úbaz  s   €ÿrV  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   rW    s    rW  c                   @   rÏ  )Ú	MyManagerNrÑ  r   r   r   r   rY    ó    rY  ÚFoo)ÚcallableÚBar)ri  rU  )r\  Zexposed)r\  Z	proxytypec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú_TestMyManagerr–  c                 C   s<   t ƒ }| ¡  |  |¡ | ¡  |  |jjdtj f¡ d S rú  )	rY  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ú  )rY  r_  r»   ra  r…   r×   rÞ   rb  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ú  )rY  r™   r_  ra   ra  r…   rb  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>)ri  rS  rU  c                    rf  r   rg  rh  )Úbarr   r   r  F  r   ri  rS  rU  rR  rT  c                 S   s   g | ]}|| ‘qS r   r   r  r   r   r   r  U  r   rÕ   )r[  r]  rV  ra   ri  rù   r>   rS  rX  r  rU  rº   rì   )rG   rV   rV  Zfoo_methodsZbar_methodsr   )ri  rÀ  r   r_  @  s    "z_TestMyManager.commonN)rQ   rR   rS   rh   rc  rd  re  r_  r   r   r   r   r^  "  s    r^  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queue]  r¬  rk  c                   @   ó   e Zd ZdZdS )ÚQueueManagerz$manager class used by server processN©rQ   rR   rS   r¸  r   r   r   r   rm  `  ó    rm  c                   @   rl  )ÚQueueManager2z@manager class which specifies the same interface as QueueManagerNrn  r   r   r   r   rp  d  ro  rp  Ú	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)rp  Ú
SERIALIZERÚconnectrk  rq   Útuplern  ©r‘   rv  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   ru  r”   T)r;   Úurandomrm  r   ÚHOSTrw  r™   rû   r`  r‹   r{  rv  r   rp  rx  rk  ra   r¼   rñ   rù   r  rq   rJ   r°   )rG   r|   rV   rž   Zmanager2r   r   r   r   Útest_remote  s"   
ÿÿz_TestRemoteManager.test_remote)	rQ   rR   rS   rh   rn  rñ   rN  r{  r  r   r   r   r   rr  k  s    
	rr  Úmd5c                   @   r  )Ú_TestManagerRestartc                 C   s,   t ||td}| ¡  | ¡ }| d¡ d S )Nru  rs  )rm  rw  rx  rk  rq   rz  r   r   r   r{  Ÿ  s   ÿz_TestManagerRestart._putterc              
   C   sF  t  d¡}ttjdf|td}z;| ¡ }|j}|j 	¡  | 
¡  | j| j|j|fd}| 
¡  | ¡  | ¡ }|  | ¡ d¡ ~W t|dƒrJ| ¡  nt|dƒrU| ¡  w w t||td}z| 
¡  |  |j¡ W d S  ty¢ } z,|jtjkry‚ t d¡ t||td}t|dƒr—|  |j¡ W Y d }~d S W Y d }~d S d }~ww )Nr|  r   ru  r”   rs  r`  rU  )r;   r}  rm  r   r~  rw  Z
get_serverrv  Úlistenerr   r™   r‹   r{  rš   rk  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   rN  r{  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 )%Ú_TestConnectionrv   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )rU  Ú
recv_bytesÚSENTINELÚ
send_bytesr   )r‘   r[  Úmsgr   r   r   Ú_echo×  s   z_TestConnection._echoc              
   C   sL  |   ¡ \}}| j| j|fd}d|_| ¡  g d¢}tdƒ}|d }t dttdƒƒ¡}| j	dk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   rt  Nrs  rÕ   rï   r‰  rU   r   ru  rŠ  z(                                        zexpected BufferTooShort, got %sFr:   r)   ÚXi   )(r—   r‹   r  r   r™   r   r  rº   rì   rx   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   r[  rS  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›   rx   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   r[  rS  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   rw   Úabcdefghijklmnopqrstuvwxyzrp   rŠ  rw  é   é   r‡  r   é   é   rY   r:   r‰  )
rx   ry   rz   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‘   rr  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_osfhandlero  r¢  r   )r‘   r[  ÚdataZcreate_dummy_fdsrï   rr  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)rx   ry   r—   r‹   r«  r   r™   rû   r   rd  rc  rf  r  r¨  Zget_osfhandler   Úsend_handler   rš   ra   rg  )rG   r[  rS  rž   ri  rr  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¯  )rx   ry   r—   r‹   r«  r   r™   rû   r   rd  rc  rf  r  rì   ÚMAXFDr¥  r¥  r;   r¦  r   r°  r   r   rš   ra   rg  )rG   r[  rS  rž   ri  rr  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   r[  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”   )rx   ry   r—   r‹   r·  r   r™   rù   rÐ   r   r§  rš   ©rG   r[  rS  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›   rx   r   Úclosedr}   rù   rƒ  r\   r   r   r   r  Ì  s"   

€û€ 
üz_TestConnection.test_contextNrv  )rQ   rR   rS   rh   rN  r  r˜  r›  rœ  r¢  r¥  r«  r?   rO  Ú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ƒ  rv  )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Ä  ÚClientrv  Úacceptr¤   ra   r›   rx   rù   rƒ  )rG   rº  rs   ra  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‚  Úclientra  r   r   r   Útest_abstract_socketñ  s   

þ€ÿ€ÿ
ÿz"_TestListener.test_abstract_socketN)rQ   rR   rS   rh   rÅ  r  r?   rO  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 )Ú_TestListenerClientrv   c                 C   s"   | j  |¡}| d¡ | ¡  d S )Nr´   )rÂ  rÇ  r¤   r   )r‘   rv  r[  r   r   r   rŒ     s   
z_TestListenerClient._testc                 C   sj   | j jD ].}| j j|d}| j| j|jfd}d|_| ¡  | ¡ }|  	| 
¡ d¡ | ¡  | ¡  qd S )NrÀ  r”   Tr´   )rÂ  rÃ  rÄ  r‹   rŒ   rv  r   r™   rÈ  ra   r›   rš   r   )rG   rÁ  rº  rž   r[  r   r   r   Útest_listener_client  s   
øz(_TestListenerClient.test_listener_clientc                 C   sj   | j  ¡ }| j| j|jfd}d|_| ¡  t d¡ | 	¡ }|  
| ¡ d¡ | ¡  | ¡  | ¡  d S )Nr”   TrY   r´   )rÂ  rÄ  r‹   rŒ   rv  r   r™   rJ   r°   rÈ  ra   r›   r   rš   )rG   rº  rž   r[  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Ç  rv  rÈ  r‹  r}   rª   r   )rG   Úfamrº  rs   r]   r   r   r   Útest_issue16955#  s   

øz#_TestListenerClient.test_issue16955N)	rQ   rR   rS   rh   rN  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 )Ú	_TestPollrv   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‘   r[  Ú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ï   rf  r   r   r   Útest_strings@  s   
ÿz_TestPoll.test_stringsc                 C   rô   ro   )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  rl  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Ø  rU  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Ô  rN  r×  rÛ  rÜ  rÝ  rß  rà  r   r   r   r   rÒ  .  s    


rÒ  r¬  c                   @   sP   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
dS )Ú_TestPicklingConnectionsr]  c                 C   s   ddl m} |jtjd d S )Nr   )Úresource_sharerr¦   )r   râ  r[  r   r«   )r‘   râ  r   r   r   rÛ  †  s   z&_TestPicklingConnections.tearDownClassc                 C   s–   |D ] }| j j|d}| |j¡ | ¡ }| |¡ | ¡  | ¡  qt tj	df¡}| | 
¡ ¡ | ¡ \}}| |¡ | ¡  | ¡  | ¡  d S )NrÀ  r   )rÂ  rÄ  r¤   rv  rÈ  r   ÚsocketÚcreate_serverr   r~  Úgetsocknamer›   )r‘   r[  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   )
rU  r›   rÂ  rÇ  r¤   rV  r   rã  rx  Úsendall)r‘   r[  rv  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   rV  r   rð   rš   )rG   rÃ  ZlconnZlconn0Zlprœ   Zrconn0ZrprÐ  rŒ  rv  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‘   r[  rl  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   r[  rS  rž   r  rl  r   r   r   Útest_accessç  s"   


z$_TestPicklingConnections.test_accessN)rQ   rR   rS   rh   rN  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Õ  r4  r   r  r  Ú_heapÚold_heapZHeaprl   rÙ  r   r   r4    s   
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )rò  r   r  r  rñ  rÕ  r6  rl   rÙ  r   r   r6    ó   z_TestHeap.tearDownc              
   C   sb  d}d}g }t jjj}d|_t|ƒD ]&}tt dd¡d ƒ}t j |¡}| 	|¡ t
|ƒ|kr7t |¡}||= ~q|j¯ g }d}	d}
t|j ¡ ƒD ] }|D ]\}}}| 	|j |¡|||| df¡ |	|| 7 }	qNqJ|j ¡ D ]!\}}|D ]\}}| 	|j |¡|||| df¡ |
|| 7 }
qvqp|  |	|
 tdd	„ |jD ƒƒ¡ | ¡  tt
|ƒd ƒD ]5}|| d d
… \}}}||d  d d
… \}}}||krÝ|  ||j| j¡ |  |d¡ q®|  ||¡ q®W d   ƒ n1 sîw   Y  t |¡ |r| ¡  |sû|  |j|j¡ |  t
|jƒd¡ |  t
|jƒd¡ |  t
|jƒd|j¡ |  t
|jƒd¡ d S )Néˆ  r@  r   rY   r]  ÚfreeÚoccupiedc                 s   s    | ]}|j V  qd S r   ©r  )r  Úarenar   r   r   r©  <  r   z&_TestHeap.test_heap.<locals>.<genexpr>ru  )r   r  r  rñ  Z_DISCARD_FREE_SPACE_LARGER_THANrì   ræ   ÚrandomÚlognormvariaterð   r‚   Ú	randranger  rº   Z_len_to_seqrn  Z_arenasÚindexZ_allocated_blocksr1  ra   ÚsumÚsortr  Úshuffler£  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rG   Z
iterationsZ	maxblocksZblocksr  rï   r  r^   rE  rõ  rö  r  rø  r™   r[  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   r4  r6  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 )Ú_Foorf  rg  Ú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   rh  ri  rj  rl   r   r   r   r4  {  rk  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   rf  rg  rì   r‚   )r‘   rf  rg  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Š  r{  gUUUUUUÕ?rd  ru  r²   ra  rÕ   rs   r(  r´   r”   Té   gUUUUUUå?re  r„  ç      @Z
hellohello)r   r7   r8   r  rŒ  rº   rì   r   rb   r‹   r  r   r™   rš   ra   r[   rf  rg  )
rG   rÊ  rf  rg  r  rÀ  rŽ  r
  rž   rï   r   r   r   Útest_sharedctypesŠ  s&   
z#_TestSharedCTypes.test_sharedctypesc                 C   rx  )NTr{  )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²   ç      @rd  r   )r  r   rf  rg  r  ra   r[   )rG   rÀ  ri  r   r   r   Ú	test_copy¤  s   z_TestSharedCTypes.test_copyNrv  )
rQ   rR   rS   rh   r4  rN  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   rY  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   )rY  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   rh  ©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;   rp  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory-  ó    r  Ztest01_nottherer:   )r  r   r  rû   rd  ra   r%   r¨  r  r‚   rë  r»   rY  Ú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”   rp   s   HELLO)r   r  rû   rd  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â   ra  r   r×   rI  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()
        rH  )r°  r   rI  rJ  r   rK  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>rp   rÕ   c                    s   g | ]}ˆ j |d ‘qS )r÷  )r  )r  r^  r2  r   r   r  –  r™  r|  é€   é   r   ©r%   r+   Úhowdy)r   r+  r,  rù   r>   r  r™   rì   r   r-  Úshmr%   ra   r‚   r¨  rë  r`  rþ   r  r%  )rG   ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2r/  r7  Z	absent_slr   r2  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)r6  ó   HoWdYgX9´ÈvqÀrÇ   NTr-  rŠ  r²   r   r6  z8s8sdqxxxxxx?xxxxxxxx?qÚignoreZ100rÇ   ru  r  Tr-  Zsomer‰  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srY   r9  u	   encodÃ©ess	   123456789s   adiosZtest03_duplicater5  éM   r:   ip  r‡  Úany)r   r-  rû   r7  rd  r»   r%   rY  rº   rù   Ú
IndexErrorZ_get_packing_formatra   rz   r‚   ÚwarningsÚcatch_warningsÚsimplefilterr>   rü  ry  rÁ  rC  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û   r7  rd  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)
        ú-ErH  r9  r)   r²   rp   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ÚPIPEr:  ÚreadlineÚstripÚdecoder­   r-   rJ   rK   r   r«   r°   Úminr   r  r%  r¬   r;   r%   r;  rg  r»   )rG   rL  rž   r%   ÚdeadlinerN   r.  rj  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%   r0  r1  r8  rA  rC  rN  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   r4  k  ró  z_TestFinalize.setUpc                 C   s   |   tj¡ tj | j¡ d S r   )r   r
   rP  ÚupdaterQ  rl   r   r   r   r6  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   r[  u  rZ  r[  )r]   rÑ   )r^   )rs   )Úd10rY   )rL   Úexitpriority)Úd01r   )Úd02)Úd03©r½   iöÿÿÿ)ÚSTOPiœÿÿÿ)r¯  r
   ÚFinalizer¤   Ú_exit_functionr   r;   Ú_exit)r‘   r[  r[  r]   r^   Zclose_brs   rT  rV  rW  rX  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>rZ  )r]   r^   rT  rX  rW  rV  r½   )	r—   r‹   r^  r   r™   rš   rU  r›   ra   )rG   r[  rS  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Ç   )rU  )r  r
   r[  rù  Úrandintrl   ©ra  r   r   rH   ª  s   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rQ   rR   rS   rH   r   rc  r   r   r[  ©  r  r[  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  rY  )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  )r[  r   r   Ú	<setcomp>Ä  r  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÕ   rp   )rì   rù  Úgetrandbitsr  r)  )ra  r½   )r[  r  re  r   r   Úmake_finalizers½  s   $€þûz9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rp   rˆ   r  T)r¯  rþ   Úgetswitchintervalr  r  Úsetswitchintervalr  r¿   r+  r   Zstart_threadsrJ   r°   r  )rG   rf  ri  Zold_intervalZold_thresholdrW   r   )r[  ra  r  re  r   Útest_thread_safety¤  s6   


ÿ
þÿ


þ

z _TestFinalize.test_thread_safetyN)
rQ   rR   rS   rh   r4  r6  rN  r^  r_  rl  r   r   r   r   rO  g  s    
%rO  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  ri  r   r   r   r  æ  s   ( z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zmultiprocessing.r   )r  r<  r   r   r   r  ç  r   zmultiprocessing.__init__r   )
Úglobr;   rn  Údirnamer   Ú__file__rš   Úescaper0  rð   )rG   rq  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)rx  rþ   r  r0  r¾  r6   r¤  rw  r}   rÖ   ry  )rG   rw  r%   ÚmodÚattrr   r   r   Útest_importì  s*   








þÿûz_TestImportStar.test_importN)rQ   rR   rS   rx  r|  r   r   r   r   rm  ß  s    rm  c                   @   s,   e Zd ZdZdd„ Zedd„ ƒZdd„ ZdS )	Ú_TestLoggingr]  c                 C   sD   t  ¡ }| tj¡ |  |d u¡ | d¡ | d¡ | t¡ d S )Nzthis will not be printedznor will this)	r   Ú
get_loggerÚsetLevelr
   Ú
SUBWARNINGr}   ÚdebugÚinfoÚ	LOG_LEVEL)rG   Úloggerr   r   r   Útest_enable_logging  s   

z _TestLogging.test_enable_loggingc                 C   s   t  ¡ }| | ¡ ¡ d S r   )r   r~  r¤   ÚgetEffectiveLevel)r‘   r[  r„  r   r   r   Ú_test_level  s   z_TestLogging._test_levelc           	      C   sÜ   d}d}t  ¡ }t ¡ }|j}t jdd\}}| |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | tj¡ | |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | |¡ |jtd d S )Nr|  é%   Fr’   r”   )Úlevel)r   r~  ÚloggingÚ	getLoggerr‰  r—   r  r‹   r‡  r™   ra   r›   rš   r   ÚNOTSETrƒ  )	rG   ZLEVEL1ZLEVEL2r„  Zroot_loggerZ
root_levelr™  rš  rž   r   r   r   Ú
test_level  s*   


z_TestLogging.test_levelN)rQ   rR   rS   rh   r…  rN  r‡  r  r   r   r   r   r}  
  s    
r}  c                   @   s6   e Zd ZdZedd„ ƒZe ee	dƒd¡dd„ ƒZ
dS )	Ú_TestPollEintrr]  c                 C   s   t  d¡ t |tj¡ d S rÕ  )rJ   r°   r;   râ   r×   ÚSIGUSR1)r‘   r   r   r   r   Ú_killerS  s   
z_TestPollEintr._killerr  úrequires SIGUSR1c              
      s¼   dg‰ ‡ fdd„}t  ¡ }t tj|¡}zA| j| j|fd}| ¡  z| jtjdd}| ¡  | 	¡  W | 	¡  n| 	¡  w |  
ˆ d ¡ |  |jd¡ W t tj|¡ d S t tj|¡ w )NFc                     s   dˆ d< d S )NTr   r   rÑ   ©Z
got_signalr   r   Úrecord[  rÔ   z._TestPollEintr.test_poll_eintr.<locals>.recordr”   )r²   r   )r;   r„   r×   r  r‹   r  r™   rJ   r°   rš   r}   ra   r…   )rG   r“  r   Z
oldhandlerZkillerrž   r   r’  r   Útest_poll_eintrX  s   
"z_TestPollEintr.test_poll_eintrN)rQ   rR   rS   rh   rN  r  r?   rO  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ú  )rC  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Ó  )rC  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                   @   rQ  )
ÚTestInitializersc                 C   s"   t  ¡ | _| j ¡ | _d| j_d S rú  )r   ÚManagerÚmgrrÂ  rª  r°  rl   r   r   r   r4  «  s   
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )r®  r`  rš   rl   r   r   r   r6  °  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   r<  r   r   r   Útest_manager_initializer´  s   
z)TestInitializers.test_manager_initializerc                 C   sH   | j ttjdd t dt| jf¡}| ¡  | ¡  |  | jj	d¡ d S )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   r4  r6  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•  )rr   Ú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²   ru  r‰  rp   r„  rŠ  )r   r×  rà  r·  r   rš   )rØ  rf  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                    sJ   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  | ¡ dks#J ‚d S )NrÀ  c                      s   ˆ   ¡ S r   )r¾  r   ©Zfliker   r   rë    rì  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>rˆ   )r2  r3  r¹  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‘   rl  Úslowrï   r   r   r   Ú_child_test_wait
  s
   zTestWait._child_test_waitFc              	      s  ddl m} g }g ‰ g }tdƒD ]/}tjdd\}}tj| j||fd}d|_| ¡  | 	¡  | 
|¡ ˆ  
|¡ |  |j¡ q|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–  r0  rþ  r¬  ra   )rG   rÊ  r-   ÚreadersZmessagesrï   r  rl  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ã  rx  rì   rJ   r°   rù  rè  r   r   )r‘   rv  rÊ  r   rï   r   r   r   Ú_child_test_wait_socket0  s   
z TestWait._child_test_wait_socketc                 C   s2  ddl m} t tjdf¡}| ¡ }g }g }i }tdƒD ]}tj	| j
||fd}	d|	_|	 ¡  | |	¡ |  |	j¡ qtdƒD ]}| ¡ \}
}| |
¡ g ||
< q?| ¡  |rx||ƒD ]}
|
 d¡}|sn| |
¡ |
 ¡  q[||
  |¡ q[|sWd dd	„ td
ƒD ƒ¡ d¡}| ¡ D ]}|  d |¡|¡ q‹d S )Nr   r,   r‰  r”   Tr|  r‡  c                 s   s    | ]}d | V  qdS )rÐ  Nr   r  r   r   r   r©  Y  rC  z,TestWait.test_wait_socket.<locals>.<genexpr>rÕ   rê  rÓ  )rÍ  r-   rã  rä  r   r~  rå  rì   r   r‹   rÑ  r   r™   rð   rû   rš   rÈ  r   r›   r0  r   rn  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,   rp   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  rB  zTestWait.signal_and_sleepc                 C   s†  ddl m} d}dd„ }t d¡}t ¡ \}}tj| j||fd}| ¡  |  |j	t
¡ |  |jdd¡ t ¡ }|||j	|g|d ƒ}	t ¡ | }
|  |	|j	g¡ |  |
|d	 ¡ |  |
|d	 ¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ||j	|gƒ¡ |  |
d
¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ|||j	|gƒ¡ |  |
d
¡ | ¡  | ¡  d S )Nr   r,   ru  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rî   rÉ  r   r   r   rë  ƒ  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_timeoutNrv  )rQ   rR   rS   rN  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ß  rO  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¤   ry  rþ   Úflags©r‘   r[  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   ry  rþ   rã  Úprintr!  )r‘   ræ  r  rl  rž   Úgrandchild_flagsrã  r   r   r   Úrun_in_childÎ  s   zTestFlags.run_in_childc                 C   sH   dd l }d}t tjdddd|g¡}| | d¡¡\}}|  ||¡ d S )Nr   zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()rD  z-Sz-OrH  rê  )ræ  rE  Úcheck_outputrþ   rG  r"  rK  ra   )rG   ræ  Úprogrª  Zchild_flagsrè  r   r   r   Ú
test_flagsÛ  s   ÿzTestFlags.test_flagsN)rQ   rR   rS   rN  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‘   Úchildrv  r[  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ï  rv  r™   r   ra   r›   rÈ  r!   )rG   Zold_timeoutÚparentrî  rº  rž   r[  r   r   r   rª  ó  s$   
ÿ
zTestTimeouts.test_timeoutN)rQ   rR   rS   rN  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;   rn  rš   rr  rs  r°  r   rI  Zassert_python_failurera   r»   rJ  rx  )rG   r  r%   r   rM  rj  r   r   r   Útest_noforkbomb  s   zTestNoForkBomb.test_noforkbombN)rQ   rR   rS   rõ  r   r   r   r   rô    rt   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ð  r[  rž   r   r   r   rî  !  s   
zTestForkAwareThreadLock.childc                 C   sd   t  d¡\}}t ¡ }ttjƒ}t j| jd|fd}| ¡  | 	¡  | 
¡ }t|ƒ |  ||¡ d S )NFrp   r”   )r   r—   r
   ÚForkAwareThreadLockr‚   r÷  r‹   rî  r™   r   r›   r!   ZassertLessEqual)rG   r  rl  rº  Zold_sizerž   Znew_sizer   r   r   rË  ,  s   
z!TestForkAwareThreadLock.test_lockN)rQ   rR   rS   rN  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   rr  Úto_closerf  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   rr  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‘   r[  rr  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š  rr  rž   r½   ZWSAENOTSOCKr   r   r   Útest_closefd_  s2   
ÿ



þ

ÿzTestCloseFds.test_closefdN)rQ   rR   rS   rý  r   rN  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   ©rG  Úframer   r   r   rÓ   „  r¬  z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)r×   r  r¤   r›   r‹  ÚCONN_MAX_SIZE)r‘   r[  rÓ   rf  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¤   rv  rÈ  )r‘   r[  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   r[  rS  rž   rv  rÉ  r   r   r   Útest_ignore_listener­  s    ÿ


z$TestIgnoreEINTR.test_ignore_listenerN)rQ   rR   rS   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr  rN  r	  r?   rO  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  rl  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	  rB  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   rC  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  rB  )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 )NrB  z*test only relevant for 'forkserver' methodzmp_preload.pyÚokr‡  z(failed spawning forkserver or grandchild)r   r  ry   r;   rn  rš   rr  rs  r°  r   rI  rJ  rK  rx  rç  r¥  )rG   r%   r   rM  rj  r   r   r   Útest_preload_resourcesû  s   
ýz&TestStartMethod.test_preload_resourcesN)
rQ   rR   rS   rN  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&   ÚnooprD  rH  )rl  r&   )Úpass_fdsr;  r¯  T)rn  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$   ry  r;   ÚpiperE  rF  rþ   rG  rz   rH  r   rf  rI  rx  rK  r'   r­   r-   rJ   rK   r   r«   r°   rƒ  r»   r„  ÚENOENTÚEINVALr¬   r;  rg  ZassertRegex)rG   rL  r&   r  rl  rž   ri  Zname1Zname2rM  r½   rj  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…   r:  rU  r	  T)r“  ÚalwaysrY   zresource_tracker: process died)!Ú multiprocessing.resource_trackerr*  r»  r;   râ   r×   rã   r   Zwait_processr>  r?  r@  rF  rJ   r°   r   r¾  rÔ  rÆ  rÇ  r  r  r  r  r•   ra   r‚   r}   Ú
issubclassÚcategoryÚUserWarningrY  Úmessage)
rG   rG  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´  )r1  r×   rI  rl   r   r   r   Útest_resource_tracker_sigint{  r  z0TestResourceTracker.test_resource_tracker_sigintc                 C   r2  r´  )r1  r×   rÞ   rl   r   r   r   Útest_resource_tracker_sigterm  r  z1TestResourceTracker.test_resource_tracker_sigtermc                 C   r2  r·  )r1  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*  rF  r»  Ú_check_aliver¤   )r[  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*  rF  r»  r   r—   r‹   r7  r™   r›   rš   r   r}   )rG   r*  r   r  rl  rž   Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reused‘  s   ÿz0TestResourceTracker.test_resource_tracker_reusedN)rQ   rR   rS   r(  r1  r3  r4  r5  r»  r7  r8  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-   rq   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‹   r:  r   r™   r}   r|  rü   r-   r   ra   r¼   rš   )rG   r   r…  r†  r.  r   r   r   Ú
test_empty°  s"   þzTestSimpleQueue.test_emptyc                 C   s   t  ¡ }| ¡  | ¡  d S r   )r   r;  r   ©rG   r   r   r   r   r  È  s   zTestSimpleQueue.test_closec                 C   s0   t  ¡ }| ¡  |  |jj¡ |  |jj¡ d S r   )r   r;  r   r}   Ú_readerr½  Ú_writerr=  r   r   r   Útest_closedÏ  s   zTestSimpleQueue.test_closedN)rQ   rR   rS   rN  r:  r<  r  r°  r   Zcpython_onlyr@  r   r   r   r   r9  ¤  s    
	r9  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 )
Nru  c                       s<   e Zd Z‡ fdd„Z‡fdd„Zdd„ Zdd„ Zd	d
„ ZdS )zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                    s    d| _ d | _d | _ˆ  | ¡ d S )NzFake Process)r%   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 )NrE  Ú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  rE  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   ©rB  rD  r   r   ÚFailingForkProcessß  s    rH  rC  rp   )r‹   )Úcontextc                 s   rA  r   rB  )r  r    r   r   r   r©  ý  rC  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)rÁ  rƒ  r   rØ  r×  r?   r#  Z	MagicMockr   rš   r   r<  )rG   rH  rž   r   rG  r   Útest_release_unused_processesÙ  s   
ÿ
üÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rQ   rR   rS   rJ  r   r   r   r   rA  ×  s    rA  c                   @   sd  e Zd ZdZejjZdd„ Zdd„ Z	e
dd„ ƒZeZdd	„ Zd
d„ Ze
dd„ ƒZdd„ Ze
dd„ ƒZdHdd„Ze
dd„ ƒZdHdd„Ze
dd„ ƒZdIdd„Zdd„ Ze
d d!„ ƒZd"d#„ Ze
d$d%„ ƒZd&d'„ Ze
d(d)„ ƒZd*d+„ Ze
d,d-„ ƒZdJd/d0„Zd1d2„ Z e
d3d4„ ƒZ!d5d6„ Z"e
d7d8„ ƒZ#d9d:„ Z$e
d;d<„ ƒZ%d=d>„ Z&e
d?d@„ ƒZ'dAdB„ Z(e
dCdD„ ƒZ)dEdF„ Z*dGS )KÚTestSyncManagerTypesa}  Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

    In the following unit-tests the base type is created in the parent
    process, the @classmethod represents the worker process and the
    shared object is readable and editable between the two.

    # The child.
    @classmethod
    def _test_list(cls, obj):
        assert obj[0] == 5
        assert obj.append(6)

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c                 C   s   |   ¡ | _| j ¡  d | _d S r   )Úmanager_classrV   r™   r.  rl   r   r   r   r4    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   r6    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™   rU  ra   r…   )rG   Zworkerrœ  r   r   r   Ú
run_worker>  s
   
zTestSyncManagerTypes.run_workerc                 C   s*   |  ¡ sJ ‚| ¡  | ¡  | d¡ d S ©Nr  )r-  r-   r)  ©r‘   rœ  r   r   r   r  E  s   z TestSyncManagerTypes._test_eventc                 C   s:   | j  ¡ }| ¡  |  | j|¡ | ¡ rJ ‚| d¡ d S rW  )rV   r¶   rü   rV  r  r-  r-   ©rG   r  r   r   r   r	  L  s
   
zTestSyncManagerTypes.test_eventc                 C   ó   |  ¡  d S r   ©rÆ  rX  r   r   r   Ú
_test_lockS  rN  zTestSyncManagerTypes._test_lockrÅ  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )r<  rV   rV  r\  rÇ  rù   rÐ   ©rG   Zlnamer  r   r   r   rË  W  s   zTestSyncManagerTypes.test_lockc                 C   ó   |  ¡  | ¡  d S r   ©rÆ  rÇ  rX  r   r   r   Ú_test_rlock]  ó   z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r<  rV   rV  r`  r]  r   r   r   rÍ  b  ó   zTestSyncManagerTypes.test_rlockc                 C   rZ  r   r[  rX  r   r   r   rÓ  f  rN  z$TestSyncManagerTypes._test_semaphorerÔ  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r<  rV   rV  rÓ  rÇ  )rG   Úsnamer  r   r   r   rÕ  j  s   z#TestSyncManagerTypes.test_semaphorec                 C   rx  )Nr×  )rc  )rÕ  rl   r   r   r   rØ  o  r.  z+TestSyncManagerTypes.test_bounded_semaphorec                 C   r^  r   r_  rX  r   r   r   Ú_test_conditionr  ra  z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rV   rå  rV  rd  rY  r   r   r   Útest_conditionw  s   
z#TestSyncManagerTypes.test_conditionc                 C   s   |j dksJ ‚| ¡  d S ro   )r8  rN  rX  r   r   r   Ú_test_barrier{  r  z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S ro   )rV   r1  rV  rf  rY  r   r   r   r?  €  rS  z!TestSyncManagerTypes.test_barrierc                 C   s*   |	 W d   ƒ d S 1 sw   Y  d S r   r   rX  r   r   r   Ú
_test_pool„  s   "ÿzTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nr‰  r]  )rV   r×  rV  rg  rY  r   r   r   Ú	test_poolŠ  rb  zTestSyncManagerTypes.test_poolc                 C   sd   |  ¡ dksJ ‚| ¡ sJ ‚| ¡ rJ ‚| ¡ dksJ ‚| ¡ r"J ‚| ¡ dks*J ‚| ¡ s0J ‚d S ©Nr²   rp   r„  )r}  r€  r|  r¼   rX  r   r   r   Ú_test_queueŽ  s   z TestSyncManagerTypes._test_queuer   c                 C   sN   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ | ¡ sJ ‚| ¡ r%J ‚d S ri  )r<  rV   rq   rV  rj  r|  r€  )rG   Zqnamer  r   r   r   Ú
test_queue˜  s   

zTestSyncManagerTypes.test_queuec                 C   rÔ  )NrŸ  )rk  rl   r   r   r   Útest_joinable_queue   r,  z(TestSyncManagerTypes.test_joinable_queuec                 C   st   |d dksJ ‚|  d¡dksJ ‚| d¡dksJ ‚| ¡  | ¡  |D ]}q$t|ƒdks/J ‚| d¡dks8J ‚d S )Nr   rp   rY   )rC  rü  rþ  Úreverser‚   r£  )r‘   rœ  rf  r   r   r   Ú
_test_list£  s   zTestSyncManagerTypes._test_listc                 C   s>   | j  ¡ }| d¡ |  | j|¡ |rJ ‚|  t|ƒd¡ d S )Nrp   r   )rV   rº   rð   rV  rn  ra   r‚   rY  r   r   r   rœ  ¯  s
   

zTestSyncManagerTypes.test_listc                 C   sœ   t |ƒdksJ ‚|d dksJ ‚| d¡dksJ ‚t| ¡ ƒdgks$J ‚t| ¡ ƒdgks/J ‚t| ¡ ƒdgks:J ‚| ¡ ddiksDJ ‚| ¡ dksLJ ‚d S )NrY   rÀ  rp   )rÀ  rp   )r‚   r¼   rº   r1  r­  rn  r   ÚpopitemrX  r   r   r   Ú
_test_dict¶  s   zTestSyncManagerTypes._test_dictc                 C   s<   | j  ¡ }d|d< |  | j|¡ |rJ ‚|  t|ƒd¡ d S )Nrp   rÀ  r   )rV   r«  rV  rp  ra   r‚   rY  r   r   r   r¯  Á  s
   
zTestSyncManagerTypes.test_dictc                 C   s,   |j dksJ ‚| ¡ dksJ ‚| d¡ d S )NrY   r²   )rb   r¼   rü   rX  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   rV  rq  ra   rb   r¼   rY  r   r   r   rw  Î  s   zTestSyncManagerTypes.test_valuec                 C   sH   |d dksJ ‚|d dksJ ‚t |ƒdksJ ‚t|ƒddgks"J ‚d S )Nr   rY   r²   )r‚   rº   rX  r   r   r   Ú_test_arrayÔ  s   z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )Nrï   r   rY   )rV   rŒ  rV  rr  rY  r   r   r   r  Û  s   zTestSyncManagerTypes.test_arrayc                 C   s    |j dksJ ‚|jdksJ ‚d S r  rÅ  rX  r   r   r   Ú_test_namespaceß  s   z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S r  )rV   rÂ  rf  rg  rV  rs  rY  r   r   r   rÃ  ä  s   
z#TestSyncManagerTypes.test_namespaceNrÎ  )rÔ  )r   )+rQ   rR   rS   r¸  r   r+  r¯  rL  r4  r6  rN  rÖ  rÛ  rU  rV  r  r	  r\  rË  r`  rÍ  rÓ  rÕ  rØ  rd  re  rf  r?  rg  rh  rj  rk  rl  rn  rœ  rp  r¯  rq  rw  rr  r  rs  rÃ  r   r   r   r   rK     sf    












	





rK  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   ry  rl   r   r   r   Útest__all__ì  s   
ÿzMiscTestCase.test__all__N)rQ   rR   rS   rw  r   r   r   r   rt  ë  rt   rt  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    ry  rz  rR  rS  r¿   )r‘   rU   rW   r   r   r   rÛ  ü  s   
zBaseMixin.tearDownClassN)rQ   rR   rS   rN  rÖ  rÛ  r   r   r   r   rx  ö  s
    
rx  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   rx   r   r‹   rÂ  r»  r{   r–   r¸   r×  r—   r   rŸ  rÅ  rÌ  rÔ  r×  rå  r¶   r1  r   rŒ  rr  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  TrO  rP  rQ  r   z5Shared objects which still exist at manager shutdown:)rJ   rK   r‚   r   r¸   r°   r°  r   rR  rS  r  r  rV   Z_number_of_objectsZ_debug_infor`  rš   rÕ  rÛ  )r‘   rT  rN   rý  rÙ  r   r   rÛ  B  s0   
ÿ
þ÷


zManagerMixin.tearDownClass)rQ   rR   rS   rx   r   r‹   r¿  ÚoperatorÚ
attrgetterr   rŸ  rÅ  rÌ  rÔ  r×  rå  r¶   r1  r   rŒ  rº   r«  rÂ  rN  r×  rÖ  rÛ  r)  r   r   rÙ  r   r}  '  s.    
r}  c                   @   sÔ   e Zd ZdZejjZejjZeejj	ƒZ	eejj
ƒZ
eejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZdS )ÚThreadsMixinrW   N)rQ   rR   rS   rx   r   Zdummyr‹   rÂ  r»  r{   r¸   r×  r—   r   rŸ  rÅ  rÌ  rÔ  r×  rå  r¶   r1  r   rŒ  r   r   r   r   r€  d  s&    r€  c                    sR  | d }t ƒ }h d£}| ¡ D ]y\}}t|tƒsqt|tƒrl|tu r#qt|jƒ|ks/J |jƒ‚|jD ]U}d| ¡  |dd …  }|| ¡ d  }	G dd„ d||	t	j
ƒ}
|dkr^t d	¡|
ƒ}
| |
_|
_||
_|
| |< q2t|t	j
ƒrˆG d
d„ d|tƒ}
| |
_|
_||
_|
| |< qd d g‰ d g‰‡ ‡‡fdd„}‡ ‡fdd„}|| d< || d< d S )NrQ   >   rU   rV   rW   ZWithrY   ÚMixinc                   @   rÏ  ©z*install_tests_in_module_dict.<locals>.TempNrÑ  r   r   r   r   ÚTemp‹  rZ  rƒ  rV   r€  c                   @   rÏ  r‚  rÑ  r   r   r   r   rƒ  “  rZ  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    Ú_cleanupry  r   r¿   r  r  r>   r?   r@   rþ   r  r  rÌ  rƒ  rA   r
   Úget_temp_dirr~  r  rƒ  r{  ©rz  Ú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  r{  rY   r|  r#  )r°  r   r'  r   r  rü   r    ry  rR  rS  r¿   rJ   r°   r
   Ú_cleanup_tests)Z
need_sleeprU   rW   )rz  r‰  r   r   ÚtearDownModule²  s$   

z4install_tests_in_module_dict.<locals>.tearDownModuler‹  r  )Úglobalsr1  r   r¹   r-  rT   rü   rh   Ú
capitalizer?   ÚTestCaser   Úrequires_hashdigestrQ   rS   rR   r¯  )Zremote_globsrŠ  rR   Zlocal_globsZ	ALL_TYPESr%   ÚbaseZtype_Znewnamer  rƒ  r‹  r  r   rˆ  r   Úinstall_tests_in_module_dict|  s>   



€r“  rM  )¸r?   Zunittest.mockr   rŒ  rJ   r2  rã  rþ   r;   r  r„  r×   r  rã  rù  rŠ  rE  r  r~  r   r  r>  Ztest.supportr°  Ztest.support.script_helperr   r   r   r   r   r   r   Úimport_moduler	   Z*skip_if_broken_multiprocessing_synchronizer¿   rÍ  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr7  Ú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   ru   r‹   rR  r\  r~  r‚  rƒ  rÄ  rÐ  rÚ  r  r
  r  r  r-  r0  r`  r‡  r•  rÄ  rÆ  rÇ  rÊ  rË  r>   rÐ  rÓ  rÔ  r,  r.  r/  r:  rO  rP  r  rQ  rV  rW  rY  Úregisterr^  r   rj  rk  rm  rp  rw  rr  r‘  r  rŠ  rˆ  r¿  rÌ  rÒ  rO  rá  rð  r  r	  r  rO  r  rm  r}  rŽ  r•  r›  r«  r¬  rµ  r¶  r·  r¸  r¹  rÀ  rÉ  rÜ  râ  rí  rô  rö  rù  r  r  r”  r"  r9  rA  rK  rt  rx  r  r}  r€  r“  r   r   r   r   Ú<module>   s¸  

ÿÿÿÿ
ÿ
þ    ,W  G6  *39 FS 
 
	  i(C:
14  "0
R h
8   9x+E"! 2 "BCHÿ 3) k=