§
    ƒÛg=t  ã                   ó"  — 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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 n# e$ r	 d d	lmZ Y nw xY wd
„ Z ed¬¦  «        d„ ¦   «         Zd„ Z d„ Z! G d„ de"¦  «        Z# G d„ de
j$        ¦  «        Z% G d„ dej&        ¦  «        Z' G d„ de
j(        ¦  «        Z)dZ*d„ Z+d„ Z,ddœd„Z-d6d„Z.d „ Z/d!„ Z0 G d"„ d#e1¦  «        Z2 G d$„ d%e j3        ¦  «        Z4 G d&„ d'ej5        ¦  «        Z6 G d(„ d)ej&        ¦  «        Z7 G d*„ d+ej5        ¦  «        Z8 G d,„ d-e"¦  «        Z9 G d.„ d/e"¦  «        Z: G d0„ d1e"¦  «        Z;d2„ Z<d3Z= G d4„ d5ej&        ¦  «        Z>dS )7é    N)Ú	lru_cache)ÚStringIO)ÚresultÚrunnerÚsignalsÚsuiteÚloaderÚcaseé   )Ú
TestLoader)Úconfig)ÚTimeoutError)ÚEmptyc                 ó   ‡ — ˆ fd„}|S )zO
    Create a decorator allowing tests to be tagged with the *known_tags*.
    c                  óJ   •‡ — ‰ D ]}|‰vrt          d|›�¦  «        ‚Œˆ fd„}|S )zš
        Tag a test method with the given tags.
        Can be used in conjunction with the --tags command-line argument
        for runtests.py.
        zunknown tag: c                 ó(  •— t          | ¦  «        r/t          | t          ¦  «        s| j                             d¦  «        st          d¦  «        ‚	 | j        }n%# t          $ r t          ¦   «         x}| _        Y nw xY w| 	                    ‰¦  «         | S )NÚtest_z(@tag(...) should be used on test methods)
ÚcallableÚ
isinstanceÚtypeÚ__name__Ú
startswithÚ	TypeErrorÚtagsÚAttributeErrorÚsetÚupdate)ÚfuncÚsr   s     €úH/granary/edev/quantum/lib/python3.11/site-packages/numba/testing/main.pyÚdecoratez1make_tag_decorator.<locals>.tag.<locals>.decorate+   s�   ø€ Ý˜T‘N”Nð L¥j°µtÑ&<Ô&<ð LØ”}×/Ò/°Ñ8Ô8ðLåÐ JÑKÔKÐKð&Ø”I��øÝ!ð &ð &ð &Ý #¡¤Ð%��D”I�I�Ið&øøøà�HŠH�T‰NŒNˆNØˆKs   ÁA ÁA:Á9A:©Ú
ValueError)r   Útr!   Ú
known_tagss   `  €r    Útagzmake_tag_decorator.<locals>.tag!   sZ   øø€ ð ð 	;ð 	;ˆAØ˜
Ð"Ð"Ý �j°a°aÐ!9Ñ:Ô:Ð:ð #ð		ð 		ð 		ð 		ð 		ð ˆó    © )r%   r&   s   ` r    Úmake_tag_decoratorr)      s#   ø€ ð
ð ð ð ð ð, €Jr'   é€   )Úmaxsizec                 ó~   — t          t          j                             t	          j        | ¦  «        ¦  «        ¦  «        S )zF
    Gets the mtime of the file in which a test class is defined.
    )ÚstrÚosÚpathÚgetmtimeÚinspectÚgetfile)Úclss    r    Ú
_get_mtimer4   ?   s,   € õ
 �rŒw×Ò¥¤°Ñ 4Ô 4Ñ5Ô5Ñ6Ô6Ð6r'   c                 óæ   — | j         }t          |¦  «        t          | ¦  «        z   }ddlm} ||                     ¦   «         v r.t          |j        ¦  «        ›dt          |j        ¦  «        ›d|›�}|S )a>  
    Return a key for sorting tests bases on mtime and test name. For CUDA
    tests, interleaving tests from different classes is dangerous as the CUDA
    context might get reset unexpectedly between methods of a class, so for
    CUDA tests the key prioritises the test module and class ahead of the
    mtime.
    r   )ÚCUDATestCaseú.ú )Ú	__class__r4   r-   Únumba.cuda.testingr6   ÚmroÚ
__module__r   )Úxr3   Úkeyr6   s       r    Úcuda_sensitive_mtimer?   G   sy   € ð Œ+€CÝ
�S‰/Œ/�C ™FœFÑ
"€Cà/Ð/Ð/Ð/Ð/Ð/Ø�s—w’w‘y”yÐ Ð Ý ¤Ñ/Ô/Ð/Ð/µ°S´\Ñ1BÔ1BÐ1BÐ1BÀCÀCÐHˆà€Jr'   c                 óJ  ‡‡— t          | ¦  «        r| S | sd„ S 	 |                      d¦  «        \  ŠŠt          ‰¦  «        Št          ‰¦  «        Šn"# t          $ r d| z  }t	          |¦  «        ‚w xY w‰dk    rd„ S ‰dk     s‰dk     s‰‰k    rt	          d¦  «        ‚ˆˆfd„}|S )zçParses the argument string "useslice" as a shard index and number and
    returns a function that filters on those arguments. i.e. input
    useslice="1:3" leads to output something like `lambda x: zlib.crc32(x) % 3
    == 1`.
    c                 ó   — dS ©NTr(   ©r=   s    r    ú<lambda>zparse_slice.<locals>.<lambda>b   ó   € ˜€ r'   ú:z�Expected arguments shard index and count to follow option `-j i:t`, where i is the shard number and t is the total number of shards, found '%s'r   c                 ó   — dS rB   r(   rC   s    r    rD   zparse_slice.<locals>.<lambda>n   rE   r'   zSharding out of rangec                 óò   •— t          | | j        ¦  «        }dt          |di ¦  «        v rdS t          t          j        |                      ¦   «                              d¦  «        ¦  «        ¦  «        ‰z  ‰k    S )NÚalways_testr   Tzutf-8)ÚgetattrÚ_testMethodNameÚabsÚzlibÚcrc32ÚidÚencode)Útestr   ÚcountÚindexs     €€r    Údecidezparse_slice.<locals>.decider   si   ø€ Ý˜4 Ô!5Ñ6Ô6ˆDØ¥¨¨f°bÑ 9Ô 9Ð9Ð9Ø�tÝ•t”z $§'¢'¡)¤)×"2Ò"2°7Ñ";Ô";Ñ<Ô<Ñ=Ô=ÀÑEÈÒNÐNr'   )r   ÚsplitÚintÚ	Exceptionr#   )ÚusesliceÚmsgrT   rR   rS   s      @@r    Úparse_slicerZ   Y   s   øø€ õ �ÑÔð ØˆØð Øˆ~Ðð	Ø!Ÿš¨Ñ,Ô,‰ˆ�Ý�E‘
”
ˆÝ�E‘
”
ˆˆøÝð ð ð ð@àBJñKð 	õ ˜‰oŒoÐðøøøð �‚z€zØˆ~ÐØ	�Šˆ�e˜a’i�i 5¨E¢> >ÝÐ0Ñ1Ô1Ð1ð	Oð 	Oð 	Oð 	Oð 	Oð 	Oð
 ˆs   š6A ÁA0c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
TestListerz5Simply list available tests rather than running them.c                 ó.   — t          |¦  «        | _        d S ©N)rZ   rX   )ÚselfrX   s     r    Ú__init__zTestLister.__init__|   s   € Ý# HÑ-Ô-ˆŒˆˆr'   c                 ó°  — t          j        t          j        dd¬¦  «        }t	          |¦  «        | _        t          t          | j        | j        ¦  «        ¦  «        }| j         	                    t          ¬¦  «         |D ]#}t          |                     ¦   «         ¦  «         Œ$t          dt          | j        ¦  «        t          |¦  «        fz  ¦  «         |S )NTr   )ÚdescriptionsÚ	verbosity©r>   z%d tests found. %s selected)r   ÚTextTestResultÚsysÚstderrÚ_flatten_suiteÚ
_test_listÚlistÚfilterrX   Úsortr?   ÚprintrO   Úlen)r_   rQ   r   Úmasked_listr$   s        r    ÚrunzTestLister.run   sÊ   € ÝÔ&¥s¤zÀØ12ð4ñ 4ô 4ˆå(¨Ñ.Ô.ˆŒÝ�6 $¤-°´ÑAÔAÑBÔBˆØŒ×ÒÕ!5ÐÑ6Ô6Ð6Øð 	ð 	ˆAÝ�!—$’$‘&”&‰MŒMˆMˆMÝÐ+­s°4´?Ñ/CÔ/CÝ/2°;Ñ/?Ô/?ð/Añ Añ 	Bô 	Bð 	Bàˆr'   N)r   r<   Ú__qualname__Ú__doc__r`   rp   r(   r'   r    r\   r\   z   s8   € € € € € Ø?Ð?ð.ð .ð .ð
ð 
ð 
ð 
ð 
r'   r\   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚSerialSuiteaA  A simple marker to make sure tests in this suite are run serially.

    Note: As the suite is going through internals of unittest,
          it may get unpacked and stuffed into a plain TestSuite.
          We need to set an attribute on the TestCase objects to
          remember they should not be run in parallel.
    c                 óÒ   •— t          |t          j        ¦  «        s|D ]}|                      |¦  «         Œd S d|_        t          t          | ¦  «                             |¦  «         d S )NF)r   ÚunittestÚTestCaseÚaddTestÚ_numba_parallel_test_Úsuperrt   )r_   rQ   r$   r9   s      €r    rx   zSerialSuite.addTest•   sp   ø€ Ý˜$¥Ô 1Ñ2Ô2ð 	3àð  ð  �Ø—’˜Q‘”��ð ð  ð */ˆDÔ&Ý•+˜tÑ$Ô$×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r'   )r   r<   rq   rr   rx   Ú__classcell__©r9   s   @r    rt   rt   Œ   sB   ø€ € € € € ðð ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r'   rt   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )ÚBasicTestRunnerc                 ó\   — t          j        j        | fi |¤Ž t          |¦  «        | _        d S r^   )r   ÚTextTestRunnerr`   rZ   rX   )r_   rX   Úkwargss      r    r`   zBasicTestRunner.__init__¡   s1   € ÝÔÔ& tÐ6Ð6¨vÐ6Ð6Ð6Ý# HÑ-Ô-ˆŒˆˆr'   c                 ó  •— t          t          | j        t          |¦  «        ¦  «        ¦  «        }|                     t
          ¬¦  «         t          j        |¦  «        }t          t          | ¦  «         
                    |¦  «        S )Nrd   )rj   rk   rX   rh   rl   r?   rv   Ú	TestSuiterz   r~   rp   )r_   rQ   rp   Úwrappedr9   s       €r    rp   zBasicTestRunner.run¥   sg   ø€ Ý•6˜$œ-­¸Ñ)=Ô)=Ñ>Ô>Ñ?Ô?ˆØ�ŠÕ)ˆÑ*Ô*Ð*ÝÔ$ SÑ)Ô)ˆÝ•_ dÑ+Ô+×/Ò/°Ñ8Ô8Ð8r'   )r   r<   rq   r`   rp   r{   r|   s   @r    r~   r~       sG   ø€ € € € € ð.ð .ð .ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r'   r~   c                   ór   ‡ — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZˆ fd„Zˆ fd„Zd„ Zˆ fd„Zdd	„Zˆ fd
„Zˆ xZS )ÚNumbaTestPrograma3  
    A TestProgram subclass adding the following options:
    * a -R option to enable reference leak detection
    * a --profile option to enable profiling of the test run
    * a -m option for parallel execution
    * a -l option to (only) list tests

    Currently the options are only added in 3.4+.
    FNé*   c                 ó  •— |                      dd ¦  «        }t          |¦  «        |d<   t          j                             d¦  «         |                      dd¦  «        | _         t          t          | ¦  «        j        |i |¤Ž d S )NÚtopleveldirÚ
testLoaderz:xÚnomultiprocF)	Úpopr   rf   ÚwarnoptionsÚappendr‹   rz   r†   r`   )r_   Úargsr�   r‰   r9   s       €r    r`   zNumbaTestProgram.__init__Ä   s   ø€ Ø—j’j °Ñ5Ô5ˆÝ)¨+Ñ6Ô6ˆˆ|Ñõ 	Œ×Ò˜tÑ$Ô$Ð$Ø!Ÿ:š: m°UÑ;Ô;ˆÔØ.�Õ Ñ%Ô%Ô.°Ð?¸Ð?Ð?Ð?Ð?Ð?r'   c           	      ó–  •— t          t          | ¦  «                             ¦   «         }| j        €|                     ddddd¬¦  «         |                     ddd	d
t
          t          j        ¦   «         d¬¦  «         |                     ddddd¬¦  «         |                     ddt          d¬¦  «         |                     ddt          d¬¦  «         |                     ddt          d¬¦  «         |                     dddd¬¦  «         |                     ddd d
t          d!d"¬¦  «         d#„ }|                     d$d%d&|d'd
d(¬)¦  «         |S )*Nz-Rz	--refleakÚrefleakÚ
store_truezDetect reference / memory leaks)ÚdestÚactionÚhelpz-mz--multiprocessÚmultiprocessú?zParallelize tests)r“   Únargsr   Úconstr•   ú-lz--listrj   zList tests without running themz--tagsr   zAComma-separated list of tags to select a subset of the test suite)r“   r   r•   z--exclude-tagsÚexclude_tagszDComma-separated list of tags to de-select a subset of the test suitez--randomÚrandom_selectz$Random proportion of tests to selectz	--profileÚprofilezProfile the test runz-jz--slicerX   ÚNonezShard the test sequencec                 ó0   — | dk    rt          d¦  «        ‚| S )NÚancestorzinvalid option for --gitdiffr"   rC   s    r    Úgit_diff_strz:NumbaTestProgram._getParentArgParser.<locals>.git_diff_strî   s   € Ø�JŠˆÝ Ð!?Ñ@Ô@Ð@ØˆHr'   z-gz	--gitdiffÚgitdiffFz˜Run tests from changes made against origin/release0.58 as identified by `git diff`. If set to "ancestor", the diff compares against the common ancestor.)r“   r   Údefaultr˜   r•   )
rz   r†   Ú_getParentArgParserÚ
testRunnerÚadd_argumentrV   ÚmultiprocessingÚ	cpu_countr-   Úfloat)r_   Úparserr¡   r9   s      €r    r¤   z$NumbaTestProgram._getParentArgParserÎ   sß  ø€ õ Õ'¨Ñ.Ô.×BÒBÑDÔDˆØŒ?Ð"Ø×Ò  k¸	Ø'3Ø%Fð  ñ Hô Hð Hð 	×Ò˜DÐ"2¸Ø"%Ý!$Ý"1Ô";Ñ"=Ô"=Ø!4ð	 	ñ 	6ô 	6ð 	6ð
 	×Ò˜D (°Ø#/Ø!Bð 	ñ 	Dô 	Dð 	Dð 	×Ò˜H¨6½ð">ð 	ñ 	?ô 	?ð 	?ð 	×ÒÐ,°>Íð">ð 	ñ 	?ô 	?ð 	?ð 	×Ò˜J¨_Å5Ø!Gð 	ñ 	Iô 	Ið 	Ià×Ò˜K¨iØ#/Ø!7ð 	ñ 	9ô 	9ð 	9ð 	×Ò˜D )°*ÀCÝ!$¨FØ!:ð 	ñ 	<ô 	<ð 	<ð	ð 	ð 	ð
 	×Ò˜D +°IÀLØ$)°ð#Að 	ñ 	Cô 	Cð 	Cð ˆr'   c                 óº  — d }|D ]}||v r|€|}Œt          d|z  ¦  «        ‚Œ|��5|                     |¦  «        }	 ||k    r3||dz                                 ¦   «         }|                     |¦  «         nAd|v r.|                     d¦  «        d                              ¦   «         }nt          d¦  «        ‚n"# t          $ r d}t          ||z  ¦  «        ‚w xY w|                     d¦  «        rt          d¦  «        ‚d|v rd}t          ||z  ¦  «        ‚|d	d …                              dd
¦  «        }t          | ||¦  «         |                     |¦  «         d S d S )Nzargument %s supplied repeatedlyr   ú=Úunreachablez,%s requires at least one tag to be specifiedú-z,tag starts with '-', probably a syntax errorz1%s argument contains '=', probably a syntax erroré   Ú_)
r#   rS   ÚstripÚremoverU   ÚAssertionErrorÚ
IndexErrorr   ÚreplaceÚsetattr)	r_   ÚargvÚtagstrÚfoundr=   ÚposnÚtag_argsrY   Úattrs	            r    Ú_handle_tagszNumbaTestProgram._handle_tagsû   s¢  € ØˆØð 	Qð 	QˆAØ˜ˆ{ˆ{Ø�=Ø�E�Eå$Ð%FÈÑ%OÑPÔPÐPð	 ð ÑØ—:’:˜eÑ$Ô$ˆDð/Ø˜F’?�?Ø# D¨1¡Hœ~×3Ò3Ñ5Ô5�HØ—K’K Ñ)Ô)Ð)Ð)à˜e�|�|Ø$)§K¢K°Ñ$4Ô$4°QÔ$7×$=Ò$=Ñ$?Ô$?˜˜å,¨]Ñ;Ô;Ð;øøÝð /ð /ð /àD�Ý   v¡Ñ.Ô.Ð.ð/øøøð
 ×"Ò" 3Ñ'Ô'ð QÝ Ð!OÑPÔPÐPð �hˆˆØI�Ý   v¡Ñ.Ô.Ð.Ø˜!˜"˜"”:×%Ò% c¨3Ñ/Ô/ˆDÝ�D˜$ Ñ)Ô)Ð)Ø�KŠK˜ÑÔÐÐÐð3 Ðs   ¼A:B7 Â7Cc                 ó"  •— d|v r|                      d¦  «         d| _        t          t          | ¦  «                             |¦  «         t          | d¦  «        r| j                             ¦   «         s!| j        f| _	        |  
                    ¦   «          | j        r@d„ | j                             d¦  «        D ¦   «         }t          | j        |d¬¦  «        | _        | j        r@d„ | j                             d¦  «        D ¦   «         }t          | j        |d	¬¦  «        | _        | j        r%t!          | j        | j        | j        ¦  «        | _        | j        d
ur$t'          | j        | j        dk    ¬¦  «        | _        | j        dk    r	d| _        d S d S )Nrš   TrQ   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r(   ©r±   ©Ú.0r   s     r    ú
<listcomp>z.NumbaTestProgram.parseArgs.<locals>.<listcomp>.  s    € Ð<Ð<Ð< !�A—G’G‘I”IÐ<Ð<Ð<r'   ú,Úinclude)Úmodec                 ó6   — g | ]}|                      ¦   «         ‘ŒS r(   rÀ   rÁ   s     r    rÃ   z.NumbaTestProgram.parseArgs.<locals>.<listcomp>2  s    € ÐDÐDÐD !�A—G’G‘I”IÐDÐDÐDr'   ÚexcludeFr    ©Úuse_common_ancestorr   )r²   rj   rz   r†   Ú	parseArgsÚhasattrrQ   ÚcountTestCasesÚdefaultTestÚ	testNamesÚcreateTestsr   rU   Ú_choose_tagged_testsr›   rœ   Ú_choose_random_testsÚrandom_seedr¢   Ú_choose_gitdiff_testsrc   Úbuffer)r_   r·   r   r9   s      €r    rË   zNumbaTestProgram.parseArgs   s›  ø€ Ø�4ˆ<ˆ<Ø�KŠK˜ÑÔÐØˆDŒIåÕ Ñ%Ô%×/Ò/°Ñ5Ô5Ð5õ �t˜VÑ$Ô$ð 	¨D¬I×,DÒ,DÑ,FÔ,Fð 	Ø"Ô.Ð0ˆDŒNØ×ÒÑÔÐàŒ9ð 	NØ<Ð< t¤y§¢°sÑ';Ô';Ð<Ñ<Ô<ˆDÝ,¨T¬Y¸À9ÐMÑMÔMˆDŒIàÔð 	NØDÐD tÔ'8×'>Ò'>¸sÑ'CÔ'CÐDÑDÔDˆDÝ,¨T¬Y¸À9ÐMÑMÔMˆDŒIàÔð 	?Ý,¨T¬Y¸Ô8JØ-1Ô-=ñ?ô ?ˆDŒIð Œ<˜uÐ$Ð$Ý-Ø”	Ø%)¤\°ZÒ%?ðñ ô ˆDŒIð
 Œ>˜QÒÐð ˆDŒKˆKˆKð Ðr'   c                 ó   — d S r^   r(   )r_   r·   ÚLoaders      r    Ú_do_discoveryzNumbaTestProgram._do_discoveryD  s	   € ð
 	ˆr'   c                 ój  •‡ — ‰ j         r6t          ‰ _        t          t          d¦  «        st          j        d¦  «         nT‰ j        rt          ‰ j	        ¦  «        ‰ _        n3‰ j        €,t          ‰ j	        ‰ j        ‰ j        ‰ j        ¬¦  «        ‰ _        ‰ j        r`‰ j        sY‰ j        dk     rd}t!          |¦  «        ‚t#          t$          j        ‰ j        ‰ j	        ‰ j        ‰ j        ‰ j        ¬¦  «        ‰ _        ˆˆ fd„}‰ j        �r t*          j                             t*          j                             t          j        d         j        ¦  «        ¦  «        d         d	z   }t7          j        t:          j        ¬
¦  «        }|                     ¦   «          	 |                      |¦  «         | !                    ¦   «          tE          d|›�¦  «         | #                    |¦  «         d S # | !                    ¦   «          tE          d|›�¦  «         | #                    |¦  «         w xY w |¦   «          d S )NÚgettotalrefcountz^detecting reference leaks requires a debug build of Python, only memory leaks will be detected)rc   ÚfailfastrÕ   r   zSValue specified for the number of processes to use in running the suite must be > 0c                  óV   •— t          t          ‰¦  «                             ¦   «          d S r^   )rz   r†   ÚrunTests)r9   r_   s   €€r    Úrun_tests_realz1NumbaTestProgram.runTests.<locals>.run_tests_realh  s&   ø€ ÝÕ" DÑ)Ô)×2Ò2Ñ4Ô4Ð4Ð4Ð4r'   Ú__main__r   z.prof)ÚtimerzWriting test profile data into )$r‘   ÚRefleakTestRunnerr¥   rÌ   rf   ÚwarningsÚwarnrj   r\   rX   r~   rc   rÛ   rÕ   r–   r‹   r#   ÚParallelTestRunnerr   r€   r�   r.   r/   ÚsplitextÚbasenameÚmodulesÚ__file__ÚcProfileÚProfileÚtimeÚperf_counterÚenableÚruncallÚdisablerm   Ú
dump_stats)r_   rY   rÞ   ÚfilenameÚpr9   s   `    €r    rÝ   zNumbaTestProgram.runTestsK  sC  øø€ ØŒ<ð 	BÝ/ˆDŒOå�3Ð 2Ñ3Ô3ð OÝ”ð Nñ Oô Oð Oøð ŒYð 	BÝ(¨¬Ñ7Ô7ˆDŒOˆOàŒ_Ð$Ý-¨d¬mØ8<¼Ø7;´}Ø59´[ðBñ Bô BˆDŒOð
 Ôð 
	E TÔ%5ð 
	EØÔ  1Ò$Ð$ð4�å  ‘o”oÐ%Ý0µÔ1FØ15Ô1BØ15´Ø;?¼>Ø:>¼-Ø8<¼ðEñ Eô EˆDŒOð	5ð 	5ð 	5ð 	5ð 	5ð 	5ð Œ<ñ 	Ý”w×'Ò'Ý”× Ò ¥¤¨ZÔ!8Ô!AÑBÔBñô àôàñˆHõ Ô ¥tÔ'8Ð9Ñ9Ô9ˆAØ�HŠH‰JŒJˆJð'Ø—	’	˜.Ñ)Ô)Ð)à—	’	‘”�Ý�¸X¸XÐGÑHÔHÐHØ—’˜XÑ&Ô&Ð&Ð&Ð&øð —	’	‘”�Ý�¸X¸XÐGÑHÔHÐHØ—’˜XÑ&Ô&Ð&Ð&øøøàˆNÑÔÐÐÐs   ÆG) Ç)=H&r^   )r   r<   rq   rr   r‘   r�   r–   rX   rj   r   r›   rœ   rÓ   r`   r¤   r½   rË   rØ   rÝ   r{   r|   s   @r    r†   r†   ¯   sç   ø€ € € € € ðð ð €GØ€GØ€LØ€HØ€DØ€DØ€LØ€MØ€Kð@ð @ð @ð @ð @ð+ð +ð +ð +ð +ðZ"ð "ð "ðJ"ð "ð "ð "ð "ðHð ð ð ð-ð -ð -ð -ð -ð -ð -ð -ð -r'   r†   )z?numba.cuda.tests.cudapy.test_libdevice.TestLibdeviceCompilationznumba.tests.test_num_threadsz!numba.tests.test_parallel_backendznumba.tests.test_svmlznumba.tests.test_ufuncsc                 óÒ   — g }t          | t          j        t          t          f¦  «        r(| D ]$}|                     t          |¦  «        ¦  «         Œ%n|                     | ¦  «         |S )z&
    Workhorse for _flatten_suite
    )r   rv   rƒ   rj   ÚtupleÚextendÚ_flatten_suite_innerrŽ   )rQ   Útestsr=   s      r    rö   rö   ‰  sp   € ð €EÝ�$�Ô+­Tµ5Ð9Ñ:Ô:ð Øð 	2ð 	2ˆAØ�LŠLÕ-¨aÑ0Ô0Ñ1Ô1Ð1Ð1ð	2ð 	�Š�TÑÔÐØ€Lr'   c                 óX  — t          | ¦  «        }t          ¦   «         }|D ]2}t          D ](}|t          |¦  «        v r|                     |¦  «         Œ)Œ3t          |¦  «        |z
  }d„ }t          ||¬¦  «        }|                     t          t          |¦  «        |¬¦  «        ¦  «         |S )z6
    Expand nested suite into list of test cases.
    c                 óD   — | j         t          | ¦  «        j        | j        fS r^   )r<   r   r   rK   rC   s    r    r>   z_flatten_suite.<locals>.key¦  s   € ØŒ|�T !™WœWÔ-¨qÔ/@Ð@Ð@r'   rd   )rö   r   Ú
_GENERATEDr-   ÚaddÚsortedrõ   rj   )rQ   r÷   Ú	generatedr$   ÚgÚnormalr>   s          r    rh   rh   –  sÁ   € õ ! Ñ&Ô&€Eõ ‘”€IØð !ð !ˆÝð 	!ð 	!ˆAØ•C˜‘F”Fˆ{ˆ{Ø—’˜aÑ Ô Ð øð	!õ �‰ZŒZ˜)Ñ#€FðAð Að Aå�6˜sÐ#Ñ#Ô#€EØ	‡L‚L•�˜Y™œ¨SÐ1Ñ1Ô1Ñ2Ô2Ð2Ø€Lr'   FrÉ   c                óŒ  ‡	— 	 ddl m} n# t          $ r t          d¦  «        ‚w xY w |d¦  «        Š	t          j                             dd¦  «        }|rt          d¦  «         d}nd	}‰	j                              ||d
¬¦  «         	                    ¦   «         }d„ |D ¦   «         }g }ˆ	fd„|D ¦   «         }t          | ¦  «        D ]P}t          |t          j        ¦  «        sJ ‚t          j        |j        ¦  «        }||v r|                     |¦  «         ŒQt          dt%          |¦  «        z  ¦  «         t          j        |¦  «        S )Nr   )ÚRepoz&gitpython needed for git functionalityr7   Únumbar÷   zGit diff by common ancestorzorigin/release0.58...HEADzorigin/release0.58..HEADT)Ú	name_onlyc                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r(   )r.   r/   Únormpath)rÂ   r=   s     r    rÃ   z)_choose_gitdiff_tests.<locals>.<listcomp>»  s(   € Ð<Ð<Ð<¨1•2”7×#Ò# AÑ&Ô&Ð<Ð<Ð<r'   c                 óZ   •— g | ]'}t           j                             ‰j        |¦  «        ‘Œ(S r(   )r.   r/   ÚjoinÚworking_dir)rÂ   r=   Úrepos     €r    rÃ   z)_choose_gitdiff_tests.<locals>.<listcomp>½  s,   ø€ ÐJÐJÐJ¸•2”7—<’< Ô 0°!Ñ4Ô4ÐJÐJÐJr'   zGit diff identified %s tests)Úgitr  ÚImportErrorr#   r.   r/   r  rm   ÚdiffrU   rh   r   rv   rw   r1   Úgetsourcefiler9   rŽ   rn   rƒ   )
r÷   rÊ   r  r/   ÚtargetÚgdiff_pathsÚselectedrQ   Úfnamer	  s
            @r    rÔ   rÔ   ­  sr  ø€ ðCØÐÐÐÐÐÐøÝð Cð Cð CÝÐAÑBÔBÐBðCøøøàˆ4�‰9Œ9€DÝŒ7�<Š<˜ Ñ)Ô)€DØð ,ÝÐ,Ñ-Ô-Ð-Ø,ˆˆà+ˆØ”(—-’- ¨¸�-Ñ=Ô=×CÒCÑEÔE€Kà<Ð<°Ð<Ñ<Ô<€KØ€HØJÐJÐJÐJ¸kÐJÑJÔJ€KÝ˜uÑ%Ô%ð "ð "ˆÝ˜$¥Ô 1Ñ2Ô2Ð2Ð2Ð2ÝÔ% d¤nÑ5Ô5ˆØ�KÐÐØ�OŠO˜DÑ!Ô!Ð!øÝ	Ð
(­3¨x©=¬=Ñ
8Ñ9Ô9Ð9ÝÔ˜hÑ'Ô'Ð's   ƒ
 Š$rÅ   c                 óÔ  — g }t          |¦  «        }t          | ¦  «        D ]´}t          |t          j        ¦  «        sJ ‚t          ||j        ¦  «        }	 |j        }n# t          $ r Y nw xY wt          |dd¦  «        }|dk    r|�||z  r| 	                    |¦  «         Œ€|dk    r|�||z  s| 	                    |¦  «         Œ£t          d|z  ¦  «        ‚t          j        |¦  «        S )zÅ
    Select tests that are tagged/not tagged with at least one of the given tags.
    Set mode to 'include' to include the tests with tags, or 'exclude' to
    exclude the tests with the tags.
    r   NrÅ   rÈ   zInvalid 'mode' supplied: %s.)r   rh   r   rv   rw   rJ   rK   Úim_funcr   rŽ   r#   rƒ   )r÷   r   rÆ   r  rQ   r   Ú
found_tagss          r    rÑ   rÑ   Æ  s  € ð €HÝˆt‰9Œ9€DÝ˜uÑ%Ô%ð Dð DˆÝ˜$¥Ô 1Ñ2Ô2Ð2Ð2Ð2Ý�t˜TÔ1Ñ2Ô2ˆð	à”<ˆDˆDøÝð 	ð 	ð 	ØˆDð	øøøõ ˜T 6¨4Ñ0Ô0ˆ
à�9ÒÐØÐ%¨*°tÑ*;Ð%Ø—’ Ñ%Ô%Ð%øØ�YÒÐàÐ!¨*°tÑ*;Ð!Ø—’ Ñ%Ô%Ð%øåÐ;¸dÑBÑCÔCÐCÝÔ˜hÑ'Ô'Ð's   ÁAÁ
A*Á)A*c                 óV  — t          j        ¦   «         }|                     |¦  «         t          | t          j        ¦  «        rt          | ¦  «        } |                     | t          t          | ¦  «        |z  ¦  «        ¦  «        } t          | d„ ¬¦  «        } t	          j        | ¦  «        S )z7
    Choose a given proportion of tests at random.
    c                 ó    —  | j         ¦   «         S r^   ©rO   )r
   s    r    rD   z&_choose_random_tests.<locals>.<lambda>î  s   € ¨7¨4¬7©9¬9€ r'   rd   )ÚrandomÚRandomÚseedr   rv   rƒ   rh   ÚsamplerV   rn   rü   )r÷   Úratior  Úrnds       r    rÒ   rÒ   å  s�   € õ Œ-‰/Œ/€CØ‡H‚HˆT�N„N€NÝ�%�Ô+Ñ,Ô,ð &Ý˜uÑ%Ô%ˆØ�JŠJ�u�c¥# e¡*¤*¨uÑ"4Ñ5Ô5Ñ6Ô6€EÝ�5Ð4Ð4Ð5Ñ5Ô5€EÝÔ˜eÑ$Ô$Ð$r'   c                  ó^  — t           j        } 	 t           j        }n# t          $ r d„ }Y nw xY wt           j        t           j        t           j        t           j        fD ]}|�|                     ¦   «          Œt          j	        ¦   «          t          j        ¦   «           | ¦   «          |¦   «         fS )Nc                  ó   — dS )Nr‡   r(   r(   r'   r    rD   z"_refleak_cleanup.<locals>.<lambda>û  s   € ˜€ r'   )rf   ÚgetallocatedblocksrÚ   r   Ústdoutrg   Ú
__stdout__Ú
__stderr__ÚflushÚ_clear_type_cacheÚgcÚcollect)Úfunc1Úfunc2Ústreams      r    Ú_refleak_cleanupr+  õ  s¦   € åÔ"€EðÝÔ$ˆˆøÝð ð ð Ø�
ˆˆˆðøøøõ
 ”:�sœz­3¬>½3¼>ÐJð ð ˆØÐØ�LŠL‰NŒNˆNøåÔÑÔÐå„J�L„L€LØˆ5‰7Œ7�E�E‘G”GÐÐs   Ž ›+ª+c                   ó   — e Zd ZdS )ÚReferenceLeakErrorN)r   r<   rq   r(   r'   r    r-  r-  	  s   € € € € € Ø€Dr'   r-  c                   ó   — e Zd Zd„ ZdS )ÚIntPoolc                 ó   — |S r^   r(   )r_   r>   s     r    Ú__missing__zIntPool.__missing__  s   € Øˆ
r'   N)r   r<   rq   r1  r(   r'   r    r/  r/    s#   € € € € € ðð ð ð ð r'   r/  c                   ó,   ‡ — e Zd ZdZdZd„ Zˆ fd„Zˆ xZS )ÚRefleakTestResulté   é   c                 óp  — | j                              ¦   «          | j        }| j        }dg||z
  z  }dg||z
  z  }t	          ¦   «         }t          dd¦  «        D ]
}||          Œt          |¦  «        D ]Á}t          j        ¦   «         }|                     |¦  «         | 	                    ¦   «         sE| j
                             |j
        ¦  «         | j                             |j        ¦  «         t          ‚~t          ¦   «         \  }	}
||k    r"||
|z
           |||z
  <   ||	|z
           |||z
  <   |	|
}}ŒÂ||fS )Nr   i8ÿÿÿéÈ   )r*  r$  ÚrepetitionsÚwarmupr/  Úranger   Ú
TestResultrp   ÚwasSuccessfulÚfailuresrõ   Úerrorsr³   r+  )r_   rQ   ÚrepcountÚnwarmupÚ	rc_deltasÚalloc_deltasÚ	_int_poolÚiÚresÚalloc_afterÚrc_afterÚ	rc_beforeÚalloc_befores                r    Ú
_huntLeakszRefleakTestResult._huntLeaks  sV  € ØŒ×ÒÑÔÐàÔ#ˆØ”+ˆØ�C˜8 gÑ-Ñ.ˆ	Ø�s˜h¨Ñ0Ñ1ˆõ ‘I”Iˆ	Ý�t˜SÑ!Ô!ð 	ð 	ˆAØ�aŒLˆLˆLå�x‘”ð 	<ð 	<ˆAåÔ#Ñ%Ô%ˆCØ�HŠH�S‰MŒMˆMð ×$Ò$Ñ&Ô&ð %Ø”×$Ò$ S¤\Ñ2Ô2Ð2Ø”×"Ò" 3¤:Ñ.Ô.Ð.Ý$Ð$ØÝ$4Ñ$6Ô$6Ñ!ˆK˜Ø�GŠ|ˆ|Ø)2°8¸iÑ3GÔ)H�	˜!˜g™+Ñ&Ø,5°kÀLÑ6PÔ,Q�˜Q ™[Ñ)Ø&1°8˜)ˆLˆLØ˜,Ð&Ð&r'   c           
      óB  •— 	 |                       |¦  «        \  }}n'# t          $ r |                      ¦   «         rJ ‚Y d S w xY wd„ }d„ }d}|d|f|d|ffD ]�\  }}}	 |	|¦  «        rŒ|›d|›d|›dt          |¦  «        ›�}
d	}	 t	          |
¦  «        ‚# t
          $ r t          j        ¦   «         }Y nw xY w| j        r | j	         
                    |›d
|›d�¦  «         |                      ||¦  «         Œž|s*t          t          | ¦  «                             |¦  «         d S d S )Nc                 ó    — t          | ¦  «        S r^   )Úany©Údeltass    r    Úcheck_rc_deltasz5RefleakTestResult.addSuccess.<locals>.check_rc_deltas@  s   € Ý�v‘;”;Ðr'   c                 ó    — d|                       d¦  «        z  t          | ¦  «        k     rdS t          | ¦  «        t          d¦  «        k    sdS dS )Nr4  r   T)r   r   éÿÿÿÿF)rR   rn   r   rN  s    r    Úcheck_alloc_deltasz8RefleakTestResult.addSuccess.<locals>.check_alloc_deltasC  sH   € à�6—<’< ‘?”?Ñ"¥S¨¡[¤[Ò0Ð0Ø�tå�v‘;”;¥# j¡/¤/Ò1Ð1Ø�tØ�5r'   FÚ
referenceszmemory blocksz leaked r8   z, sum=Tz = )rJ  r³   r<  Úsumr-  rW   rf   Úexc_infoÚshowAllr*  ÚwriteÚ
addFailurerz   r3  Ú
addSuccess)r_   rQ   rA  rB  rP  rS  ÚfailedrO  Ú	item_nameÚcheckerrY   rV  r9   s               €r    rZ  zRefleakTestResult.addSuccess7  s¡  ø€ ð	Ø&*§o¢o°dÑ&;Ô&;Ñ#ˆI�|�|øÝð 	ð 	ð 	à×)Ò)Ñ+Ô+Ð+Ð+Ð+ØˆFˆFð	øøøð	ð 	ð 	ð	ð 	ð 	ð ˆð ˜ oÐ6Ø˜?Ð,>Ð?ð+Að 	0ð 	0Ñ&ˆF�I˜wð ˆw�v‰Œð 
0à�D�D˜&˜&˜& ) ) )­S°©[¬[¨[ð:�à�ð.Ý,¨SÑ1Ô1Ð1øÝ ð .ð .ð .Ý"œ|™~œ~�H�H�Hð.øøøà”<ð HØ”K×%Ò%°I°I°I¸v¸v¸vÐ&FÑGÔGÐGØ—’  hÑ/Ô/Ð/øàð 	<ÝÕ# TÑ*Ô*×5Ò5°dÑ;Ô;Ð;Ð;Ð;ð	<ð 	<s    ƒ œ A ¿A ÂBÂB2Â1B2)r   r<   rq   r9  r8  rJ  rZ  r{   r|   s   @r    r3  r3    sQ   ø€ € € € € à€FØ€Kð'ð 'ð 'ð>'<ð '<ð '<ð '<ð '<ð '<ð '<ð '<ð '<r'   r3  c                   ó   — e Zd ZeZdS )rá   N)r   r<   rq   r3  Úresultclassr(   r'   r    rá   rá   a  s   € € € € € Ø#€K€K€Kr'   rá   c                   ó   — e Zd ZdZd„ ZdS )ÚParallelTestResultzA
    A TestResult able to inject results from other results.
    c                 óú  — | j                              |j                              ¦   «         ¦  «         | j                              ¦   «          | xj        |j        z  c_        | j                             |j        ¦  «         | j                             |j        ¦  «         | j                             |j        ¦  «         | j	                             |j	        ¦  «         | j
                             |j
        ¦  «         dS )zI
        Add the results from the other *result* to this result.
        N)r*  rX  Úgetvaluer$  ÚtestsRunr=  rõ   r>  ÚskippedÚexpectedFailuresÚunexpectedSuccesses)r_   r   s     r    Úadd_resultszParallelTestResult.add_resultsj  sÐ   € ð 	Œ×Ò˜&œ-×0Ò0Ñ2Ô2Ñ3Ô3Ð3ØŒ×ÒÑÔÐØˆŒ˜œÑ(ˆŒØŒ×Ò˜Vœ_Ñ-Ô-Ð-ØŒ×Ò˜6œ=Ñ)Ô)Ð)ØŒ×Ò˜FœNÑ+Ô+Ð+ØÔ×$Ò$ VÔ%<Ñ=Ô=Ð=ØÔ ×'Ò'¨Ô(BÑCÔCÐCÐCÐCr'   N)r   r<   rq   rr   rh  r(   r'   r    ra  ra  e  s2   € € € € € ðð ðDð Dð Dð Dð Dr'   ra  c                   ó$   — e Zd ZdZdZd„ Zdd„ZdS )Ú_MinimalResultz7
    A minimal, picklable TestResult-alike object.
    )	r=  r>  re  rf  rg  r*  Ú
shouldStoprd  Útest_idc                 ó   — d|_         dS )zR
        Remove any unpicklable attributes from TestCase instance *case*.
        N)Ú_outcomeForDoCleanups)r_   r
   s     r    Ú
fixup_casez_MinimalResult.fixup_case‚  s   € ð
 &*ˆÔ"Ð"Ð"r'   Nc           
      ó4  — | j         D ]"}t          | |t          ||d ¦  «        ¦  «         Œ#| j        D ]\  }}|                      |¦  «         Œ| j        D ]\  }}|                      |¦  «         Œ| j        D ]\  }}|                      |¦  «         Œ|| _        d S r^   )Ú	__slots__r¶   rJ   rf  ro  r>  r=  rl  )r_   Úoriginal_resultrl  r¼   r
   r°   s         r    r`   z_MinimalResult.__init__‰  sÀ   € Ø”Nð 	Fð 	FˆDÝ�D˜$¥¨¸¸tÑ DÔ DÑEÔEÐEÐEØÔ,ð 	"ð 	"‰GˆD�!Ø�OŠO˜DÑ!Ô!Ð!Ð!Ø”{ð 	"ð 	"‰GˆD�!Ø�OŠO˜DÑ!Ô!Ð!Ð!Ø”}ð 	"ð 	"‰GˆD�!Ø�OŠO˜DÑ!Ô!Ð!Ð!ØˆŒˆˆr'   r^   )r   r<   rq   rr   rq  ro  r`   r(   r'   r    rj  rj  x  sH   € € € € € ðð ð€Ið
*ð *ð *ð	ð 	ð 	ð 	ð 	ð 	r'   rj  c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú_FakeStringIOz:
    A trivial picklable StringIO-alike for Python 2.
    c                 ó   — || _         d S r^   ©Ú_value)r_   Úvalues     r    r`   z_FakeStringIO.__init__š  s   € ØˆŒˆˆr'   c                 ó   — | j         S r^   rv  )r_   s    r    rc  z_FakeStringIO.getvalue�  s
   € ØŒ{Ðr'   N)r   r<   rq   rr   r`   rc  r(   r'   r    rt  rt  •  s<   € € € € € ðð ðð ð ðð ð ð ð r'   rt  c                   ó>   — e Zd ZdZd„ Zd„ Zej        d„ ¦   «         ZdS )Ú_MinimalRunnerzu
    A minimal picklable object able to instantiate a runner in a
    child process and run a test case with it.
    c                 ó"   — || _         || _        d S r^   )Ú
runner_clsÚrunner_args)r_   r}  r~  s      r    r`   z_MinimalRunner.__init__§  s   € Ø$ˆŒØ&ˆÔÐÐr'   c                 óò  — | j         }t          ¦   «         |d<    | j        di |¤Ž} |j        ¦   «         }t	          j        ¦   «          t	          j        |¦  «         |j        |_        |j        |_        |  	                    |¦  «        5   ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j                             ¦   «         ¦  «        |_        t          ||                     ¦   «         ¦  «        S )Nr*  r(   )r~  r   r}  Ú_makeResultr   ÚinstallHandlerÚregisterResultrÛ   rÕ   Úcleanup_objectrt  r*  rc  rj  rO   )r_   rQ   r�   r   r   s        r    Ú__call__z_MinimalRunner.__call__®  s   € àÔ!ˆõ $™:œ:ˆˆxÑØ �”Ð*Ð* 6Ð*Ð*ˆØ#�Ô#Ñ%Ô%ˆåÔÑ Ô Ð ÝÔ˜vÑ&Ô&Ð&Ø œ/ˆŒØœˆŒØ× Ò  Ñ&Ô&ð 	ð 	ØˆD�‰LŒLˆLð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ & f¤m×&<Ò&<Ñ&>Ô&>Ñ?Ô?ˆŒÝ˜f d§g¢g¡i¤iÑ0Ô0Ð0s   Â	B!Â!B%Â(B%c              #   óÖ   K  — t          |j        ¦  «        }	 |V — t          |j        ¦  «        |z
  }|D ]
}|j        |= ŒdS # t          |j        ¦  «        |z
  }|D ]
}|j        |= Œw xY w)zu
        A context manager which cleans up unwanted attributes on a test case
        (or any other object).
        N)r   Ú__dict__)r_   rQ   Úvanilla_attrsÚspurious_attrsÚnames        r    rƒ  z_MinimalRunner.cleanup_objectÁ  sš   è è € õ ˜DœMÑ*Ô*ˆð	(ØˆJˆJˆJå  ¤Ñ/Ô/°-Ñ?ˆNØ&ð (ð (�Ø”M $Ð'Ð'ð(ð (øõ ! ¤Ñ/Ô/°-Ñ?ˆNØ&ð (ð (�Ø”M $Ð'Ð'ð(øøøs   ˜A Á&A(N)	r   r<   rq   rr   r`   r„  Ú
contextlibÚcontextmanagerrƒ  r(   r'   r    r{  r{  ¡  s[   € € € € € ðð ð
'ð 'ð 'ð1ð 1ð 1ð& Ôð(ð (ñ Ôð(ð (ð (r'   r{  c                 óÌ   — g }g }g t          |t          | ¦  «        ¦  «        ¢}d„ }|D ]8} ||¦  «        r|                     |¦  «         Œ#|                     |¦  «         Œ9||fS )z:
    Split test suite into parallel and serial tests.
    c                 ó‚   — | j         }t          | |¦  «        }|j        |k    r|j        dk    rdS t          | dd¦  «        S )NÚtestFailureFry   T)rK   rJ   r   )rQ   Úmethod_nameÚmethods      r    Úis_parallelizable_test_casez=_split_nonparallel_tests.<locals>.is_parallelizable_test_caseÙ  sL   € ð Ô*ˆÝ˜˜{Ñ+Ô+ˆØŒ?˜kÒ)Ð)¨f¬oÀÒ.NÐ.NØ�5å�tÐ4°dÑ;Ô;Ð;r'   )rk   rh   rŽ   )rQ   ÚslicedÚptestsÚstestsÚflatr‘  r$   s          r    Ú_split_nonparallel_testsr–  Ð  s‘   € ð €FØ€Fà2�V�F�N¨4Ñ0Ô0Ñ1Ô1Ð2€Dð<ð <ð <ð ð ð ˆØ&Ð& qÑ)Ô)ð 	Ø�MŠM˜!ÑÔÐÐà�MŠM˜!ÑÔÐÐà�6ˆ>Ðr'   iX  c                   ó<   ‡ — e Zd ZdZeZeZd„ Zd„ Z	d„ Z
ˆ fd„Zˆ xZS )rä   z\
    A test runner which delegates the actual running to a pool of child
    processes.
    c                 ó†   — t          j        j        | fi |¤Ž || _        || _        t          |¦  «        | _        || _        d S r^   )r   r€   r`   r}  ÚnprocsrZ   rX   r~  )r_   r}  r™  rX   r�   s        r    r`   zParallelTestRunner.__init__÷  sI   € ÝÔÔ& tÐ6Ð6¨vÐ6Ð6Ð6Ø$ˆŒØˆŒÝ# HÑ-Ô-ˆŒØ!ˆÔÐÐr'   c                 ó’  ‡ ‡— t          ‰ j        ‰ j        ¦  «        }dŠˆˆ fd„t          dt	          ‰ j        ¦  «        ‰¦  «        D ¦   «         }|D ]Ã}t          j        ‰ j        ¦  «        }	 ‰  	                    ||||¦  «         |j
        r+|                     ¦   «          	 |                     ¦   «           n^|                     ¦   «          n#  |                     ¦   «          ‚ xY w	 |                     ¦   «          Œ«# |                     ¦   «          w xY w|j
        s+t          ‰ j        ¦  «        }|                     |¦  «         |S d S )Néd   c                 ó4   •— g | ]}‰j         ||‰z   …         ‘ŒS r(   )Ú_ptests)rÂ   rD  Ú
chunk_sizer_   s     €€r    rÃ   z1ParallelTestRunner._run_inner.<locals>.<listcomp>  s?   ø€ ð Lð Lð LØð œ, q¨¨Z©Ð'7Ô8ð Lð Lð Lr'   r   )r{  r}  r~  r:  rn   r�  r§   ÚPoolr™  Ú_run_parallel_testsrk  Ú	terminater  Úclosert   Ú_stestsrp   )r_   r   Úchild_runnerÚsplitted_testsr÷   Úpoolr”  rž  s   `      @r    Ú
_run_innerzParallelTestRunner._run_innerþ  sq  øø€ õ & d¤o°tÔ7GÑHÔHˆð ˆ
ðLð Lð Lð Lð LÝ#(¨­C°´Ñ,=Ô,=¸zÑ#JÔ#JðLñ Lô Lˆð $ð 	ð 	ˆEÝ"Ô'¨¬Ñ4Ô4ˆDðØ×(Ò(¨°°|ÀUÑKÔKÐKð Ô$ð !Ø—N’NÑ$Ô$Ð$Øð
 —	’	‘”���ð —J’J‘L”L�L�Løðà—’Ñ Ô Ð àøøøð !ð —	’	‘”��ø�—	’	‘”��øøøØÔ ð 	Ý  ¤Ñ.Ô.ˆFØ�JŠJ�vÑÔÐØˆMð	ð 	s$   Á-CÂC<Â7C<ÃC#Ã#C<Ã<Dc                 ó  — t          d„ |D ¦   «         ¦  «        }|                     t          ¬¦  «         |                     ||¦  «        }	 	 |                     | j        ¦  «        } |j        |¦  «         |                     |j        ¦  «         |j	        r	d|_	        d S ng# t          $ r Y d S t          $ rN}dd                     d„ t          |¦  «        D ¦   «         ¦  «        z  }	|	f|j        dd …         z   |_        |‚d }~ww xY wŒ¾)Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r^   r  )rÂ   r$   s     r    ú	<genexpr>z9ParallelTestRunner._run_parallel_tests.<locals>.<genexpr>!  s*   è è € Ð2Ð2 q˜AŸDšD™FœFÐ2Ð2Ð2Ð2Ð2Ð2r'   rd   Tz3Tests didn't finish before timeout (or crashed):
%sÚ c              3   ó    K  — | ]	}d |z  V — Œ
dS )z- %r
Nr(   )rÂ   Útids     r    rª  z9ParallelTestRunner._run_parallel_tests.<locals>.<genexpr>,  s&   è è € Ð QÐ Q°C ¨C¡Ð QÐ QÐ QÐ QÐ QÐ Qr'   r   )r   rl   r?   Úimap_unorderedÚ__next__Útimeoutrh  Údiscardrl  rk  ÚStopIterationr   r  rü   r�   )
r_   r   r¦  r¤  r÷   Úremaining_idsÚitÚchild_resultÚerY   s
             r    r   z&ParallelTestRunner._run_parallel_tests   s=  € ÝÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆØ�
Š
Õ+ˆ
Ñ,Ô,Ð,Ø× Ò  ¨uÑ5Ô5ˆð	ðØ!Ÿ{š{¨4¬<Ñ8Ô8�ð #�Ô" <Ñ0Ô0Ð0Ø×%Ò% lÔ&:Ñ;Ô;Ð;ØÔ*ð Ø(,�FÔ%Ø�Fðøõ !ð ð ð Ø��Ýð ð ð àMØŸšÐ QÐ Q½6À-Ñ;PÔ;PÐ QÑ QÔ QÑQÔQñR�ð ˜ !¤&¨¨¨¤*Ñ,�”Ø�øøøøðøøøð	s   ÁB" Â"
DÂ/	DÂ8A	DÄDc                 ó  •— t          || j        ¦  «        \  | _        | _        t	          dt          | j        ¦  «        ›dt          | j        ¦  «        ›�¦  «         t          t          | ¦  «                             | j	        ¦  «        S )Nz
Parallel: z
. Serial: )
r–  rX   r�  r£  rm   rn   rz   rä   rp   r§  )r_   rQ   r9   s     €r    rp   zParallelTestRunner.run7  s…   ø€ Ý%=¸dØ>B¼mñ&Mô &MÑ"ˆŒ�d”låˆ­C°´Ñ,=Ô,=Ð,=Ð,=Ý,/°´Ñ,=Ô,=Ð,=ð?ñ 	@ô 	@ð 	@õ Õ'¨Ñ.Ô.×2Ò2°4´?ÑCÔCÐCr'   )r   r<   rq   rr   ra  r_  Ú_TIMEOUTr°  r`   r§  r   rp   r{   r|   s   @r    rä   rä   î  s…   ø€ € € € € ðð ð
 %€KØ€Gð"ð "ð "ð ð  ð  ðDð ð ð.Dð Dð Dð Dð Dð Dð Dð Dð Dr'   rä   )rÅ   )?ÚcollectionsrŠ  ré   r1   r&  r§   r.   r  rf   rë   rv   râ   rM   Ú	functoolsr   Úior   r   r   r   r   r	   r
   r   Ú
numba.corer   r   r  ÚQueuer   r)   r4   r?   rZ   Úobjectr\   rƒ   rt   r€   r~   Úmainr†   rú   rö   rh   rÔ   rÑ   rÒ   r+  ÚRuntimeErrorr-  Údefaultdictr/  re   r3  rá   ra  rj  rt  r{  r–  r¸  rä   r(   r'   r    ú<module>rÂ     s�  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð,Ø,Ð,Ð,Ð,Ð,Ð,Ð,øØð ,ð ,ð ,Ø+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð,øøøðð ð ðF €�3ÐÑÔð7ð 7ñ Ôð7ðð ð ð$ð ð ðBð ð ð ð �ñ ô ð ð$3ð 3ð 3ð 3ð 3�(Ô$ñ 3ô 3ð 3ð(	9ð 	9ð 	9ð 	9ð 	9�fÔ+ñ 	9ô 	9ð 	9ðIð Ið Ið Ið I�x”}ñ Iô Ið Iðb€
ð
ð 
ð 
ðð ð ð. 9>ð (ð (ð (ð (ð (ð2(ð (ð (ð (ð>
%ð 
%ð 
%ð ð ð ð(	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ðð ð ð ð ˆkÔ%ñ ô ð ðK<ð K<ð K<ð K<ð K<˜Ô-ñ K<ô K<ð K<ð\$ð $ð $ð $ð $˜Ô-ñ $ô $ð $ðDð Dð Dð Dð D˜Ô.ñ Dô Dð Dð&ð ð ð ð �Vñ ô ð ð:	ð 	ð 	ð 	ð 	�Fñ 	ô 	ð 	ð,(ð ,(ð ,(ð ,(ð ,(�Vñ ,(ô ,(ð ,(ð^ð ð ð8 €ðPDð PDð PDð PDð PD˜Ô.ñ PDô PDð PDð PDð PDs   ÁA% Á%A3Á2A3