
    xKg                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	Z	 G d de      Z
 G d de      Zed	k(  r e	j                          yy)
    N)jit)TypingErrorNumbaWarning)TestCasec                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestSelfRecursionc                 4    | j                   |d      d       y )N
   7   )assertPreciseEqual)selfcfuncs     ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_recursion.py	check_fibzTestSelfRecursion.check_fib   s    b	2.    c                 2    ddl m} | j                  |       y )Nr   )fib1)numba.tests.recursion_usecasesr   r   )r   r   s     r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig       7tr   c                 2    ddl m} | j                  |       y )Nr   )fib2)r   r   r   )r   r   s     r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig   r   r   c                 2    ddl m} | j                  |       y )Nr   )fib3)r   r   r   )r   r   s     r   test_global_implicit_sigz*TestSelfRecursion.test_global_implicit_sig   r   r   c                     ddl m} | j                  t              5 } |d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr   )runaway_self{   #cannot type infer runaway recursion)r   r   assertRaisesr   assertInstr	exception)r   r   raisess      r   test_runawayzTestSelfRecursion.test_runaway   sH    ?{+v ,;&**+	- ,+   	AAc                 v    ddl m}  |       } |t        d            }d}| j                   ||  ||        y )Nr   )make_type_change_selfTnopython   g      ?)r   r)   r   r   )r   r)   pfuncr   argss        r   test_type_changez"TestSelfRecursion.test_type_change"   s9    H%'%c4&89teTl;r   c                     ddl m} | j                  t              5 } |d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr   )
raise_self   r2   )r   r2   r!   
ValueErrorassertEqualr#   r$   )r   r2   r%   s      r   
test_raisezTestSelfRecursion.test_raise)   sG    =z*fqM + 	V--.= +*r'   c                     ddl m}  |       } |t        d            }dD ]   }| j                   ||       ||             " y )Nr   )make_optional_return_caseTr*   )r      r
      )r   r8   r   r5   )r   r8   r.   r   args        r   test_optional_returnz&TestSelfRecursion.test_optional_return0   s>    L)+)#t*<=!CU3Zs4 "r   c                     ddl m}  |t        d            }| j                  t              5 } |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr   )make_growing_tuple_caseTr*   d   z3Return type of recursive function does not converge)r   r>   r   r!   r   r"   r#   r$   )r   r>   r   r%   s       r   test_growing_return_tuplez+TestSelfRecursion.test_growing_return_tuple7   sV    J'T(:;{+v#J ,A  !	
 ,+s   	A%%A.N)__name__
__module____qualname__r   r   r   r   r&   r0   r6   r<   r@    r   r   r   r   
   s/    /-<>5
r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestMutualRecursionc                 j    ddl m} t        j                  d      }| j	                   |d      |       y )Nr   )	outer_facr
   )r   rH   math	factorialr   )r   rH   expects      r   test_mutual_1z!TestMutualRecursion.test_mutual_1D   s'    <#	"v6r   c                     ddl m}  |       \  }} |t        d            \  }}dD ]D  }| j                   ||       ||             | j                   ||d       ||d             F y )	Nr   )make_mutual2Tr*   )r      r3   )xrP   )yz)r   rN   r   r   )r   rN   pfoopbarcfoocbarrQ   s          r   test_mutual_2z!TestMutualRecursion.test_mutual_2I   sa    ?!^
d!#t"45
dA##D1Itay9##D1ND1NC r   c                     ddl m} | j                  t              5 } |d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr   )runaway_mutualr   r    )r   rZ   r!   r   r"   r#   r$   )r   rZ   r%   s      r   r&   z TestMutualRecursion.test_runawayQ   sH    A{+v3 ,;&**+	- ,+r'   c                 v    ddl m}  |       } |t        d            }d}| j                   ||  ||        y )Nr   )make_type_change_mutualTr*   r,   )r   r\   r   r   )r   r\   r.   r   r/   s        r   r0   z$TestMutualRecursion.test_type_changeX   s9    J')'T(:;teTl;r   c                     ddl m}  |       } |t        d            }d}| j                   ||       ||             y )Nr   )make_four_levelTr*      )r   r^   r   r   )r   r^   r.   r   r;   s        r   test_four_levelz#TestMutualRecursion.test_four_level_   s9    B!T 23c
E#J7r   c                    ddl m}  |t        d            }| j                  t              5 } |d       d d d        d}| j                  |t        j                                |t        d            } |       }t        j                         5  t        j                  dt        	        |d
      }d d d        | j                   |d
             y # 1 sw Y   xY w# 1 sw Y   .xY w)Nr   )make_inner_errorTr*      zUnknown attribute 'ndim')forceobjignore)category   )r   rb   r   r!   r   r"   r#   r$   warningscatch_warningsfilterwarningsr   r5   )r   rb   r   r%   errmsgr.   gots          r   test_inner_errorz$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!$C-c                     ddl m}  |       }| j                  t              5 } |d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr   )make_raise_mutualrc   raise_mutual)r   ro   r!   r4   r5   r#   r$   )r   ro   r   r%   s       r   r6   zTestMutualRecursion.test_raisew   sO    D!#z*f!H + 	V--.? +*s   	AA#N)
rA   rB   rC   rL   rX   r&   r0   r`   rm   r6   rD   r   r   rF   rF   B   s'    7
D-<8("@r   rF   __main__)rI   rh   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   rF   rA   mainrD   r   r   <module>rw      sM       7 ( 5
 5
p;@( ;@| zHMMO r   