
    sh3                        S SK r S SKrS SKrS SKJ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JrJr   " S S\
R                  5      r\\
l        S r " S S\5      r " S	 S
\ R(                  5      r " S S\R,                  5      r " S S\R0                  5      rS r " S S\R,                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\R0                  5      r  S SK!r! \!RD                  " 5         g! \# a+  r$Sr%\RL                  " \%RO                  \$S95         Sr$C$gSr$C$ff = f! \( a     gf = f)    N)StringIO)resultrunnersignalsc                   h   ^  \ rS rSrSrSrSrSrU 4S jrU 4S jr	U 4S jr
U 4S jrU 4S jrS	rU =r$ )
NumbaTestProgram   z
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

Currently the options are only added in 3.4+.
Fc                    > UR                  SS 5      U l        [        R                  R	                  S5        [
        [        U ]  " U0 UD6  g )Nsuitez:x)popdiscovered_suitesyswarnoptionsappendsuperr   __init__)selfargskwargs	__class__s      l/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/tests/customize.pyr   NumbaTestProgram.__init__!   s?     &

7D 9 	t$.??    c                 h   > U R                   b  U R                   U l        g [        [        U ]  5         g N)r   testr   r   createTests)r   r   s    r   r   NumbaTestProgram.createTests(   s*      ,--DI"D57r   c                    > [         [        U ]  5       nU R                  c  UR	                  SSSSSS9  UR	                  SSS	SS
S9  UR	                  SSSSS9  U$ )N-Rz	--refleakrefleak
store_truezDetect reference / memory leaks)destactionhelp-mz--multiprocessmultiprocesszParallelize testsz	--profileprofilezProfile the test run)r   r   _getParentArgParser
testRunneradd_argument)r   parserr   s     r   r)   $NumbaTestProgram._getParentArgParser.   s     'BD??"k	'3%F   H 	D"2#/!4 	 	6 	Ki#/!7 	 	9 r   c                    > [         R                  S:  a<  SU;   a  UR                  S5        SU l        SU;   a  UR                  S5        SU l        [
        [        U ]  U5        U R                  S::  a  SU l	        g g )N)      r    Tr&   r   )
r   version_inforemover!   r'   r   r   	parseArgs	verbositybuffer)r   argvr   s     r   r3   NumbaTestProgram.parseArgs?   sp    f$t|D!#t|D!$(!/5>>Q DK r   c                   >^  T R                   (       a7  [        T l        [        [        S5      (       d  [
        R                  " S5        O"T R                  c  [        R                  T l        T R                  (       a9  [        T R                  T R                  T R                  T R                  S9T l        UU 4S jnT R                  (       a  [        R                   R#                  [        R                   R%                  [        R&                  S   R(                  5      5      S   S-   n[*        R,                  " [.        R0                  S9nUR3                  5          UR5                  U5        UR7                  5         [9        S	U< 35        UR;                  U5        g U" 5         g ! UR7                  5         [9        S	U< 35        UR;                  U5        f = f)
Ngettotalrefcountz^detecting reference leaks requires a debug build of Python, only memory leaks will be detected)r4   failfastr5   c                  *   > [         [        T]  5         g r   )r   r   runTests)r   r   s   r   run_tests_real1NumbaTestProgram.runTests.<locals>.run_tests_real`   s    "D24r   __main__r   z.prof)timerzWriting test profile data into )r!   RefleakTestRunnerr*   hasattrr   warningswarnunittestTextTestRunnerr'   ParallelTestRunnerr4   r:   r5   r(   ospathsplitextbasenamemodules__file__cProfileProfiletimeperf_counterenableruncalldisableprint
dump_stats)r   r=   filenamepr   s   `   r   r<   NumbaTestProgram.runTestsN   sJ   <</DO3 233 ) * __$&55DO0;?>>:>--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   F) )2G)r5   r   r'   r!   r   r*   )__name__
__module____qualname____firstlineno____doc__r!   r(   r'   r   r   r)   r3   r<   __static_attributes____classcell__r   s   @r   r   r      s8     GGL@8"" "r   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! [         a    S n Nf = f)Nc                      gN*    rf   r   r   func1_refleak_cleanup.<locals>.func1       r   c                      grd   rf   rf   r   r   func2_refleak_cleanup.<locals>.func2   ri   r   )r   getallocatedblocksAttributeErrorr9   stdoutstderr
__stdout__
__stderr__flush_clear_type_cachegccollect)rg   rk   streams      r   _refleak_cleanuprx   {   s    &&$$ ::szz3>>3>>JLLN K JJL7EG%  	
  	s"   B5 C 5CCCCc                       \ rS rSrSrg)ReferenceLeakError   rf   N)rZ   r[   r\   r]   r_   rf   r   r   rz   rz      s    r   rz   c                       \ rS rSrS rSrg)IntPool   c                     U$ r   rf   )r   keys     r   __missing__IntPool.__missing__   s    
r   rf   N)rZ   r[   r\   r]   r   r_   rf   r   r   r}   r}      s    r   r}   c                   6   ^  \ rS rSrSrSrS rU 4S jrSrU =r	$ )RefleakTestResult   r/      c                 f   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	     S=p[        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  XlU	-
     XGU-
  '   XkU-
     XWU-
  '   XpM     XE4$ )Nr   i8   )rw   rs   repetitionswarmupr}   ranger   
TestResultrunwasSuccessfulfailuresextenderrorsAssertionErrorrx   )r   r   repcountnwarmup	rc_deltasalloc_deltas	_int_poolialloc_before	rc_beforeresalloc_afterrc_afters                r   
_huntLeaksRefleakTestResult._huntLeaks   s3   ##++C8-.	sh01 I	tS!AL " $%$xA##%CHHSM $$&&$$S\\2""3::.$$$4$6!K|)2i3G)H	g+&(12>3? )@ $% & '2)# !$ &&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      $ r   )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)Nr/   r   T)   r   F)countlensetr   s    r   check_alloc_deltas8RefleakTestResult.addSuccess.<locals>.check_alloc_deltas   s4    6<<?"S[0v;#j/1r   F
referenceszmemory blocksz leaked  z, sum=Tz = )r   r   r   sumrz   	Exceptionr   exc_infoshowAllrw   write
addFailurer   r   
addSuccess)r   r   r   r   r   r   failedr   	item_namecheckermsgr   r   s               r   r   RefleakTestResult.addSuccess   s   	&*ood&;#I		  o60BC+E&Fw v&)S[:.,S11+E #T5d; G  	))++++	: ! ."||~H.<<KK%%Iv&FG/s#   B B*!B'&B'*CCrf   )
rZ   r[   r\   r]   r   r   r   r   r_   r`   ra   s   @r   r   r      s    FK 'D'< '<r   r   c                       \ rS rSr\rSrg)rA      rf   N)rZ   r[   r\   r]   r   resultclassr_   rf   r   r   rA   rA      s    #Kr   rA   c                     [        U [        R                  5      (       a'  / nU  H  nUR                  [	        U5      5        M     U$ U /$ )z$Expand suite into list of tests
    )
isinstancerE   	TestSuiter   _flatten_suite)r   testsxs      r   r   r      sC     $**++ALL*+ vr   c                       \ rS rSrSrS rSrg)ParallelTestResult   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)rw   r   getvaluers   testsRunr   r   r   skippedexpectedFailuresunexpectedSuccesses)r   r   s     r   add_resultsParallelTestResult.add_results  s     	&--0023(V__-6==)FNN+$$V%<%<=  ''(B(BCr   rf   N)rZ   r[   r\   r]   r^   r   r_   rf   r   r   r   r      s    Dr   r   c                   (    \ rS rSrSrSrS rS rSrg)_MinimalResulti  z/
A minimal, picklable TestResult-alike object.
)r   r   r   r   r   rw   
shouldStopr   c                     SUl         g)zB
Remove any unpicklable attributes from TestCase instance *case*.
N)_outcomeForDoCleanups)r   cases     r   
fixup_case_MinimalResult.fixup_case  s    
 &*"r   c           	      8   U R                    H  n[        X[        X5      5        M     U R                   H  u  p4U R	                  U5        M     U R
                   H  u  p4U R	                  U5        M     U R                   H  u  p4U R	                  U5        M     g r   )	__slots__setattrgetattrr   r   r   r   )r   original_resultattrr   _s        r   r   _MinimalResult.__init__"  su    NNDD >? #,,GDOOD! -{{GDOOD! #}}GDOOD! %r   rf   N)	rZ   r[   r\   r]   r^   r   r   r   r_   rf   r   r   r   r     s    C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 r   _value)r   values     r   r   _FakeStringIO.__init__2  s    r   c                     U R                   $ r   r   )r   s    r   r   _FakeStringIO.getvalue5  s    {{r   r   N)rZ   r[   r\   r]   r^   r   r   r_   rf   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)_MinimalRunneri9  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 r   )
runner_clsrunner_args)r   r   r   s      r   r   _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        [        U5      $ ! , (       d  f       NA= f)Nrw   rf   )r   r   r   _makeResultr   installHandlerregisterResultr:   r5   cleanup_objectr   rw   r   r   )r   r   r   r   r   s        r   __call___MinimalRunner.__call__F  s    !! $:x*6*##% v& //  &L ' &fmm&<&<&>?f%%	 '&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__)r   r   vanilla_attrsspurious_attrsnames        r   r   _MinimalRunner.cleanup_objectY  st      DMM*	(J /-?N&MM$' ' !/-?N&MM$' 's   A?A /A?0A<<A?)r   r   N)rZ   r[   r\   r]   r^   r   r   
contextlibcontextmanagerr   r_   rf   r   r   r   r   9  s+    
'&& ( (r   r   c                   <   ^  \ rS rSrSr\rS rS rU 4S jr	Sr
U =r$ )rG   ih  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        g r   )r   rF   r   r   r   )r   r   r   s      r   r   ParallelTestRunner.__init__p  s&    &&t6v6$!r   c                    [        U R                  U R                  5      n[        R                  " 5       nUR
                  n U" X R                  5       H(  nUR                  " U5        UR                  (       d  M(    O   UUR                  5         UR                  5         $ ! UR                  5         UR                  5         f = fr   )r   r   r   multiprocessingPoolimap_unordered
_test_listr   r   	terminatejoin)r   r   child_runnerpoolimapchild_results         r   
_run_innerParallelTestRunner._run_inneru  s     &doot7G7GH##%""		 $\?? C""<0*** !D  NNIIK NNIIKs   6B# =B# #"Cc                 ^   > [        U5      U l        [        [        U ]  U R
                  5      $ r   )r   r  r   rG   r   r  )r   r   r   s     r   r   ParallelTestRunner.run  s(    (. '24??CCr   )r  r   r   )rZ   r[   r\   r]   r^   r   r   r   r  r   r_   r`   ra   s   @r   rG   rG   h  s%    
 %K"
"D Dr   rG   z+Failed to enable faulthandler due to:
{err})err))collectionsr   rN   ior   ru   rH   r  r   rP   rE   rC   r   r   r   mainr   rx   RuntimeErrorrz   defaultdictr}   TextTestResultr   rF   rA   r   r   objectr   r   r   rG   faulthandlerrR   BaseExceptioner   rD   formatImportErrorrf   r   r   <module>r     sB       	 	  
    , ,\x}} \B !2	 	k%% N<-- N<b$-- $	D.. D&"V "6	F 	,(V ,(^"D.. "DJ
)) )<cjjQj'(()  		s*   1D< 6D D9!D44D9<EE