
    sh>t                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJr  S SKJr  S SK
JrJrJrJrJrJr  SSKJr  S SKJr   S SKJr  S
 r\" SS9S 5       rS r S r! " S S\"5      r# " S S\
RH                  5      r% " S S\RL                  5      r' " S S\
RP                  5      r)Sr*S r+S r,SS.S jr-S5S jr.S r/S  r0 " S! S"\15      r2 " S# S$\ Rf                  5      r4 " S% S&\Rj                  5      r6 " S' S(\RL                  5      r7 " S) S*\Rj                  5      r8 " S+ S,\"5      r9 " S- S.\"5      r: " S/ S0\"5      r;S1 r<S2r= " S3 S4\RL                  5      r>g! \ a
    S S	KJr   GN#f = f)6    N)	lru_cache)StringIO)resultrunnersignalssuiteloadercase   )
TestLoader)config)TimeoutError)Emptyc                    ^  U 4S jnU$ )zG
Create a decorator allowing tests to be tagged with the *known_tags*.
c                  R   >^  T  H  nUT;  d  M  [        SU< 35      e   U 4S jnU$ )zz
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                 $  > [        U 5      (       a5  [        U [        5      (       d   U R                  R	                  S5      (       d  [        S5      e U R                  nUR                  T5        U $ ! [         a    [        5       =ol         N/f = f)Ntest_z(@tag(...) should be used on test methods)
callable
isinstancetype__name__
startswith	TypeErrortagsAttributeErrorsetupdate)funcsr   s     f/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/testing/main.pydecorate1make_tag_decorator.<locals>.tag.<locals>.decorate+   sv    TNNjt&<&<}}//88 JKK&II HHTNK " & #%I&s   A2 2BB
ValueError)r   tr!   
known_tagss   `  r    tagmake_tag_decorator.<locals>.tag!   s1     A
" a!9:: 		      )r&   r'   s   ` r    make_tag_decoratorr+      s    
, Jr)      )maxsizec                 z    [        [        R                  R                  [        R
                  " U 5      5      5      $ )z>
Gets the mtime of the file in which a test class is defined.
)strospathgetmtimeinspectgetfile)clss    r    
_get_mtimer6   ?   s'    
 rww 4566r)   c                     U R                   n[        U5      [        U 5      -   nSSKJn  X1R                  5       ;   a3  [        UR                  5      < S[        UR                  5      < SU< 3nU$ )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__r6   r/   numba.cuda.testingr8   mro
__module__r   )xr5   keyr8   s       r    cuda_sensitive_mtimerA   G   sQ     ++C
S/CF
"C/wwy /S\\1BCHJr)   c                 .  ^^ [        U 5      (       a  U $ U (       d  S $  U R                  S5      u  mm[        T5      m[        T5      mTS:X  a  S $ TS:  d  TS:  d  TT:  a  [	        S5      eUU4S jnU$ ! [         a    SU -  n[	        U5      ef = f)zParses 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                     gNTr*   r?   s    r    <lambda>parse_slice.<locals>.<lambda>b       r)   :zExpected 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                     grD   r*   rE   s    r    rF   rG   n   rH   r)   zSharding out of rangec                    > [        X R                  5      nS[        US0 5      ;   a  g[        [        R                  " U R                  5       R                  S5      5      5      T-  T:H  $ )Nalways_testr   Tzutf-8)getattr_testMethodNameabszlibcrc32idencode)testr   countindexs     r    decideparse_slice.<locals>.decider   sV    4!5!56Dfb 99tzz$'')"2"27";<=ENNr)   )r   splitint	Exceptionr$   )useslicemsgrW   rU   rV   s      @@r    parse_slicer^   Y   s     	!,E
E
 z	eai5E>011	O
 !  @BJK 	 os   *A9 9Bc                   $    \ rS rSrSrS rS rSrg)
TestListerz   z5Simply list available tests rather than running them.c                 $    [        U5      U l        g N)r^   r\   )selfr\   s     r    __init__TestLister.__init__|   s    #H-r)   c                    [         R                  " [        R                  SSS9n[	        U5      U l        [        [        U R                  U R
                  5      5      nU R
                  R                  [        S9  U H  n[        UR                  5       5        M     [        S[        U R
                  5      [        U5      4-  5        U$ )NTr   )descriptions	verbosityr@   z%d tests found. %s selected)r   TextTestResultsysstderr_flatten_suite
_test_listlistfilterr\   sortrA   printrR   len)rd   rT   r   masked_listr%   s        r    runTestLister.run   s    &&szz124(.6$--AB!56A!$$&M +s4??/C/2;/?/A A 	Br)   )ro   r\   N)r   r>   __qualname____firstlineno____doc__re   rv   __static_attributes__r*   r)   r    r`   r`   z   s    ?.
r)   r`   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )SerialSuite   a-  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                    > [        U[        R                  5      (       d  U H  nU R                  U5        M     g SUl        [
        [        U ]  U5        g )NF)r   unittestTestCaseaddTest_numba_parallel_test_superr}   )rd   rT   r%   r;   s      r    r   SerialSuite.addTest   sD    $ 1 122Q  */D&+t,T2r)   r*   )r   r>   rx   ry   rz   r   r{   __classcell__r;   s   @r    r}   r}      s    3 3r)   r}   c                   .   ^  \ rS rSrS rU 4S jrSrU =r$ )BasicTestRunner   c                 f    [         R                  R                  " U 40 UD6  [        U5      U l        g rc   )r   TextTestRunnerre   r^   r\   )rd   r\   kwargss      r    re   BasicTestRunner.__init__   s'    &&t6v6#H-r)   c                    > [        [        U R                  [        U5      5      5      nUR	                  [
        S9  [        R                  " U5      n[        [        U ]+  U5      $ )Nrj   )rp   rq   r\   rn   rr   rA   r   	TestSuiter   r   rv   )rd   rT   rv   wrappedr;   s       r    rv   BasicTestRunner.run   sN    6$--)=>?)*$$S)_d/88r)   )r\   )r   r>   rx   ry   re   rv   r{   r   r   s   @r    r   r      s    .9 9r)   r   c                      ^  \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrU 4S jrU 4S jrS rU 4S	 jrSS
 jrU 4S jrSrU =r$ )NumbaTestProgram   a  
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                    > UR                  SS 5      n[        U5      US'   [        R                  R	                  S5        UR                  SS5      U l        [        [        U ]"  " U0 UD6  g )Ntopleveldir
testLoaderz:xnomultiprocF)	popr   rl   warnoptionsappendr   r   r   re   )rd   argsr   r   r;   s       r    re   NumbaTestProgram.__init__   s^    jj5)+6| 	t$!::mU;.??r)   c           
        > [         [        U ]  5       nU R                  c  UR	                  SSSSSS9  UR	                  SSS	S
[
        [        R                  " 5       SS9  UR	                  SSSSSS9  UR	                  SS[        SS9  UR	                  SS[        SS9  UR	                  SS[        SS9  UR	                  SSSSS9  UR	                  SSS S
[        S!S"S9  S# nUR	                  S$S%S&US'S
S(S)9  U$ )*Nz-Rz	--refleakrefleak
store_truezDetect reference / memory leaks)destactionhelpz-mz--multiprocessmultiprocess?zParallelize tests)r   nargsr   constr   -lz--listrp   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--slicer\   NonezShard the test sequencec                 (    U S:w  a  [        S5      eU $ )Nancestorzinvalid option for --gitdiffr#   rE   s    r    git_diff_str:NumbaTestProgram._getParentArgParser.<locals>.git_diff_str   s    J !?@@Hr)   z-gz	--gitdiffgitdiffFzRun tests from changes made against origin/release0.61 as identified by `git diff`. If set to "ancestor", the diff compares against the common ancestor.)r   r   defaultr   r   )
r   r   _getParentArgParser
testRunneradd_argumentrZ   multiprocessing	cpu_countr/   float)rd   parserr   r;   s      r    r   $NumbaTestProgram._getParentArgParser   si    'BD??"k	'3%F   H 	D"2"%!$"1";";"=!4	 	 	6
 	D(#/!B 	 	D 	H6"> 	 	? 	,>"> 	 	? 	J_5!G 	 	IKi#/!7 	 	9 	D)*C!$F!: 	 	<	
 	D+IL$)#A 	 	C r)   c                 D   S nU H  nX$;   d  M
  Uc  UnM  [        SU-  5      e   Ub  UR                  U5      n X2:X  a'  XS-      R                  5       nUR                  U5        O4SU;   a#  UR	                  S5      S   R                  5       nO[        S5      eUR                  S5      (       a  [        S5      eSU;   a  Sn[        Xr-  5      eUS	S  R                  SS
5      n[        XU5        UR                  U5        g g ! [         a    Sn[        Xr-  5      ef = f)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$   rV   stripremoverY   AssertionError
IndexErrorr   replacesetattr)	rd   argvtagstrfoundr?   posntag_argsr]   attrs	            r    _handle_tagsNumbaTestProgram._handle_tags   s/   A{=E$%F%OPP  ::e$D/?#1H~335HKK)e|$)KK$4Q$7$=$=$?,];; ""3'' !OPP hI ..!":%%c3/DD)KK3   /D ../s   +D '(D D Dc                   > SU;   a  UR                  S5        SU l        [        [        U ]  U5        [        U S5      (       a  U R                  R                  5       (       d"  U R                  4U l	        U R                  5         U R                  (       aR  U R                  R                  S5       Vs/ s H  o"R                  5       PM     nn[        U R                  USS9U l        U R                  (       aR  U R                  R                  S5       Vs/ s H  o"R                  5       PM     nn[        U R                  USS9U l        U R                   (       a0  [#        U R                  U R                   U R$                  5      U l        U R&                  SLa&  [)        U R                  U R&                  S	:H  S
9U l        U R*                  S::  a  SU l        g g s  snf s  snf )Nr   TrT   ,include)modeexcludeFr   use_common_ancestorr   )r   rp   r   r   	parseArgshasattrrT   countTestCasesdefaultTest	testNamescreateTestsr   rY   r   _choose_tagged_testsr   r   _choose_random_testsrandom_seedr   _choose_gitdiff_testsri   buffer)rd   r   r   r   r;   s       r    r   NumbaTestProgram.parseArgs   st   4<KKDI/5 tV$$DII,D,D,F,F"..0DN99'+yys';<';!GGI';D<,TYY9MDI'+'8'8'>'>s'CD'C!GGI'CDD,TYY9MDI,TYY8J8J-1-=-=?DI <<u$-		%)\\Z%?DI
 >>Q DK # = Es   3GGc                     g rc   r*   )rd   r   Loaders      r    _do_discoveryNumbaTestProgram._do_discoveryD  s    
 	r)   c           	        >^  T R                   (       a7  [        T l        [        [        S5      (       d  [
        R                  " S5        OrT R                  (       a  [        T R                  5      T l        OFT R                  c9  [        T R                  T R                  T R                  T R                  S9T l        T R                  (       a  T R                  (       dp  T R                  S:  a  Sn[!        U5      e[#        [$        R&                  T R                  T R                  T R                  T R                  T R                  S9T l        UU 4S jnT R(                  (       a  [*        R,                  R/                  [*        R,                  R1                  [        R2                  S   R4                  5      5      S   S	-   n[6        R8                  " [:        R<                  S
9nUR?                  5          URA                  U5        URC                  5         [E        SU< 35        URG                  U5        g U" 5         g ! URC                  5         [E        SU< 35        URG                  U5        f = f)Ngettotalrefcountz^detecting reference leaks requires a debug build of Python, only memory leaks will be detected)ri   failfastr   r   zSValue specified for the number of processes to use in running the suite must be > 0c                  *   > [         [        T]  5         g rc   )r   r   runTests)r;   rd   s   r    run_tests_real1NumbaTestProgram.runTests.<locals>.run_tests_realh  s    "D24r)   __main__r   z.prof)timerzWriting test profile data into )$r   RefleakTestRunnerr   r   rl   warningswarnrp   r`   r\   r   ri   r   r   r   r   r$   ParallelTestRunnerr   r   r   r0   r1   splitextbasenamemodules__file__cProfileProfiletimeperf_counterenableruncalldisablers   
dump_stats)rd   r]   r   filenamepr;   s   `    r    r   NumbaTestProgram.runTestsK  s   <</DO3 233 N O YY(7DO__$-dmm8<7;}}59[[BDO
 T%5%5  1$4 o%01F1F151B1B15;?>>:>--8<EDO	5 <<ww''  Z!8!A!ABH   t'8'89AHHJ'		.)		XGHX&	 		XGHX&s   7I 2I3)r   rp   r   rT   r   r   rc   )r   r>   rx   ry   rz   r   r   r   r\   rp   r   r   r   r   re   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                     / n[        U [        R                  [        [        45      (       a%  U  H  nUR                  [        U5      5        M     U$ UR                  U 5        U$ )z
Workhorse for _flatten_suite
)r   r   r   rp   tupleextend_flatten_suite_innerr   )rT   testsr?   s      r    r  r    sY     E$++T59::ALL-a01  L 	TLr)   c                    [        U 5      n[        5       nU H2  n[         H%  nU[        U5      ;   d  M  UR	                  U5        M'     M4     [        U5      U-
  nS n[        XVS9nUR                  [        [        U5      US95        U$ )z.
Expand nested suite into list of test cases.
c                 Z    U R                   [        U 5      R                  U R                  4$ rc   )r>   r   r   rN   rE   s    r    r@   _flatten_suite.<locals>.key  s#    ||T!W--q/@/@@@r)   rj   )r  r   
_GENERATEDr/   addsortedr  rp   )rT   r  	generatedr%   gnormalr@   s          r    rn   rn     s~     !&E IACF{a    Z)#FA6#E	LLYS12Lr)   Fr   c                *    SSK Jn  U" S5      n[        R
                  R                  SS5      nU(       a  [        S5        SnOS	nUR                   R                  XTS
S9R                  5       nU Vs/ s H"  n[        R
                  R                  U5      PM$     nn/ nU Vs/ s H-  n[        R
                  R                  UR                  U5      PM/     nn[        U 5       H\  n	[        U	[        R                  5      (       d   e[         R"                  " U	R$                  5      n
X;   d  MK  UR'                  U	5        M^     [        S[)        U5      -  5        [        R*                  " U5      $ ! [         a    [        S5      ef = fs  snf s  snf )Nr   )Repoz&gitpython needed for git functionalityr9   numbar  zGit diff by common ancestorzorigin/release0.61...HEADzorigin/release0.61..HEADT)	name_onlyzGit diff identified %s tests)gitr  ImportErrorr$   r0   r1   joinrs   diffrY   normpathworking_dirrn   r   r   r   r3   getsourcefiler;   r   rt   r   )r  r   r  repor1   targetgdiff_pathsr?   selectedrT   fnames              r    r   r     sI   C 9D77<<)D+-,+((---=CCEK0;<1277##A&K<H>IJk277<< 0 0!4kKJu%$ 1 12222%%dnn5OOD!	 &
 

(3x=
89h'')  CABBC =Js   E2 3)F$4F2Fc                    / n[        U5      n[        U 5       H  n[        U[        R                  5      (       d   e[        XDR                  5      n UR                  n[        USS5      nUS:X  a#  Ub  Xa-  (       a  UR                  U5        Mx  Mz  M|  US:X  a!  Ub	  Xa-  (       d  UR                  U5        M  M  [        SU-  5      e   [        R                  " U5      $ ! [         a     Nf = f)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   rn   r   r   r   rM   rN   im_funcr   r   r$   r   )r  r   r   r   rT   r   
found_tagss          r    r   r     s     Ht9Du%$ 1 12222t112	<<D T640
9%**;% +<%Y!**;% +< ;dBCC' &( h''  		s   C""
C/.C/c                 2   [         R                  " 5       nUR                  U5        [        U [        R
                  5      (       a  [        U 5      n UR                  U [        [        U 5      U-  5      5      n [        U S S9n [        R
                  " U 5      $ )z/
Choose a given proportion of tests at random.
c                 $    U R                   " 5       $ rc   rR   )r
   s    r    rF   &_choose_random_tests.<locals>.<lambda>  s
    4779r)   rj   )randomRandomseedr   r   r   rn   samplerZ   rt   r  )r  ratior+  rnds       r    r   r     ss     --/CHHTN%++,,u%JJuc#e*u"456E545Ee$$r)   c                     [         R                  n  [         R                  n[         R                  [         R
                  [         R                  [         R                  4 H  nUc  M  UR                  5         M     [         R                  " 5         [        R                  " 5         U " 5       U" 5       4$ ! [         a    S n Nf = f)Nc                      g)Nr   r*   r*   r)   r    rF   "_refleak_cleanup.<locals>.<lambda>  s    r)   )rl   getallocatedblocksr   r   stdoutrm   
__stdout__
__stderr__flush_clear_type_cachegccollect)func1func2streams      r    _refleak_cleanupr=    s    ""E$$ ::szz3>>3>>JLLN K JJL7EG  s   B4 4CCc                       \ rS rSrSrg)ReferenceLeakErrori	  r*   N)r   r>   rx   ry   r{   r*   r)   r    r?  r?  	  s    r)   r?  c                       \ rS rSrS rSrg)IntPooli  c                     U$ rc   r*   )rd   r@   s     r    __missing__IntPool.__missing__  s    
r)   r*   N)r   r>   rx   ry   rC  r{   r*   r)   r    rA  rA    s    r)   rA  c                   6   ^  \ rS rSrSrSrS rU 4S jrSrU =r	$ )RefleakTestResulti        c                 `   U R                   R                  5         U R                  nU R                  nS/X#-
  -  nS/X#-
  -  n[	        5       n[        SS5       H  nXg     M	     [        U5       H  n[        R                  " 5       nUR                  U5        UR                  5       (       dP  U R                  R                  UR                  5        U R                  R                  UR                  5        [        eA[        5       u  pXs:  a  XjW-
     XGU-
  '   XiW-
     XWU-
  '   XpM     XE4$ )Nr   i8   )r<  r6  repetitionswarmuprA  ranger   
TestResultrv   wasSuccessfulfailuresr  errorsr   r=  )rd   rT   repcountnwarmup	rc_deltasalloc_deltas	_int_pooliresalloc_afterrc_after	rc_beforealloc_befores                r    
_huntLeaksRefleakTestResult._huntLeaks  s   ##++C8-.	sh01 I	tS!AL " xA##%CHHSM $$&&$$S\\2""3::.$$$4$6!K|)2i3G)H	g+&,5L6P,Q[)&1) !  &&r)   c           
      ,  >  U R                  U5      u  p#S nS nSnUSU4USU44 H;  u  pxn	U	" U5      (       d  M  U< SU< SU< S[        U5      < 3n
S	n [	        U
5      e   U(       d  [        [        U ];  U5        g g ! [         a    U R                  5       (       a   e g f = f! [
         a    [        R                  " 5       n Of = fU R                  (       a#  U R                  R                  U< S
U< S35        U R                  X5        M  )Nc                     [        U 5      $ rc   )anydeltass    r    check_rc_deltas5RefleakTestResult.addSuccess.<locals>.check_rc_deltas@  s    v;r)   c                 z    SU R                  S5      -  [        U 5      :  a  g[        U 5      [        S5      ::  d  gg)NrG  r   T)r   r   F)rU   rt   r   rb  s    r    check_alloc_deltas8RefleakTestResult.addSuccess.<locals>.check_alloc_deltasC  s4    6<<?"S[0v;#j/1r)   F
referenceszmemory blocksz leaked r:   z, sum=Tz = )r]  r   rO  sumr?  r[   rl   exc_infoshowAllr<  write
addFailurer   rF  
addSuccess)rd   rT   rT  rU  rd  rh  failedrc  	item_namecheckerr]   rl  r;   s               r    rp  RefleakTestResult.addSuccess7  s   	&*ood&;#I		  o6?,>?+A&Fw v&)S[:.,S11+A #T5d; G  	))++++	: ! ."||~H.<<KK%%Iv&FG/s#   B B*!B'&B'*CCr*   )
r   r>   rx   ry   rL  rK  r]  rp  r{   r   r   s   @r    rF  rF    s    FK'>'< '<r)   rF  c                       \ rS rSr\rSrg)r   ia  r*   N)r   r>   rx   ry   rF  resultclassr{   r*   r)   r    r   r   a  s    #Kr)   r   c                       \ rS rSrSrS rSrg)ParallelTestResultie  z9
A TestResult able to inject results from other results.
c                 N   U R                   R                  UR                   R                  5       5        U R                   R                  5         U =R                  UR                  -  sl        U R
                  R                  UR
                  5        U R                  R                  UR                  5        U R                  R                  UR                  5        U R                  R                  UR                  5        U R                  R                  UR                  5        g)z9
Add the results from the other *result* to this result.
N)r<  rn  getvaluer6  testsRunrP  r  rQ  skippedexpectedFailuresunexpectedSuccesses)rd   r   s     r    add_resultsParallelTestResult.add_resultsj  s     	&--0023(V__-6==)FNN+$$V%<%<=  ''(B(BCr)   r*   N)r   r>   rx   ry   rz   r  r{   r*   r)   r    rx  rx  e  s    Dr)   rx  c                   ,    \ rS rSrSrSrS rSS jrSrg)	_MinimalResultix  z/
A minimal, picklable TestResult-alike object.
)	rP  rQ  r|  r}  r~  r<  
shouldStopr{  test_idc                     SUl         g)zB
Remove any unpicklable attributes from TestCase instance *case*.
N)_outcomeForDoCleanups)rd   r
   s     r    
fixup_case_MinimalResult.fixup_case  s    
 &*"r)   Nc           
      F   U R                    H  n[        X[        XS 5      5        M     U R                   H  u  pEU R	                  U5        M     U R
                   H  u  pEU R	                  U5        M     U R                   H  u  pEU R	                  U5        M     X l        g rc   )	__slots__r   rM   r}  r  rQ  rP  r  )rd   original_resultr  r   r
   r   s         r    re   _MinimalResult.__init__  s|    NNDDt DE #,,GDOOD! -{{GDOOD! #}}GDOOD! %r)   )r  rc   )	r   r>   rx   ry   rz   r  r  re   r{   r*   r)   r    r  r  x  s    I
*	r)   r  c                   $    \ rS rSrSrS rS rSrg)_FakeStringIOi  z2
A trivial picklable StringIO-alike for Python 2.
c                     Xl         g rc   _value)rd   values     r    re   _FakeStringIO.__init__  s    r)   c                     U R                   $ rc   r  )rd   s    r    rz  _FakeStringIO.getvalue  s    {{r)   r  N)r   r>   rx   ry   rz   re   rz  r{   r*   r)   r    r  r    s    r)   r  c                   H    \ rS rSrSrS rS r\R                  S 5       r	Sr
g)_MinimalRunneri  zi
A minimal picklable object able to instantiate a runner in a
child process and run a test case with it.
c                     Xl         X l        g rc   )
runner_clsrunner_args)rd   r  r  s      r    re   _MinimalRunner.__init__  s    $&r)   c                    U R                   n[        5       US'   U R                  " S0 UD6nUR                  " 5       n[        R
                  " 5         [        R                  " U5        UR                  Ul        UR                  Ul        U R                  U5         U" U5        S S S 5        [        UR                  R                  5       5      Ul        [        XAR                  5       5      $ ! , (       d  f       NO= f)Nr<  r*   )r  r   r  _makeResultr   installHandlerregisterResultr   r   cleanup_objectr  r<  rz  r  rR   )rd   rT   r   r   r   s        r    __call___MinimalRunner.__call__  s    !! $:x*6*##% v& //  &L ' &fmm&<&<&>?fggi00	 '&s   	C--
C;c              #     #    [        UR                  5      n Uv   [        UR                  5      U-
  nU H  nUR                  U	 M     g! [        UR                  5      U-
  nU H  nUR                  U	 M     f = f7f)z]
A context manager which cleans up unwanted attributes on a test case
(or any other object).
N)r   __dict__)rd   rT   vanilla_attrsspurious_attrsnames        r    r  _MinimalRunner.cleanup_object  st      DMM*	(J /-?N&MM$' ' !/-?N&MM$' 's   A?A /A?0A<<A?)r  r  N)r   r>   rx   ry   rz   re   r  
contextlibcontextmanagerr  r{   r*   r)   r    r  r    s+    
'1& ( (r)   r  c                     / n/ n/ [        U[        U 5      5      QnS nU H4  nU" U5      (       a  UR                  U5        M#  UR                  U5        M6     X#4$ )z2
Split test suite into parallel and serial tests.
c                     U R                   n[        X5      nUR                  U:w  a  UR                  S:X  a  g[        U SS5      $ )NtestFailureFr   T)rN   rM   r   )rT   method_namemethods      r    is_parallelizable_test_case=_split_nonparallel_tests.<locals>.is_parallelizable_test_case  sC     **+??k)foo.Nt4d;;r)   )rq   rn   r   )rT   slicedptestsstestsflatr  r%   s          r    _split_nonparallel_testsr    sb     FF2VFN4012D< &q))MM!MM!	  >r)   i  c                   F   ^  \ rS rSrSr\r\rS r	S r
S rU 4S jrSrU =r$ )r   i  zP
A test runner which delegates the actual running to a pool of child
processes.
c                     [         R                  R                  " U 40 UD6  Xl        X l        [        U5      U l        X@l        g rc   )r   r   re   r  nprocsr^   r\   r  )rd   r  r  r\   r   s        r    re   ParallelTestRunner.__init__  s7    &&t6v6$#H-!r)   c                    [        U R                  U R                  5      nSn[        S[	        U R
                  5      U5       Vs/ s H  nU R
                  XDU-    PM     nnU H  n[        R                  " U R                  5      n U R                  XX&5        UR                  (       a#  UR                  5          UR                  5           O%UR                  5          UR                  5         M     UR                  (       d(  [        U R                  5      nUR!                  U5        U$ g s  snf !   UR                  5         e = f! UR                  5         f = f)Nd   r   )r  r  r  rM  rt   _ptestsr   Poolr  _run_parallel_testsr  	terminater  closer}   _stestsrv   )	rd   r   child_runner
chunk_sizerW  splitted_testsr  poolr  s	            r    
_run_innerParallelTestRunner._run_inner  s%    &doot7G7GH 
#(C,=z#JL#Ja ,,qZ8#J 	 L $E"''4D((|K $$NN$
 		 JJL 		% $&    .FJJvM !-L  		s*   D-D2!EE2EEEc                    [        S U 5       5      nUR                  [        S9  UR                  X45      n  UR	                  U R
                  5      nUR                  " U5        UR                  UR                  5        UR                  (       a  SUl	        g  Me  ! [         a     g [         aC  nSSR                  S [        U5       5       5      -  n	U	4UR                  SS  -   Ul        UeS nAff = f)Nc              3   @   #    U  H  oR                  5       v   M     g 7frc   r'  ).0r%   s     r    	<genexpr>9ParallelTestRunner._run_parallel_tests.<locals>.<genexpr>!  s     2EqDDFFEs   rj   Tz3Tests didn't finish before timeout (or crashed):
%s c              3   ,   #    U  H
  nS U-  v   M     g7f)z- %r
Nr*   )r  tids     r    r  r  ,  s      Q;PCC;Ps   r   )r   rr   rA   imap_unordered__next__timeoutr  discardr  r  StopIterationr   r  r  r   )
rd   r   r  r  r  remaining_idsitchild_resulter]   s
             r    r  &ParallelTestRunner._run_parallel_tests   s    2E22

+
,  5!{{4<<8 ""<0%%l&:&:;**(,F% +  !  M Q6-;P QQR !&&*,s   B 
C5)	C52>C00C5c                    > [        UU R                  5      u  U l        U l        [	        S[        U R                  5      < S[        U R                  5      < 35        [        [        U ]#  U R                  5      $ )Nz
Parallel: z
. Serial: )
r  r\   r  r  rs   rt   r   r   rv   r  )rd   rT   r;   s     r    rv   ParallelTestRunner.run7  s^    %=d>Bmm&M"dlC,=,/,=? 	@ '24??CCr)   )r  r  r  r  r  r\   )r   r>   rx   ry   rz   rx  rv  _TIMEOUTr  re   r  r  rv   r{   r   r   s   @r    r   r     s0    
 %KG" D.D Dr)   r   )r   )?collectionsr  r   r3   r8  r   r0   r)  rl   r   r   r   rP   	functoolsr   ior   r   r   r   r   r	   r
   r   
numba.corer   r   r  Queuer   r+   r6   rA   r^   objectr`   r   r}   r   r   mainr   r  r  rn   r   r   r   r=  RuntimeErrorr?  defaultdictrA  rk   rF  r   rx  r  r  r  r  r  r   r*   r)   r    <module>r     s       	  	  
       A A  ,,
F 37 7$B $3($$ 3(	9f++ 	9Ix}} Ib

. 9> (2(>
% (	 	k%% K<-- K<\$-- $D.. D&V :	F 	,(V ,(^8 PD.. PDm  ,++,s   E8 8FF