o
    1&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   EC:\wamp64\www\opt\env\Lib\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Z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   r1   r   r/   )r
   r1   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   r6   r   r   r   r   r   r   )r
   r6   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*   r0   r5   r8   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-   )xrD   )yz)r   rB   r   r	   )r
   rB   ZpfooZpbarZcfooZcbarrE   r   r   r   test_mutual_2I   s   
z!TestMutualRecursion.test_mutual_2c                 C   r   )Nr   )runaway_mutualr   r   )r   rI   r   r   r   r   r   )r
   rI   r    r   r   r   r!   Q   r"   z TestMutualRecursion.test_runawayc                 C   r#   )Nr   )make_type_change_mutualTr%   r&   )r   rJ   r   r	   )r
   rJ   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   rK   r   r	   )r
   rK   r(   r   r4   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')Zforceobjignore)category   )r   rN   r   r   r   r   r   r   warningscatch_warningsfilterwarningsr   r/   )r
   rN   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_mutualrO   Zraise_mutual)r   rY   r   r.   r/   r   r   )r
   rY   r   r    r   r   r   r0   w   s   
zTestMutualRecursion.test_raiseN)
r9   r:   r;   rA   rH   r!   r*   rM   rX   r0   r   r   r   r   r<   B   s    r<   __main__)r>   rS   Znumbar   Znumba.core.errorsr   r   Znumba.tests.supportr   Zunittestr   r<   r9   mainr   r   r   r   <module>   s    8>