
    sh                         S SK r S SKrS SKJr  S SKJrJr  S SKJr  S SK	r	 " S S\5      r
 " S S\5      r\S	:X  a  \	R                  " 5         gg)
    N)jit)TypingErrorNumbaWarning)TestCasec                   J    \ 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)TestSelfRecursion
   c                 4    U R                  U" S5      S5        g )Nr	   7   )assertPreciseEqual)selfcfuncs     n/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_recursion.py	check_fibTestSelfRecursion.check_fib   s    b	2.    c                 2    SSK Jn  U R                  U5        g )Nr   )fib1)numba.tests.recursion_usecasesr   r   )r   r   s     r   test_global_explicit_sig*TestSelfRecursion.test_global_explicit_sig       7tr   c                 2    SSK Jn  U R                  U5        g )Nr   )fib2)r   r   r   )r   r   s     r   test_inner_explicit_sig)TestSelfRecursion.test_inner_explicit_sig   r   r   c                 2    SSK Jn  U R                  U5        g )Nr   )fib3)r   r   r   )r   r   s     r   test_global_implicit_sig*TestSelfRecursion.test_global_implicit_sig   r   r   c                     SSK Jn  U R                  [        5       nU" S5        S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   )runaway_self{   #cannot type infer runaway recursion)r   r"   assertRaisesr   assertInstr	exception)r   r"   raisess      r   test_runawayTestSelfRecursion.test_runaway   sH    ?{+v ,;&**+	- ,+   	A
A!c                 p    SSK Jn  U" 5       nU" [        SS95      nSnU R                  U" U6 U" U6 5        g )Nr   )make_type_change_selfTnopython   g      ?)r   r.   r   r   )r   r.   pfuncr   argss        r   test_type_change"TestSelfRecursion.test_type_change"   s9    H%'%c4&89teTl;r   c                     SSK Jn  U R                  [        5       nU" S5        S S S 5        U R	                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   )
raise_self   r8   )r   r8   r%   
ValueErrorassertEqualr'   r(   )r   r8   r)   s      r   
test_raiseTestSelfRecursion.test_raise)   sG    =z*fqM + 	V--.= +*r,   c                     SSK Jn  U" 5       nU" [        SS95      nS H!  nU R                  U" U5      U" U5      5        M#     g )Nr   )make_optional_return_caseTr/   )r      r	      )r   r?   r   r;   )r   r?   r3   r   args        r   test_optional_return&TestSelfRecursion.test_optional_return0   s>    L)+)#t*<=!CU3Zs4 "r   c                     SSK Jn  U" [        SS95      nU R                  [        5       nU" S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   )make_growing_tuple_caseTr/   d   z3Return type of recursive function does not converge)r   rF   r   r%   r   r&   r'   r(   )r   rF   r   r)   s       r   test_growing_return_tuple+TestSelfRecursion.test_growing_return_tuple7   sV    J'T(:;{+v#J ,A  !	
 ,+s   	A""
A0 N)__name__
__module____qualname____firstlineno__r   r   r   r   r*   r5   r<   rC   rH   __static_attributes__rJ   r   r   r   r   
   s/    /-<>5
r   r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestMutualRecursionB   c                 l    SSK Jn  [        R                  " S5      nU R	                  U" S5      U5        g )Nr   )	outer_facr	   )r   rT   math	factorialr   )r   rT   expects      r   test_mutual_1!TestMutualRecursion.test_mutual_1D   s'    <#	"v6r   c           	          SSK Jn  U" 5       u  p#U" [        SS95      u  pES H9  nU R                  U" US9U" US95        U R                  U" USS9U" USS95        M;     g )	Nr   )make_mutual2Tr/   )r      r9   )xr]   )yz)r   r[   r   r   )r   r[   pfoopbarcfoocbarr^   s          r   test_mutual_2!TestMutualRecursion.test_mutual_2I   s]    ?!^
!#t"45
A##D1Itay9##D1ND1NC r   c                     SSK Jn  U R                  [        5       nU" S5        S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   )runaway_mutualr#   r$   )r   rh   r%   r   r&   r'   r(   )r   rh   r)   s      r   r*    TestMutualRecursion.test_runawayQ   sH    A{+v3 ,;&**+	- ,+r,   c                 p    SSK Jn  U" 5       nU" [        SS95      nSnU R                  U" U6 U" U6 5        g )Nr   )make_type_change_mutualTr/   r1   )r   rk   r   r   )r   rk   r3   r   r4   s        r   r5   $TestMutualRecursion.test_type_changeX   s9    J')'T(:;teTl;r   c                 |    SSK Jn  U" 5       nU" [        SS95      nSnU R                  U" U5      U" U5      5        g )Nr   )make_four_levelTr/      )r   rn   r   r   )r   rn   r3   r   rB   s        r   test_four_level#TestMutualRecursion.test_four_level_   s9    B!T 23c
E#J7r   c                    SSK Jn  U" [        SS95      nU R                  [        5       nU" S5        S S S 5        SnU R                  U[        WR                  5      5        U" [        SS95      nU" 5       n[        R                  " 5          [        R                  " S[        S	9  U" S
5      nS S S 5        U R                  WU" S
5      5        g ! , (       d  f       N= f! , (       d  f       N8= f)Nr   )make_inner_errorTr/      zUnknown attribute 'ndim')forceobjignore)category   )r   rs   r   r%   r   r&   r'   r(   warningscatch_warningsfilterwarningsr   r;   )r   rs   r   r)   errmsgr3   gots          r   test_inner_error$TestMutualRecursion.test_inner_errorf   s    C d!34{+v!H ,-fc&"2"234 !d!34 "$$&##H|D(C ' 	eAh' ,+ '&s   	C"C"
C"
C0c                     SSK Jn  U" 5       nU R                  [        5       nU" S5        S S S 5        U R	                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr   )make_raise_mutualrt   raise_mutual)r   r   r%   r:   r;   r'   r(   )r   r   r   r)   s       r   r<   TestMutualRecursion.test_raisew   sO    D!#z*f!H + 	V--.? +*s   	A
A(rJ   N)rK   rL   rM   rN   rX   re   r*   r5   rp   r~   r<   rO   rJ   r   r   rQ   rQ   B   s'    7
D-<8("@r   rQ   __main__)rU   ry   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   rQ   rK   mainrJ   r   r   <module>r      sK       7 ( 5
 5
p;@( ;@| zMMO r   