
    sh9                         S SK Jr  S SKJr  S SKJrJr  S SKrS SK	r	 " S S\5      r
\S:X  a  \	R                  " 5         gg)    )cuda)TypingError)CUDATestCaseskip_on_cudasimNc                      ^  \ rS rSrU 4S jrS rS rS rS r\	" S5      S 5       r
\R                  " S	5      S
 5       r\R                  S 5       r\R                  " S	5      S 5       r\	" S5      S 5       rSrU =r$ )TestSelfRecursion   c                 :   > SSK Jn  Xl        [        TU ]  5         g )Nr   )recursion_usecases)numba.cuda.tests.cudapyr   modsupersetUp)selfr   	__class__s     z/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cuda/tests/cudapy/test_recursion.pyr   TestSelfRecursion.setUp
   s     	?%    c                    ^ [         R                  U4S j5       n[        R                  " S/[        R                  S9n[        R
                  " U5      nUS   " XC5        US   nSnU R                  XV5        g )Nc                 "   > T" US   5      U S'   g Nr    )rxcfuncs     r   kernel+TestSelfRecursion.check_fib.<locals>.kernel   s    1;AaDr   
   dtype   r"   r   7   )r   jitnpasarrayint64
zeros_likeassertPreciseEqual)r   r   r   r   r   actualexpecteds    `     r   	check_fibTestSelfRecursion.check_fib   sg    		 
	 JJt288,MM!tQ11r   c                 N    U R                  U R                  R                  5        g N)r,   r   fib1r   s    r   test_global_explicit_sig*TestSelfRecursion.test_global_explicit_sig       txx}}%r   c                 N    U R                  U R                  R                  5        g r/   )r,   r   fib2r1   s    r   test_inner_explicit_sig)TestSelfRecursion.test_inner_explicit_sig!   r4   r   c                 N    U R                  U R                  R                  5        g r/   )r,   r   fib3r1   s    r   test_global_implicit_sig*TestSelfRecursion.test_global_implicit_sig$   r4   r   zSimulator does not compilec                   ^ U R                  [        5       nU R                  R                  m[        R
                  " S5      U4S j5       nS S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nvoid()c                     > T " S5        g )Nr"   r   r   s   r   r   .TestSelfRecursion.test_runaway.<locals>.kernel,   s
    ar   z#cannot type infer runaway recursion)	assertRaisesr   r   runaway_selfr   r$   assertInstr	exceptionr   raisesr   r   s      @r   test_runawayTestSelfRecursion.test_runaway'   sj    {+vHH))EXXh  	 , 	;&**+	- ,+s   6A;;
B	z-Needs insert_unresolved_ref support in targetc                   ^	 U R                   R                  R                  nU R                   R                  m	[        R                  U	4S j5       nSn[
        R                  " US   /[
        R                  S9n[
        R                  " US   /[
        R                  S9n[
        R                  " U5      nUS   " XdU5        U" U6 nUS   nU R                  X5        g )Nc                 *   > T" US   US   5      U S'   g r   r   )r   r   yr   s      r   r   2TestSelfRecursion.test_type_change.<locals>.kernel8   s    1qt$AaDr   )   g      ?r   r   r"   r!   )r   type_change_selfpy_funcr   r$   r%   r&   r'   float64r(   r)   )
r   pfuncr   argsr   rM   r   r+   r*   r   s
            @r   test_type_change"TestSelfRecursion.test_type_change3   s    ))11))		% 
	% JJQy1JJQy

3MM!tQ1$<11r   c                     U R                  [        5       nU R                  R                  S   " S5        S S S 5        U R	                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr!      
raise_self)rB   
ValueErrorr   raise_self_kernelassertEqualrE   rF   )r   rH   s     r   
test_raiseTestSelfRecursion.test_raiseH   sV    
 z*fHH&&t,Q/ + 	V--.= +*s    A$$
A2c                   ^^	 U R                   R                  5       m	U R                   R                  [        R                  5      m[        R                  U4S j5       nU	4S jnS Hf  nU" U5      n[        R
                  " U/[        R                  S9n[        R                  " U5      nUS   " Xe5        US   nU R                  XG5        Mh     g )Nc                 .   > T" US   5      nUc  SnX S'   g )Nr     r   )r   r   resr   s      r   r   6TestSelfRecursion.test_optional_return.<locals>.kernelW   s!    !+C{aDr   c                 "   > T" U 5      nUc  SnU$ )Nra   r   )r   rb   rS   s     r   
cpu_kernel:TestSelfRecursion.test_optional_return.<locals>.cpu_kernel^   s    (C{Jr   )r      r      r   r!   r   )	r   make_optional_return_caser   r$   r%   r&   r'   r(   r\   )
r   r   re   argr+   r   r   r*   r   rS   s
           @@r   test_optional_return&TestSelfRecursion.test_optional_returnR   s    22422488<		 
		 "C!#H

C51Aa A4LqTFX. "r   z4Recursion handled because simulator does not compilec                 >  ^ U R                   R                  [        R                  5      mU R	                  [
        5       n[        R                  " S5      U4S j5       nS S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr>   c                     > T " S5        g )Nd   r   r@   s   r   r   ;TestSelfRecursion.test_growing_return_tuple.<locals>.kernelr   s
    c
r   z3Return type of recursive function does not converge)	r   make_growing_tuple_caser   r$   rB   r   rD   rE   rF   rG   s      @r   test_growing_return_tuple+TestSelfRecursion.test_growing_return_tuplem   ss    00:{+vXXh   ,
 	A  !	
 ,+s     B
B)r   )__name__
__module____qualname____firstlineno__r   r,   r2   r7   r;   r   rI   unittestskiprU   expectedFailurer]   rk   rr   __static_attributes____classcell__)r   s   @r   r   r      s    2&&& 12	- 3	- ]]BC2 D2( > > ]]BC/ D/4 KL
 M
r   r   __main__)numbar   numba.core.errorsr   numba.cuda.testingr   r   numpyr%   rx   r   rt   mainr   r   r   <module>r      s;     ) <  q
 q
h zMMO r   