§
    *‚KgcF  ã                   ó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mZmZmZ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mZmZmZmZmZm Z  d dl!m"Z" d d	l#m$Z$m%Z% ej&        d
k    rd dl'Z'dZ(e(e k    sJ ‚dZ)e)e(k    sJ ‚dZ* e+ed¦  «        o e+ed¦  «        Z,dedede-fd„Z.de/ee0f         fd„Z1de0dededej2        fd„Z3dede0defd„Z4 G d„ d¦  «        Z5 G d„ de¦  «        Z6e0Z7e/ed         e6f         e/ed         e7f         z  Z8 G d„ d e9¦  «        Z: G d!„ d"ej;        ¦  «        Z<d#e=e<         de=e<         fd$„Z> G d%„ d&¦  «        Z?d'eddfd(„Z@ G d)„ d*ejA        ¦  «        ZBd+eCe0ef         deeCe0ef         z  fd,„ZDdeEeFe                  fd-„ZGdS ).é    N)Ú
NamedTupleÚNoReturnÚLiteralÚAnyÚTextIO)Úsupport)Ú	os_helper)Ú	Namespace)ÚRegrtest)ÚruntestÚ	is_failedÚ
TestResultÚInterruptedÚTimeoutÚ
ChildErrorÚPROGRESS_MIN_TIME)Úsetup_tests)Úformat_durationÚprint_warningÚwin32g      >@g     Àr@ÚsetsidÚkillpgÚresultÚnsÚreturnc                 óf   — t          | t          ¦  «        rdS |j        rt          | |¦  «        rdS dS )NTF)Ú
isinstancer   Úfailfastr   )r   r   s     ú2/usr/lib/python3.11/test/libregrtest/runtest_mp.pyÚ	must_stopr    ,   s>   € Ý�&�+Ñ&Ô&ð ØˆtØ	„{ð •y ¨Ñ,Ô,ð ØˆtØˆ5ó    c                 óP   — t          j        | ¦  «        \  }}t          di |¤Ž}||fS )N© )ÚjsonÚloadsr
   )Úworker_argsÚns_dictÚ	test_namer   s       r   Úparse_worker_argsr)   4   s3   € Ýœ KÑ0Ô0Ñ€GˆYÝ	Ð	Ð	�WÐ	Ð	€BØ�	ˆ?Ðr!   ÚtestnameÚ	stdout_fhc                 ó^  — t          |¦  «        }|| f}t          j        |¦  «        }|j        �|j        }nt          j        g}g |¢t          j        ¦   «         ¢d‘d‘d‘d‘|‘}t          ||dt          j
        dk    t          j        ¬¦  «        }t          rd|d<   t          j        |fi |¤ŽS )	Nz-uz-mztest.regrtestz--worker-argsTÚnt)ÚstdoutÚstderrÚtextÚ	close_fdsÚcwdÚstart_new_session)Úvarsr$   ÚdumpsÚpythonÚsysÚ
executabler   Úargs_from_interpreter_flagsÚdictÚosÚnamer	   ÚSAVEDCWDÚUSE_PROCESS_GROUPÚ
subprocessÚPopen)r*   r   r+   r'   r&   r8   ÚcmdÚkws           r   Úrun_test_in_subprocessrC   :   sç   € Ý�2‰hŒh€GØ˜HÐ%€KÝ”*˜[Ñ)Ô)€KØ	„yÐØ”Yˆ
ˆ
å”nÐ%ˆ
ð)ˆJð )�Ô<Ñ>Ô>ð )Øð)àð)à ð)ð ð)ð (ð)€Cõ 
ØàØÝ”7˜d’?ÝÔð
ñ 
ô 
€Bõ ð 'Ø"&ˆÐÑÝÔ˜CÐ&Ð& 2Ð&Ð&Ð&r!   r(   c                 óÜ   — t          | ¦  «         t          | |¦  «        }t          ¦   «          t          t          j        |t
          ¬¦  «        d¬¦  «         t          j        d¦  «         d S )N)ÚclsT©Úflushr   )r   r   Úprintr$   r5   ÚEncodeTestResultr7   Úexit)r   r(   r   s      r   Úrun_tests_workerrK   W   s[   € Ý��O„O€Oå�R˜Ñ#Ô#€Få	�G„G€Gõ 
�$Œ*�VÕ!1Ð
2Ñ
2Ô
2¸$Ð?Ñ?Ô?Ð?Ý„HˆQ�K„K€K€K€Kr!   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚMultiprocessIteratorz8A thread-safe iterator over tests for multiprocess mode.c                 óD   — t          j        ¦   «         | _        || _        d S ©N)Ú	threadingÚLockÚlockÚ
tests_iter)ÚselfrS   s     r   Ú__init__zMultiprocessIterator.__init__h   s   € Ý”NÑ$Ô$ˆŒ	Ø$ˆŒˆˆr!   c                 ó   — | S rO   r#   ©rT   s    r   Ú__iter__zMultiprocessIterator.__iter__l   s   € Øˆr!   c                 óˆ   — | j         5  | j        €t          ‚t          | j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S rO   )rR   rS   ÚStopIterationÚnextrW   s    r   Ú__next__zMultiprocessIterator.__next__o   s‰   € ØŒYð 	)ð 	)ØŒÐ&Ý#Ð#Ý˜œÑ(Ô(ð	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)s   ˆ"7·;¾;c                 óT   — | j         5  d | _        d d d ¦  «         d S # 1 swxY w Y   d S rO   )rR   rS   rW   s    r   ÚstopzMultiprocessIterator.stopu   su   € ØŒYð 	#ð 	#Ø"ˆDŒOð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s   ˆ�!¤!N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU   rX   r\   r^   r#   r!   r   rM   rM   d   sV   € € € € € àBÐBð%ð %ð %ðð ð ð)ð )ð )ð#ð #ð #ð #ð #r!   rM   c                   ó.   — e Zd ZU eed<   eed<   eed<   dS )ÚMultiprocessResultr   r.   Ú	error_msgN)r_   r`   ra   r   Ú__annotations__Ústrr#   r!   r   rd   rd   z   s.   € € € € € € ØÐÐÑà€K€K�KØ€N€N�N€N€Nr!   rd   FTc                   ó   — e Zd ZdS )Ú
ExitThreadN)r_   r`   ra   r#   r!   r   ri   ri   …   s   € € € € € Ø€Dr!   ri   c                   ó¦   ‡ — e Zd Zdeddddfˆ fd„Zdefd„Zdd„Zdd	„Z	 	 dde	dede
fd„Zdededefd„Zdede
fd„Zdd„Zdd„Zdeddfd„Zˆ xZS )ÚTestWorkerProcessÚ	worker_idÚrunnerÚMultiprocessTestRunnerr   Nc                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d | _	        d | _
        d | _        d| _        d| _        d S )NF)ÚsuperrU   rl   ÚpendingÚoutputr   Úworker_timeoutÚtimeoutÚregrtestÚcurrent_test_nameÚ
start_timeÚ_popenÚ_killedÚ_stopped)rT   rl   rm   Ú	__class__s      €r   rU   zTestWorkerProcess.__init__Š   sv   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒØ”~ˆŒØ”mˆŒØ”)ˆŒØÔ,ˆŒØœˆŒØ!%ˆÔØˆŒØˆŒØˆŒØˆŒˆˆr!   c                 ó¸  — d| j         › �g}|                      ¦   «         r|                     d¦  «         n|                     d¦  «         | j        }|r|                     d|› �¦  «         | j        }|�Ot          j        ¦   «         | j        z
  }|                     d| j        j	        › �dt          |¦  «        › �f¦  «         dd                     |¦  «        z  S )	NzTestWorkerProcess #ÚrunningÚstoppedztest=zpid=ztime=z<%s>ú )rl   Úis_aliveÚappendrv   rx   ÚtimeÚ	monotonicrw   ÚextendÚpidr   Újoin)rT   ÚinfoÚtestÚpopenÚdts        r   Ú__repr__zTestWorkerProcess.__repr__˜   sæ   € Ø6 d¤nÐ6Ð6Ð7ˆØ�=Š=‰?Œ?ð 	#Ø�KŠK˜	Ñ"Ô"Ð"Ð"à�KŠK˜	Ñ"Ô"Ð"ØÔ%ˆØð 	(Ø�KŠK˜ ˜˜Ñ'Ô'Ð'Ø”ˆØÐÝ”Ñ!Ô! D¤OÑ3ˆBØ�KŠKÐ1 ¤¤Ð1Ð1Ø6¥°Ñ!4Ô!4Ð6Ð6ð8ñ 9ô 9ð 9à˜Ÿš ™œÑ&Ð&r!   c                 ó�  — | j         }|€d S | j        rd S d| _        t          r| › d�}n| › }t          d|› �t          j        d¬¦  «         	 t          r&t          j        |j        t          j
        ¦  «         d S |                     ¦   «          d S # t          $ r Y d S t          $ r }t          d|› d|›�¦  «         Y d }~d S d }~ww xY w)NTz process groupzKill )ÚfilerG   zFailed to kill z: )rx   ry   r>   rH   r7   r/   r;   r   r…   ÚsignalÚSIGKILLÚkillÚProcessLookupErrorÚOSErrorr   )rT   r‰   ÚwhatÚexcs       r   Ú_killzTestWorkerProcess._kill¨   s
  € Ø”ˆØˆ=ØˆFàŒ<ð 	ØˆFØˆŒåð 	ØÐ*Ð*Ð*ˆDˆDà�9ˆDåˆn�dˆnˆn¥3¤:°TÐ:Ñ:Ô:Ð:ð	=Ý ð Ý”	˜%œ)¥V¤^Ñ4Ô4Ð4Ð4Ð4à—
’
‘”���øÝ!ð 	ð 	ð 	ð ˆDˆDÝð 	=ð 	=ð 	=ÝÐ;¨DÐ;Ð;°CÐ;Ð;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð	=øøøs$   Á+B Á9B Â
CÂ	CÂ%C Ã Cc                 ó<   — d| _         |                      ¦   «          d S )NT)rz   r•   rW   s    r   r^   zTestWorkerProcess.stopÄ   s   € àˆŒØ�
Š
‰Œˆˆˆr!   Ú Útest_resultr.   c                 ód   — t          j        ¦   «         | j        z
  |_        t	          |||¦  «        S rO   )r‚   rƒ   rw   Úduration_secrd   )rT   r˜   r.   Úerr_msgs       r   Úmp_result_errorz!TestWorkerProcess.mp_result_errorÉ   s-   € õ $(¤>Ñ#3Ô#3°d´oÑ#EˆÔ Ý! +¨v°wÑ?Ô?Ð?r!   r(   r+   c                 óä  — t          j        ¦   «         | _        || _        	 t	          || j        |¦  «        }d| _        || _        n#  d | _        ‚ xY w	 | j        r|  	                    ¦   «          t          ‚	 |                     | j        ¬¦  «        }|€J ‚||                      ¦   «          d | _        d | _        S # t          j        $ r' | j        rt          ‚|  	                    ¦   «          d }Y nt           $ r | j        rt          ‚‚ w xY wn#  |  	                    ¦   «          ‚ xY w	 |                      ¦   «          d | _        d | _        d S # |                      ¦   «          d | _        d | _        w xY w)NF©rt   )r‚   rƒ   rw   rv   rC   r   ry   rx   rz   r•   ri   Úwaitrt   Ú_wait_completedr?   ÚTimeoutExpiredr’   )rT   r(   r+   r‰   Úretcodes        r   Ú_run_processzTestWorkerProcess._run_processÒ   s¹  € Ýœ.Ñ*Ô*ˆŒà!*ˆÔð	Ý*¨9°d´g¸yÑIÔIˆEà ˆDŒLØˆDŒKˆKøð	Ø%)ˆDÔ"Øøøøð'	*ØŒ}ð !ð —
’
‘”�Ý Ð ðàŸ*š*¨T¬\˜*Ñ:Ô:�ØÐ*Ð*Ð*Øð2 × Ò Ñ"Ô"Ð"ØˆDŒKØ%)ˆDÔ"Ð"øõ5 Ô,ð 
ð 
ð 
Ø”=ð %õ %Ð$ð —
’
‘”�ð ���õ ð ð ð Ø”=ð %õ %Ð$Øðøøøð	 øð	Ø�JŠJ‰LŒLˆLØøøøð ð × Ò Ñ"Ô"Ð"ØˆDŒKØ%)ˆDÔ"Ð"Ð"øð × Ò Ñ"Ô"Ð"ØˆDŒKØ%)ˆDÔ"Ð)Ð)Ð)Ð)sG   ¡$A Á
AÁ"D Á7 B: Â:3DÃ-D Ã/DÄD ÄE ÄD#Ä#E Å$E/c                 ó  — t           j        dk    rt          j        ¦   «         }nt           j        j        }t          j        d|¬¦  «        5 }|                      ||¦  «        }| 	                    d¦  «         | 
                    ¦   «                              ¦   «         }d d d ¦  «         n# 1 swxY w Y   |€#|                      t          |¦  «        |¦  «        S d }|dk    rd|z  }nk|                     d¦  «        \  }}}|                     ¦   «         }|sd}n9	 t!          j        |t$          ¬¦  «        }n# t&          $ r}	d	|	z  }Y d }	~	nd }	~	ww xY w|�$|                      t)          |¦  «        ||¦  «        S t+          |||¦  «        S )
Nr   zw+)Úencodingr   zExit code %sú
zFailed to parse worker stdout)Úobject_hookzFailed to parse worker JSON: %s)r7   ÚplatformÚlocaleÚgetencodingr.   r¥   ÚtempfileÚTemporaryFiler£   ÚseekÚreadÚstriprœ   r   Ú
rpartitionÚrstripr$   r%   Údecode_test_resultÚ	Exceptionr   rd   )
rT   r(   r¥   r+   r¢   r.   r›   Ú_r   r”   s
             r   Ú_runtestzTestWorkerProcess._runtest  sÝ  € ÝŒ<˜7Ò"Ð"õ Ô)Ñ+Ô+ˆHˆHå”zÔ*ˆHõ Ô# D°8Ð<Ñ<Ô<ð 	.À	ð ×'Ò'¨	°9Ñ=Ô=ˆGØ�NŠN˜1ÑÔÐØ—^’^Ñ%Ô%×+Ò+Ñ-Ô-ˆFð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð ˆ?Ø×'Ò'­°	Ñ(:Ô(:¸FÑCÔCÐCàˆØ�aŠ<ˆ<Ø$ wÑ.ˆGˆGà &× 1Ò 1°$Ñ 7Ô 7ÑˆF�A�vØ—]’]‘_”_ˆFØð FØ9��ðFå!œZ¨Õ<NÐOÑOÔO�F�FøÝ ð Fð Fð FØ?À#ÑE�G�G�G�G�G�GøøøøðFøøøð ÐØ×'Ò'­
°9Ñ(=Ô(=¸vÀwÑOÔOÐOå! &¨&°'Ñ:Ô:Ð:s+   ÁAB*Â*B.Â1B.ÄD7 Ä7
EÅEÅEc                 ó¦  — | j         sÉ	 	 t          | j        ¦  «        }n# t          $ r Y d S w xY w|                      |¦  «        }| j                             d|f¦  «         t          |j        | j	        ¦  «        rd S nJ# t          $ r Y d S t          $ r1 | j                             dt          j        ¦   «         f¦  «         Y d S w xY w| j         ¯Çd S d S )NFT)rz   r[   rq   rZ   rµ   rr   Úputr    r   r   ri   ÚBaseExceptionÚ	tracebackÚ
format_exc)rT   r(   Ú	mp_results      r   ÚrunzTestWorkerProcess.run1  s  € Ø”-ð 	ððÝ $ T¤\Ñ 2Ô 2�I�IøÝ$ð ð ð Ø�E�Eðøøøð !ŸMšM¨)Ñ4Ô4�	Ø”—’ ¨	Ð 2Ñ3Ô3Ð3å˜YÔ-¨t¬wÑ7Ô7ð Ø�Eðøåð ð ð Ø��Ý ð ð ð Ø”—’ ¥yÔ';Ñ'=Ô'=Ð >Ñ?Ô?Ð?Ø��ðøøøð ”-ð 	ð 	ð 	ð 	ð 	s.   Š žA> Ÿ
-©A> ¬-­AA> Á>
CÂ6CÃCc           	      óæ   — | j         }	 |                     t          ¦  «         d S # t          j        t
          f$ r5}t          d| › dt          t          ¦  «        › d|›�¦  «         Y d }~d S d }~ww xY w)NzFailed to wait for z completion (timeout=z): )rx   rŸ   ÚJOIN_TIMEOUTr?   r¡   r’   r   r   )rT   r‰   r”   s      r   r    z!TestWorkerProcess._wait_completedD  s°   € Ø”ˆð	&Ø�JŠJ•|Ñ$Ô$Ð$Ð$Ð$øÝÔ)­7Ð3ð 	&ð 	&ð 	&Ýð %°ð %ð %Ý&5µlÑ&CÔ&Cð%ð %à ð%ð %ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøøð	&øøøs   ‰% ¥A0»*A+Á+A0rw   c                 ó@  — 	 |                       d¦  «         |                      ¦   «         sd S t          j        ¦   «         |z
  }| j                             d| › dt          |¦  «        › �¦  «         |t          k    r$t          d| › dt          |¦  «        › �¦  «         d S Œž)NTg      ð?zWaiting for z thread for zFailed to join z in )	r†   r€   r‚   rƒ   ru   Úlogr   r¾   r   )rT   rw   rŠ   s      r   Úwait_stoppedzTestWorkerProcess.wait_stoppedN  s¹   € ð
	à�IŠI�c‰NŒNˆNØ—=’=‘?”?ð Ø�Ý”Ñ!Ô! JÑ.ˆBØŒM×Òð ;¨Tð ;ð ;Ý%4°RÑ%8Ô%8ð;ð ;ñ <ô <ð <à•LÒ Ð ÝÐO°ÐOÐO½/È"Ñ:MÔ:MÐOÐOÑPÔPÐPØ�ð
	r!   ©r   N)r—   N)r_   r`   ra   ÚintrU   rg   r‹   r•   r^   r   rd   rœ   r   r£   rµ   r¼   r    ÚfloatrÁ   Ú__classcell__©r{   s   @r   rk   rk   ‰   ss  ø€ € € € € ð #ð Ð/Gð ÈDð ð ð ð ð ð ð'˜#ð 'ð 'ð 'ð 'ð =ð =ð =ð =ð8ð ð ð ð Øð	@ð @àð@ð ð@ð
 
ð@ð @ð @ð @ð4* cð 4*°fð 4*Àð 4*ð 4*ð 4*ð 4*ðl'; #ð ';Ð*<ð ';ð ';ð ';ð ';ðRð ð ð ð&&ð &ð &ð &ð uð °ð ð ð ð ð ð ð ð r!   rk   Úworkersc                 óÈ   — g }| D ]\}|j         }|sŒt          j        ¦   «         |j        z
  }|t          k    r*|›dt          |¦  «        ›d�}|                     |¦  «         Œ]|S )Nz (ú))rv   r‚   rƒ   rw   r   r   r�   )rÇ   r}   Úworkerrv   rŠ   r0   s         r   Úget_runningrË   f  s�   € Ø€GØð !ð !ˆØ"Ô4ÐØ ð 	ØÝŒ^ÑÔ Ô 1Ñ1ˆØÕ"Ò"Ð"Ø 1Ð 1Ð 1µ?À2Ñ3FÔ3FÐ3FÐ3FÐGˆDØ�NŠN˜4Ñ Ô Ð øØ€Nr!   c                   óh   — e Zd Zdeddfd„Zdd„Zdd„Zdedz  fd„Zde	ddfd	„Z
d
edefd„Zdd„ZdS )rn   ru   r   Nc                 óN  — || _         | j         j        | _        |j        | _        t          j        ¦   «         | _        t          | j         j        ¦  «        | _        | j        j	        �0t          | j        j	        dz  | j        j	        dz   ¦  «        | _        nd | _        d | _        d S )Ng      ø?i,  )ru   rÀ   r   ÚqueueÚQueuerr   rM   Útestsrq   rt   Úminrs   rÇ   )rT   ru   s     r   rU   zMultiprocessTestRunner.__init__t  sŽ   € Ø ˆŒØ”=Ô$ˆŒØ”+ˆŒÝ05´±´ˆŒÝ+¨D¬MÔ,?Ñ@Ô@ˆŒØŒ7Œ?Ð&õ #& d¤g¤o¸Ñ&;Ø&*¤g¤o¸Ñ&>ñ#@ô #@ˆDÔÐð #'ˆDÔØˆŒˆˆr!   c                 ó|  ‡ — ˆ fd„t          d‰ j        j        dz   ¦  «        D ¦   «         ‰ _        dt	          ‰ j        ¦  «        › d�}‰ j        j        r5|dt          ‰ j        j        ¦  «        ›dt          ‰ j        ¦  «        ›d�z  }‰                      |¦  «         ‰ j        D ]}| 	                    ¦   «          Œd S )Nc                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r#   )rk   )Ú.0ÚindexrT   s     €r   ú
<listcomp>z8MultiprocessTestRunner.start_workers.<locals>.<listcomp>…  s9   ø€ ð Cð Cð CØ!õ *¨%°Ñ6Ô6ð Cð Cð Cr!   é   zRun tests in parallel using z child processesz (timeout: z, worker timeout: rÉ   )
Úranger   Úuse_mprÇ   Úlenrt   r   rs   rÀ   Ústart)rT   ÚmsgrÊ   s   `  r   Ústart_workersz$MultiprocessTestRunner.start_workers„  sâ   ø€ ðCð Cð Cð CÝ%*¨1¨d¬g¬n¸qÑ.@Ñ%AÔ%AðCñ Cô CˆŒàP­S°´Ñ->Ô->ÐPÐPÐPˆØŒ7Œ?ð 	>ØˆCÝ& t¤w¤Ñ7Ô7Ð7Ð7Ý& tÔ':Ñ;Ô;Ð;Ð;ð=ñ >ˆCð 	�Š�‰ŒˆØ”lð 	ð 	ˆFØ�LŠL‰NŒNˆNˆNð	ð 	r!   c                 ó¦   — t          j        ¦   «         }| j        D ]}|                     ¦   «          Œ| j        D ]}|                     |¦  «         Œd S rO   )r‚   rƒ   rÇ   r^   rÁ   )rT   rw   rÊ   s      r   Ústop_workersz#MultiprocessTestRunner.stop_workers�  sa   € Ý”^Ñ%Ô%ˆ
Ø”lð 	ð 	ˆFØ�KŠK‰MŒMˆMˆMØ”lð 	,ð 	,ˆFØ×Ò 
Ñ+Ô+Ð+Ð+ð	,ð 	,r!   c                 ó>  — | j         j        d u}t          }t          d„ | j        D ¦   «         ¦  «        r¹|rt          j        t          d¬¦  «         	 | j         	                    |¬¦  «        S # t          j        $ r Y nw xY wt          | j        ¦  «        }|r7| j         j        s+|                      dd                     |¦  «        z  ¦  «         t          d„ | j        D ¦   «         ¦  «        °¹	 | j         	                    d¬¦  «        S # t          j        $ r Y d S w xY w)Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rO   )r€   )rÔ   rÊ   s     r   ú	<genexpr>z5MultiprocessTestRunner._get_result.<locals>.<genexpr>�  s,   è è € Ð?Ð?¨�&—/’/Ñ#Ô#Ð?Ð?Ð?Ð?Ð?Ð?r!   T)rJ   rž   zrunning: %sú, r   )r   rt   ÚPROGRESS_UPDATEÚanyrÇ   ÚfaulthandlerÚdump_traceback_laterÚMAIN_PROCESS_TIMEOUTrr   ÚgetrÎ   ÚEmptyrË   ÚpgorÀ   r†   )rT   Úuse_faulthandlerrt   r}   s       r   Ú_get_resultz"MultiprocessTestRunner._get_result—  sG  € Ø œGœO°4Ð7ÐÝ!ˆõ Ð?Ð?°$´,Ð?Ñ?Ô?Ñ?Ô?ð 	=Øð =ÝÔ1Õ2FØ7;ð=ñ =ô =ð =ðØ”{—’¨w�Ñ7Ô7Ð7øÝ”;ð ð ð Ø�ðøøøõ " $¤,Ñ/Ô/ˆGØð =˜tœwœ{ð =Ø—’˜¨¯ª°7Ñ);Ô);Ñ;Ñ<Ô<Ð<õ Ð?Ð?°$´,Ð?Ñ?Ô?Ñ?Ô?ð 	=ð"	Ø”;—?’?¨1�?Ñ-Ô-Ð-øÝŒ{ð 	ð 	ð 	Ø�4�4ð	øøøs$   ÁA- Á-A?Á>A?Ã.D	 Ä	DÄDr»   c                 ó‚  — |j         }t          |¦  «        }|j        �|d|j        z  z  }n6|j        t          k    r&| j        j        s|dt          |j        ¦  «        z  z  }t          | j	        ¦  «        }|r'| j        j        s|dd 
                    |¦  «        z  z  }| j                             | j        |¦  «         d S )Nz (%s)z -- running: %srã   )r   rg   re   rš   r   r   rë   r   rË   rÇ   r†   ru   Údisplay_progressÚ
test_index)rT   r»   r   r0   r}   s        r   Údisplay_resultz%MultiprocessTestRunner.display_result³  sÂ   € ØÔ!ˆå�6‰{Œ{ˆØÔÐ*à�G˜iÔ1Ñ1Ñ1ˆDˆDØÔ!Õ%6Ò6Ð6¸t¼w¼{Ð6Ø�G�o¨fÔ.AÑBÔBÑBÑBˆDÝ˜dœlÑ+Ô+ˆØð 	;˜4œ7œ;ð 	;ØÐ%¨¯	ª	°'Ñ(:Ô(:Ñ:Ñ:ˆDØŒ×&Ò& t¤¸Ñ=Ô=Ð=Ð=Ð=r!   Úitemc                 óX  — |d         r|d         }t          d|› �¦  «         dS | xj        dz  c_        |d         }| j                             |j        ¦  «         |                      |¦  «         |j        rt          |j        d¬¦  «         t          |j        | j	        ¦  «        rdS dS )z&Returns True if test runner must stop.r   r×   zregrtest worker thread failed: TrF   F)
r   rð   ru   Úaccumulate_resultr   rñ   r.   rH   r    r   )rT   rò   rº   r»   s       r   Ú_process_resultz&MultiprocessTestRunner._process_resultÁ  s»   € à�Œ7ð 	à˜aœˆJÝÐH¸JÐHÐHÑIÔIÐIØ�4àˆŒ˜1ÑˆŒØ˜”Gˆ	ØŒ×'Ò'¨	Ô(8Ñ9Ô9Ð9Ø×Ò˜IÑ&Ô&Ð&àÔð 	0Ý�)Ô"¨$Ð/Ñ/Ô/Ð/å�YÔ% t¤wÑ/Ô/ð 	Ø�4àˆur!   c                 ó0  — |                       ¦   «          d| _        	 	 |                      ¦   «         }|€n|                      |¦  «        }|rnŒ0n*# t          $ r t          ¦   «          d| j        _        Y nw xY w| j        j	        �t          j        ¦   «          | j                             ¦   «          |                      ¦   «          d S # | j        j	        �t          j        ¦   «          | j                             ¦   «          |                      ¦   «          w xY w)Nr   T)rÝ   rð   rí   rõ   ÚKeyboardInterruptrH   ru   Úinterruptedr   rt   ræ   Úcancel_dump_traceback_laterrq   r^   rß   )rT   rò   r^   s      r   Ú	run_testsz MultiprocessTestRunner.run_testsÖ  s+  € Ø×ÒÑÔÐàˆŒð	 ðØ×'Ò'Ñ)Ô)�Ø�<Øà×+Ò+¨DÑ1Ô1�Øð Øðøøõ !ð 	-ð 	-ð 	-Ý‰GŒGˆGØ(,ˆDŒMÔ%Ð%Ð%ð	-øøøð ŒwŒÐ*ÝÔ8Ñ:Ô:Ð:ð ŒL×ÒÑÔÐØ×ÒÑÔÐÐÐøð ŒwŒÐ*ÝÔ8Ñ:Ô:Ð:ð ŒL×ÒÑÔÐØ×ÒÑÔÐÐøøøs*   �1A ÁC Á$A6Á3C Á5A6Á6C ÃADrÂ   )r_   r`   ra   r   rU   rÝ   rß   ÚQueueOutputrí   rd   rñ   Úboolrõ   rú   r#   r!   r   rn   rn   s  s×   € € € € € ð ð ¨dð ð ð ð ð 
ð 
ð 
ð 
ð,ð ,ð ,ð ,ð˜[¨4Ñ/ð ð ð ð ð8>Ð(:ð >¸tð >ð >ð >ð >ð Kð °Dð ð ð ð ð* ð  ð  ð  ð  ð  r!   rn   ru   c                 óH   — t          | ¦  «                             ¦   «          d S rO   )rn   rú   )ru   s    r   Úrun_tests_multiprocessrþ   ð  s"   € Ý˜8Ñ$Ô$×.Ò.Ñ0Ô0Ð0Ð0Ð0r!   c                   ó<   ‡ — e Zd ZdZdedeeef         fˆ fd„Zˆ xZS )rI   z7Encode a TestResult (sub)class object into a JSON dict.Úor   c                 ó°   •— t          |t          ¦  «        r t          |¦  «        }|j        j        |d<   |S t          ¦   «                              |¦  «        S )NÚ__test_result__)r   r   r4   r{   r_   rp   Údefault)rT   r   r   r{   s      €r   r  zEncodeTestResult.default÷  sK   ø€ Ý�a�Ñ$Ô$ð 	Ý˜!‘W”WˆFØ()¬Ô(<ˆFÐ$Ñ%ØˆMå‰wŒw�Š˜qÑ!Ô!Ð!r!   )	r_   r`   ra   rb   r   r:   rg   r  rÅ   rÆ   s   @r   rI   rI   ô  sY   ø€ € € € € ØAÐAð"˜ð "  c¨3 h¤ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "r!   rI   Údc                 óˆ   — d| vr| S |                       d¦  «        }t          ¦   «         D ]}|j        |k    r
 |di | ¤Žc S ŒdS )z7Decode a TestResult (sub)class object from a JSON dict.r  Nr#   )ÚpopÚget_all_test_result_classesr_   )r  Úcls_namerE   s      r   r²   r²      sl   € ð  Ð!Ð!Øˆà�uŠuÐ&Ñ'Ô'€HÝ*Ñ,Ô,ð ð ˆØŒ<˜8Ò#Ð#Ø�3�8�8˜�8�8ˆOˆOˆOð $ðð r!   c                  ó
  — d} t           h}t          |¦  «        | k    ret          |¦  «        } g }|D ])}|                     |                     ¦   «         ¦  «         Œ*|                     |¦  «         t          |¦  «        | k    °e|S )Nr   )r   rÚ   r„   Ú__subclasses__Úupdate)Ú
prev_countÚclassesÚto_addrE   s       r   r  r    s‹   € Ø€JÝˆl€GÝ
ˆg‰,Œ,˜Ò
#Ð
#Ý˜‘\”\ˆ
ØˆØð 	0ð 	0ˆCØ�MŠM˜#×,Ò,Ñ.Ô.Ñ/Ô/Ð/Ð/Ø�Š�vÑÔÐõ ˆg‰,Œ,˜Ò
#Ð
#ð €Nr!   )Hræ   r$   r;   rÎ   rŽ   r?   r7   r«   rP   r‚   r¹   Útypingr   r   r   r   r   rˆ   r   Útest.supportr	   Útest.libregrtest.cmdliner
   Útest.libregrtest.mainr   Útest.libregrtest.runtestr   r   r   r   r   r   r   Útest.libregrtest.setupr   Útest.libregrtest.utilsr   r   r¨   r©   rä   rè   r¾   Úhasattrr>   rü   r    Útuplerg   r)   r@   rC   rK   rM   rd   ÚExcStrrû   r³   ri   ÚThreadrk   ÚlistrË   rn   rþ   ÚJSONEncoderrI   r:   r²   ÚsetÚtyper  r#   r!   r   ú<module>r     s‹  ðØ Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *ðYð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yð Yà .Ð .Ð .Ð .Ð .Ð .Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà„<�7ÒÐØ€M€M€Mð €ØÐ+Ò+Ð+Ð+Ð+ð
  Ð Ø˜Ò.Ð.Ð.Ð.ð €à�W˜R Ñ*Ô*ÐD¨w¨w°r¸8Ñ/DÔ/DÐ ð�jð  ið °Dð ð ð ð ð e¨I°s¨NÔ&;ð ð ð ð ð' Sð '¨ið 'ÀFð 'ÈzÔO_ð 'ð 'ð 'ð 'ð:	˜ð 	¨sð 	°xð 	ð 	ð 	ð 	ð#ð #ð #ð #ð #ñ #ô #ð #ð,ð ð ð ð ˜ñ ô ð ð 
€Ø�G˜E”NÐ$6Ð6Ô7¸%ÀÈÄÈvÐ@UÔ:VÑV€ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ðZð Zð Zð Zð Z˜	Ô(ñ Zô Zð Zðz
˜Ð/Ô0ð 
°TÐ:KÔ5Lð 
ð 
ð 
ð 
ðz ð z ð z ð z ð z ñ z ô z ð z ðz1 Xð 1°$ð 1ð 1ð 1ð 1ð	"ð 	"ð 	"ð 	"ð 	"�tÔ'ñ 	"ô 	"ð 	"ð	˜$˜s C˜xœ.ð 	¨Z¸$¸sÀC¸x¼.Ñ-Hð 	ð 	ð 	ð 	ð	 S¨¨jÔ)9Ô%:ð 	ð 	ð 	ð 	ð 	ð 	r!   