o
    Z۷i                     @   sx   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 deZ
G dd deZed	kr:e	  dS dS )
    N)jit)TypingErrorNumbaWarning)TestCasec                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestSelfRecursionc                 C   s   |  |dd d S )N
   7   )assertPreciseEqual)selfcfunc r   P/home/ubuntu/vllm_env/lib/python3.10/site-packages/numba/tests/test_recursion.py	check_fib   s   zTestSelfRecursion.check_fibc                 C      ddl m} | | d S )Nr   )fib1)numba.tests.recursion_usecasesr   r   )r
   r   r   r   r   test_global_explicit_sig      z*TestSelfRecursion.test_global_explicit_sigc                 C   r   )Nr   )fib2)r   r   r   )r
   r   r   r   r   test_inner_explicit_sig   r   z)TestSelfRecursion.test_inner_explicit_sigc                 C   r   )Nr   )fib3)r   r   r   )r
   r   r   r   r   test_global_implicit_sig   r   z*TestSelfRecursion.test_global_implicit_sigc                 C   T   ddl m} | t}|d W d    n1 sw   Y  | dt|j d S )Nr   )runaway_self{   #cannot type infer runaway recursion)r   r   assertRaisesr   assertInstr	exception)r
   r   raisesr   r   r   test_runaway      
zTestSelfRecursion.test_runawayc                 C   <   ddl m} | }|tdd}d}| || ||  d S )Nr   )make_type_change_selfTnopython   g      ?)r   r$   r   r	   )r
   r$   pfuncr   argsr   r   r   test_type_change"   
   z"TestSelfRecursion.test_type_changec                 C   sT   ddl m} | t}|d W d    n1 sw   Y  | t|jd d S )Nr   )
raise_self   r-   )r   r-   r   
ValueErrorassertEqualr   r   )r
   r-   r    r   r   r   
test_raise)   s
   
zTestSelfRecursion.test_raisec                 C   sB   ddl m} | }|tdd}dD ]}| |||| qd S )Nr   )make_optional_return_caseTr%   )r      r      )r   r2   r   r0   )r
   r2   r)   r   argr   r   r   test_optional_return0   s   z&TestSelfRecursion.test_optional_returnc                 C   sb   ddl m} |tdd}| t}|d W d    n1 s!w   Y  | dt|j d S )Nr   )make_growing_tuple_caseTr%   d   z3Return type of recursive function does not converge)r   r7   r   r   r   r   r   r   )r
   r7   r   r    r   r   r   test_growing_return_tuple7   s   
z+TestSelfRecursion.test_growing_return_tupleN)__name__
__module____qualname__r   r   r   r   r!   r+   r1   r6   r9   r   r   r   r   r   
   s    r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestMutualRecursionc                 C   s*   ddl m} td}| |d| d S )Nr   )	outer_facr   )r   r>   math	factorialr	   )r
   r>   expectr   r   r   test_mutual_1D   s   
z!TestMutualRecursion.test_mutual_1c                 C   sj   ddl m} | \}}|tdd\}}dD ]}| ||d||d | ||dd||dd qd S )	Nr   )make_mutual2Tr%   )r      r.   )xrE   )yz)r   rC   r   r	   )r
   rC   pfoopbarcfoocbarrF   r   r   r   test_mutual_2I   s   
z!TestMutualRecursion.test_mutual_2c                 C   r   )Nr   )runaway_mutualr   r   )r   rN   r   r   r   r   r   )r
   rN   r    r   r   r   r!   Q   r"   z TestMutualRecursion.test_runawayc                 C   r#   )Nr   )make_type_change_mutualTr%   r'   )r   rO   r   r	   )r
   rO   r)   r   r*   r   r   r   r+   X   r,   z$TestMutualRecursion.test_type_changec                 C   s<   ddl m} | }|tdd}d}| |||| d S )Nr   )make_four_levelTr%      )r   rP   r   r	   )r
   rP   r)   r   r5   r   r   r   test_four_level_   r,   z#TestMutualRecursion.test_four_levelc                 C   s   ddl m} |tdd}| t}|d W d    n1 s!w   Y  d}| |t|j |tdd}| }t	  tj
dtd	 |d
}W d    n1 sUw   Y  | ||d
 d S )Nr   )make_inner_errorTr%      zUnknown attribute 'ndim')forceobjignore)category   )r   rS   r   r   r   r   r   r   warningscatch_warningsfilterwarningsr   r0   )r
   rS   r   r    errmsgr)   gotr   r   r   test_inner_errorf   s   


z$TestMutualRecursion.test_inner_errorc                 C   sZ   ddl m} | }| t}|d W d    n1 sw   Y  | t|jd d S )Nr   )make_raise_mutualrT   raise_mutual)r   r_   r   r/   r0   r   r   )r
   r_   r   r    r   r   r   r1   w   s   
zTestMutualRecursion.test_raiseN)
r:   r;   r<   rB   rM   r!   r+   rR   r^   r1   r   r   r   r   r=   B   s    r=   __main__)r?   rY   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   r=   r:   mainr   r   r   r   <module>   s    8>