
    sh=5                         S SK rS SK r S SKrS SKJrJr  S SKJrJr  S SK	J
r
  S SKJrJr   " S S\5      r " S S	\5      r\S
:X  a  \R"                  " 5         gg)    N)njitjit)TypingErrorUnsupportedError)ir)TestCaseIRPreservingTestPipelinec                   \    \ 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S rS rSrg)TestClosure   c                    ^ SmU4S jn[        S0 UD6" U5      nU R                  U" S5      S5        SmU R                  U" S5      S5        g )N
   c                    > U T-   $ N xYs    l/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_closure.pyadd_Y3TestClosure.run_jit_closure_variable.<locals>.add_Y       q5L          r   zi4(i4)r   assertEqual)selfjitargsr   c_add_Yr   s       @r   run_jit_closure_variable$TestClosure.run_jit_closure_variable   sP    	 *'*51R( R(r   c                 "    U R                  SS9  g NT)forceobjr"   r   s    r   test_jit_closure_variable%TestClosure.test_jit_closure_variable       %%t%4r   c                 "    U R                  SS9  g NTnopythonr'   r(   s    r   test_jit_closure_variable_npm)TestClosure.test_jit_closure_variable_npm   r+   r   c                 "  ^ SmU4S jn[        S0 UD6" U5      nU R                  U" S5      S5        Sm[        S0 UD6" U5      nU R                  U" S5      S5        SmU R                  U" S5      S5        U R                  U" S5      S5        g )Nr   c                    > U T-   $ r   r   r   s    r   r   0TestClosure.run_rejitting_closure.<locals>.add_Y%   r   r   r   r   r      r   r   )r   r    r   r!   	c_add_Y_2r   s        @r   run_rejitting_closure!TestClosure.run_rejitting_closure"   s    	 *'*51R( ,G,U3	1r*1r*R(r   c                 "    U R                  SS9  g r%   r7   r(   s    r   test_rejitting_closure"TestClosure.test_rejitting_closure4       ""D"1r   c                 "    U R                  SS9  g r-   r:   r(   s    r   test_rejitting_closure_npm&TestClosure.test_rejitting_closure_npm7   r=   r   c                 p   ^^ SmSmUU4S jn[        S0 UD6" U5      nU R                  U" S5      S5        g )Nr      c                    > U T-   T-  $ r   r   )r   r   Zs    r   add_Y_mult_ZDTestClosure.run_jit_multiple_closure_variables.<locals>.add_Y_mult_Z>   s    EQ;r   r      r   r   )r   r    rE   c_add_Y_mult_Zr   rD   s       @@r   "run_jit_multiple_closure_variables.TestClosure.run_jit_multiple_closure_variables:   s;    	 11,?*B/r   c                 "    U R                  SS9  g r%   rI   r(   s    r   #test_jit_multiple_closure_variables/TestClosure.test_jit_multiple_closure_variablesD       ///>r   c                 "    U R                  SS9  g r-   rL   r(   s    r   'test_jit_multiple_closure_variables_npm3TestClosure.test_jit_multiple_closure_variables_npmG   rO   r   c                 $  ^ S n[        S0 UD6" U5      mTR                  5         U4S jn[        S0 UD6" U5      nUR                  5         U R                  UT5         U R                  U" S5      S5        S S S 5        g ! , (       d  f       g = f)Nc                     U S-  $ )Nr   r   )as    r   mult_103TestClosure.run_jit_inner_function.<locals>.mult_10K   s    r6Mr   c                    > T" U S-   5      $ N   r   )r   	c_mult_10s    r   do_math3TestClosure.run_jit_inner_function.<locals>.do_mathQ   s    QU##r   r   2   )z
intp(intp))r   disable_compileassertRefCountr   )r   r    rV   r\   	c_do_mathr[   s        @r   run_jit_inner_function"TestClosure.run_jit_inner_functionJ   s}    	 009	!!#	$ 009	!!#  I6Yq\2. 766s   B
Bc                 "    U R                  SS9  g r%   rb   r(   s    r   test_jit_inner_function#TestClosure.test_jit_inner_functionZ       ##T#2r   c                 "    U R                  SS9  g r-   re   r(   s    r   test_jit_inner_function_npm'TestClosure.test_jit_inner_function_npm]   rh   r   r   N)__name__
__module____qualname____firstlineno__r"   r)   r0   r7   r;   r?   rI   rM   rQ   rb   rf   rj   __static_attributes__r   r   r   r   r      s>    )55)$220??/ 33r   r   c                   l    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 r\R                  S 5       rSrg)TestInlinedClosurea   z
Tests for (partial) closure support in njit. The support is partial
because it only works for closures that can be successfully inlined
at compile time.
c                 \    S n[        U5      nU R                  U" S5      U" S5      5        g )Nc                 *    S nU" U 5      U" U 5      -   $ )Nc                 
    X -  $ r   r   )r   s    r   innerDTestInlinedClosure.test_inner_function.<locals>.outer.<locals>.innerl   	    ur   r   r   rw   s     r   outer5TestInlinedClosure.test_inner_function.<locals>.outerj   s     8eAh&&r   r   r   r   r   r{   cfuncs      r   test_inner_function&TestInlinedClosure.test_inner_functionh   s*    	' UrE"I.r   c                 \    S n[        U5      nU R                  U" S5      U" S5      5        g )Nc                 <   ^ U S-   mU4S jnU" U 5      U" U 5      -   $ )Nr   c                    > X -  T-   $ r   r   r   ys    r   rw   QTestInlinedClosure.test_inner_function_with_closure.<locals>.outer.<locals>.innery   s    uqy r   r   r   rw   r   s     @r   r{   BTestInlinedClosure.test_inner_function_with_closure.<locals>.outerv   s&    AA! 8eAh&&r   r   r}   r~   s      r    test_inner_function_with_closure3TestInlinedClosure.test_inner_function_with_closuret   s*    	' UrE"I.r   c                 \    S n[        U5      nU R                  U" S5      U" S5      5        g )Nc                 @   ^ U S-   mU4S jnU" U 5      mTU" U 5      -   $ )Nr   c                    > U T-  $ r   r   r   s    r   rw   STestInlinedClosure.test_inner_function_with_closure_2.<locals>.outer.<locals>.inner       1ur   r   r   s     @r   r{   DTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outer   s*    AA aAuQx<r   r   r}   r~   s      r   "test_inner_function_with_closure_25TestInlinedClosure.test_inner_function_with_closure_2   s*    	  UrE"I.r   c                     Sn0 n[        UR                  5       U5        [        US   5      nU R                  U" S5      US   " S5      5        g )Na  
            def outer(x):
                y = x + 1
                z = 0

                def inner(x):
                    nonlocal z
                    z += x * x
                    return z + y

                return inner(x) + inner(x) + z
        r{   r   )execstripr   r   )r   codensr   s       r   "test_inner_function_with_closure_35TestInlinedClosure.test_inner_function_with_closure_3   sJ     TZZ\2R[!rBwKO4r   c                 \    S n[        U5      nU R                  U" S5      U" S5      5        g )Nc                 &   ^  U 4S jnU" T T -  5      $ )Nc                 T   >^  UU 4S jnSn[        T 5       H  nX!" U5      -  nM     U$ )Nc                    > TT-   U -   $ r   r   zr   r   s    r   	innermost^TestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner.<locals>.innermost   s    q519$r   r   range)r   r   sir   s   `   r   rw   KTestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner   s0    % qA1%A "r   r   rz   s   ` r   r{   <TestInlinedClosure.test_inner_function_nested.<locals>.outer   s     Q<r   r   r}   r~   s      r   test_inner_function_nested-TestInlinedClosure.test_inner_function_nested   s*    	  UrE"I.r   c                 T  ^^ [         U4S j5       mU4S jnU4S jnS nS nS nS nSmU4S	 jnSmU4S
 jnS n	S n
S nS nS!S jnS!S jnS!S jnS nS nS nS nS nS nS nXXVXxXXUUUUU/nU H.  n[        U5      nSnU R                  U" U5      U" U5      5        M0     U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        WR                  5      5        U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        UR                  5      5        U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        UR                  5      5        U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        UR                  5      5        U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        UR                  5      5        U R                  [        5       n[	        SS9" U5      nU" W5        SSS5        SnU R                  U[        UR                  5      5        U R                  [        5       n[	        SS9" U5      nU" 5         SSS5        S nU R                  U[        UR                  5      5        g! , (       d  f       GN^= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN6= f! , (       d  f       N= f! , (       d  f       N= f)"z2Tests the large number of use cases defined below c                 B   > U S:  a  U $ T" U S-
  5      T" U S-
  5      -   $ )NrB   r   r   )nfib3s    r   r   4TestInlinedClosure.test_bulk_use_cases.<locals>.fib3   s*    1uA;a!e,,r   c                     > U4S jnU" U 5      $ )z+Test calling recursive function from inner c                    > T" U 5      $ r   r   )r   r   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer1.<locals>.inner   s    Awr   r   )r   rw   r   s     r   outer16TestInlinedClosure.test_bulk_use_cases.<locals>.outer1   s    8Or   c                 .   >^ U S-   mUU4S jnU" U 5      $ )z-Test calling recursive function from closure r   c                    > U T" T5      -   $ r   r   )r   r   r   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer2.<locals>.inner   s    47{"r   r   )r   rw   r   r   s     @r   outer26TestInlinedClosure.test_bulk_use_cases.<locals>.outer2   s    AA#8Or   c                     ^ U4S jmT" U 5      $ )zTest recursive inner c                 *   > U S:  a  gT" U S-
  5        g NrB   r   r   r   rz   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer3.<locals>.inner   s    q5!a%Lr   r   rz   s    @r   outer36TestInlinedClosure.test_bulk_use_cases.<locals>.outer3   s    !
 8Or   c                 .   ^^ U S-   mUU4S jmT" U 5      $ )zTest recursive closure r   c                 0   > U T-   S:  a  gT" U S-
  5        g r   r   r   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer4.<locals>.inner   s    q519!a%Lr   r   r   s    @@r   outer46TestInlinedClosure.test_bulk_use_cases.<locals>.outer4   s    AA!
 8Or   c                 *   ^ U S-   mU4S jnU" U 5      $ )zTest nested closure r   c                 8   >^ TU -   S-   mU4S jnU" U 5      T-   $ )NrB   c                    > U T-   $ r   r   r   r   s    r   inner2VTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1.<locals>.inner2   s    q5Lr   r   )r   r   r   r   s     @r   inner1FTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1   s%    EAI! ay1}$r   r   r   r   r   s     @r   outer56TestInlinedClosure.test_bulk_use_cases.<locals>.outer5   s    AA% !9r   c                 *   ^ U S-   mU4S jnU" U 5      $ )z-Test closure with list comprehension in body r   c                 T   > TU -   S-   n[        U5       Vs/ s H  o"PM     sn$ s  snf )NrB   r   )r   r   tr   s      r   r   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1   s,    EAI#(8,8a8,,,s   %r   r   s     @r   outer66TestInlinedClosure.test_bulk_use_cases.<locals>.outer6   s    AA- !9r   	   c                    > U S-   nX-   T-   $ )z(Test use of outer scope var, no closure r   r   )r   r   _OUTER_SCOPE_VARs     r   outer76TestInlinedClosure.test_bulk_use_cases.<locals>.outer7   s    AA5+++r   c                 .   >^ U S-   mUU4S jnU" U 5      $ )z*Test use of outer scope var, with closure r   c                    > U T-   T-   $ r   r   )r   r   r   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer8.<locals>.inner  s    1u///r   r   )r   rw   r   r   s     @r   outer86TestInlinedClosure.test_bulk_use_cases.<locals>.outer8  s    AA08Or   c                 .   ^ U S-   mU4S jnUnU" U 5      $ )zTest closure assignmentr   c                    > U T-   $ r   r   r   s    r   rw   ETestInlinedClosure.test_bulk_use_cases.<locals>.outer9.<locals>.inner  r   r   r   )r   rw   fr   s      @r   outer96TestInlinedClosure.test_bulk_use_cases.<locals>.outer9
  s    AAAQ4Kr   c                 8   ^^ U S-   mU4S jmU4S jnU" U 5      $ )z Test two inner, one calls other r   c                    > U T-   $ r   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner  r   r   c                    > T" U 5      $ r   r   rz   s    r   r   GTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner2  s    Qxr   r   )r   r   rw   r   s     @@r   outer107TestInlinedClosure.test_bulk_use_cases.<locals>.outer10  s"    AA  !9r   c                    ^ U S-   mU4S jnU$ )zreturn the closure r   c                    > U T-   $ r   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer11.<locals>.inner#  r   r   r   r   rw   r   s     @r   outer117TestInlinedClosure.test_bulk_use_cases.<locals>.outer11  s    AALr   c                 .   ^ U S-   mSU4S jjnU" U 5      $ )zclosure with kwargr   c                    > U T-   U-   $ r   r   r   kwr   s     r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer12.<locals>.inner+      1urz!r      r   r   s     @r   outer127TestInlinedClosure.test_bulk_use_cases.<locals>.outer12'  s    AA"8Or   c                     U S-   U-   nU$ )zouter with kwarg no closurer   r   r   s      r   outer137TestInlinedClosure.test_bulk_use_cases.<locals>.outer13/  s    A
AHr   c                 .   ^^ U S-   mUU4S jnU" U 5      $ )z outer with kwarg used in closurer   c                    > U T-   T-   $ r   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer14.<locals>.inner8  r   r   r   r   r   rw   r   s    ` @r   outer147TestInlinedClosure.test_bulk_use_cases.<locals>.outer144  s    AA"8Or   c                 *   ^ U S-   mU4S jnU" X5      $ )z"outer with kwarg as arg to closurer   c                    > U T-   U-   $ r   r   r   s     r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer15.<locals>.inner@  r   r   r   r  s      @r   outer157TestInlinedClosure.test_bulk_use_cases.<locals>.outer15<  s    AA"<r   c                 <   ^ U S-   mU4S jn[        U" U 5      5      $ )z'closure is generator, consumed locally r   c              3      >#    U T-   v   g 7fr   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer16.<locals>.innerH       !e   	)listr   s     @r   outer167TestInlinedClosure.test_bulk_use_cases.<locals>.outer16D  s!    AA a>!r   c                 *   ^ U S-   mU4S jnU" U 5      $ )zclosure is generator, returned r   c              3      >#    U T-   v   g 7fr   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer17.<locals>.innerQ  r  r  r   r   s     @r   outer177TestInlinedClosure.test_bulk_use_cases.<locals>.outer17M  s    AA 8Or   c                 @   ^ U S-   mU4S jnU" U 5       H  nUnM     W$ )z'closure is generator, consumed in loop r   c              3      >#    U T-   v   g 7fr   r   r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer18.<locals>.innerZ  r  r  r   )r   rw   r   r   r   s       @r   outer187TestInlinedClosure.test_bulk_use_cases.<locals>.outer18V  s-    AA 1X  Hr   c                 B   ^^ U S-   mU S-   mU4S jnU4S jnU" X5      $ )z"closure as arg to another closure r   rB   c                    > U T-   $ r   r   )r   z1s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.innerg  s    2vr   c                    > U " U5      T-   $ r   r   )r   r   z2s     r   r   GTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.inner2j  s    tby r   r   )r   rw   r   r  r"  s      @@r   outer197TestInlinedClosure.test_bulk_use_cases.<locals>.outer19b  s,    QBQB! %##r   c                 *   ^ U S-   mU4S jnU" U 5      $ )zTest calling numpy in closure r   c                 6   > U [         R                  " T5      -   $ r   )numpycosr   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer20.<locals>.inners  s    599Q<''r   r   r   s     @r   outer207TestInlinedClosure.test_bulk_use_cases.<locals>.outer20o  s    AA(8Or   c                 *   ^ U S-   mU4S jnU" U 5      $ )z(Test calling numpy import as in closure r   c                 6   > U [         R                  " T5      -   $ r   )npr)  r   s    r   rw   FTestInlinedClosure.test_bulk_use_cases.<locals>.outer21.<locals>.inner{  s    266!9}$r   r   r   s     @r   outer217TestInlinedClosure.test_bulk_use_cases.<locals>.outer21w  s    AA%8Or   c                      S n SnU " U6   g)z6Test to ensure that unsupported *args raises correctlyc                     g r   r   )rU   bs     r   barDTestInlinedClosure.test_bulk_use_cases.<locals>.outer22.<locals>.bar  s    r   )r   rB   Nr   )r6  r   s     r   outer227TestInlinedClosure.test_bulk_use_cases.<locals>.outer22  s    AGr   r   Tr.   Nz,Unsupported use of cell variable encounteredz%Cannot capture the non-constant valuez-The use of yield in a closure is unsupported.z,Calling a closure with *args is unsupported.r   )
r   r   assertRaisesNotImplementedErrorr   assertInstr	exceptionr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r$  r+  r1  r8  r   refr   varraisesmsgr   r   s                                @@r   test_bulk_use_cases&TestInlinedClosure.test_bulk_use_cases   s:    
	- 
	-
							 	,
 		
				
		 	"	
		$			 VVggw1 CIECU3ZS2  23v&v.E#J 4 =c3v//0123v&v.E#J 4 =c3v//01{+v&w/E#J , 6c3v//01/0F&w/E#J 1 >c3v//01/0F&w/E#J 1 >c3v//01/0F&w/E#J 1 >c3v//01/0F&w/EG 1 =c3v//01Q 43 43 ,+ 10 10 10 10sT   ?L.M 7MM$/M6N'N.
L= 
M
M!$
M36
N
N
N'c                    [        [        S9S 5       nU R                  U" SS5      S5        UR                  UR                  S      R
                  S   n/ nUR                  R                  5        H  nUR                   H|  n[        U[        R                  5      (       d  M$  [        UR                  [        R                  5      (       d  MO  UR                  R                  S:X  d  Mk  UR                  U5        M~     M     U R                  [        U5      S	5        U H,  nUR                   R"                  nS
nU R%                  Xx5        M.     g )N)pipeline_classc                 (    S nU" U 5      U" U5      4$ )Nc                     SnSnX-   U -   $ )N   r   r   r   s      r   r6  ITestInlinedClosure.test_closure_renaming_scheme.<locals>.foo.<locals>.bar  s    uqy r   r   )rU   r5  r6  s      r   foo<TestInlinedClosure.test_closure_renaming_scheme.<locals>.foo  s    ! q63q6>!r   r      )   #   r   preserved_irrI  rB   zclosure__locals__bar_v[0-9]+.x)r   r	   r   	overloads
signaturesmetadatablocksvaluesbody
isinstancer   AssignvalueConstappendlentargetnameassertRegex)	r   rK  func_irstoreblkstmtr   r^  regexs	            r   test_closure_renaming_scheme/TestInlinedClosure.test_closure_renaming_scheme  s    
5	6	" 
7	" 	Rh/ --q 12;;NK>>((*CdBII..!$**bhh77::++q0!LL.	 ! + 	UQ'A88==D5ET) r   c                    ^ [         S 5       m[         U4S j5       n[        R                  R                  U" 5       S5        g )Nc                      SS jn U $ )Nc                 
    X-   $ r   r   r   s     r   r6  ;TestInlinedClosure.test_issue9222.<locals>.foo.<locals>.bar  ry   r   )g?r   )r6  s    r   rK  .TestInlinedClosure.test_issue9222.<locals>.foo  s    Jr   c                     > T " 5       " S5      $ rY   r   )rK  s   r   consume2TestInlinedClosure.test_issue9222.<locals>.consume  s    58Or   gffffff@)r   r/  testingassert_allclose)r   rm  rK  s     @r   test_issue9222!TestInlinedClosure.test_issue9222  sC     
	 
	
 
	 
	
 	

""79g6r   c                 *    [         S 5       nU" 5         g )Nc                      Sn [        S5       H6  n[        R                  " [        U S5       Vs/ s H  nSPM     sn5        Sn M8     g s  snf )Nr   r   r   )r   r/  array)range_start_s     r   _inner2TestInlinedClosure.test_issue_9577.<locals>._inner  sA    K1XU;%:;%:!%:;< ;s   A	
)r   )r   rx  s     r   test_issue_9577"TestInlinedClosure.test_issue_9577  s    		  
	  	r   r   N)rl   rm   rn   ro   __doc__r   r   r   r   r   rC  re  rq  r   run_test_in_subprocessrz  rp   r   r   r   rr   rr   a   sL    
///5(/&B2H *D7$ $$ %r   rr   __main__)r(  r/  unittestnumbar   r   numba.core.errorsr   r   
numba.corer   numba.tests.supportr   r	   r   rr   rl   mainr   r   r   <module>r     sP        ;  BR3( R3jV Vr zMMO r   