o
    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                   @   s\   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d ZdS )TestSelfRecursionc                 C      ddl m} || _d S Nr   )recursion_usecasesZnumba.testsr	   modselfr	    r   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_recursion.pysetUp   s   
zTestSelfRecursion.setUpc                 C   s   |  |dd d S )N
   7   )assertPreciseEqual)r   cfuncr   r   r   	check_fib   s   zTestSelfRecursion.check_fibc                 C      |  | jj d S N)r   r   Zfib1r   r   r   r   test_global_explicit_sig      z*TestSelfRecursion.test_global_explicit_sigc                 C   r   r   )r   r   Zfib2r   r   r   r   test_inner_explicit_sig   r   z)TestSelfRecursion.test_inner_explicit_sigc                 C   r   r   )r   r   Zfib3r   r   r   r   test_global_implicit_sig   r   z*TestSelfRecursion.test_global_implicit_sigc                 C   L   |  t}| jd W d    n1 sw   Y  | dt|j d S N{   z#cannot type infer runaway recursion)assertRaisesr   r   Zrunaway_selfassertInstr	exceptionr   raisesr   r   r   test_runaway      zTestSelfRecursion.test_runawayc                 C   8   | j  }| j tdd}d}| || ||  d S NTZnopython)   g      ?)r   Zmake_type_change_selfr   r   r   pfuncr   argsr   r   r   test_type_change$      
z"TestSelfRecursion.test_type_changec                 C   sL   |  t}| jd W d    n1 sw   Y  | t|jd d S )N   
raise_self)r    
ValueErrorr   r2   assertEqualr"   r#   r$   r   r   r   
test_raise*   s   zTestSelfRecursion.test_raisec                 C   s>   | j  }| j tdd}dD ]}| |||| qd S )NTr*   )r      r      )r   Zmake_optional_return_caser   r4   r   r-   r   argr   r   r   test_optional_return0   s
   
z&TestSelfRecursion.test_optional_returnc                 C   sZ   | j tdd}| t}|d W d    n1 sw   Y  | dt|j d S )NTr*   d   z3Return type of recursive function does not converge)r   Zmake_growing_tuple_caser   r    r   r!   r"   r#   r   r   r%   r   r   r   test_growing_return_tuple6   s   
z+TestSelfRecursion.test_growing_return_tupleN)__name__
__module____qualname__r   r   r   r   r   r&   r/   r5   r:   r=   r   r   r   r   r   
   s    r   c                   @   sL   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S )TestMutualRecursionc                 C   r   r   r
   r   r   r   r   r   B   s   
zTestMutualRecursion.setUpc                 C   s"   t d}| | jd| d S )Nr   )math	factorialr   r   Z	outer_fac)r   expectr   r   r   test_mutual_1F   s   
z!TestMutualRecursion.test_mutual_1c                 C   sf   | j  \}}| j tdd\}}dD ]}| ||d||d | ||dd||dd qd S )NTr*   )r      r1   )xrG   )yz)r   Zmake_mutual2r   r   )r   ZpfooZpbarZcfooZcbarrH   r   r   r   test_mutual_2J   s   z!TestMutualRecursion.test_mutual_2c                 C   r   r   )r    r   r   Zrunaway_mutualr!   r"   r#   r$   r   r   r   r&   Q   r'   z TestMutualRecursion.test_runawayc                 C   r(   r)   )r   Zmake_type_change_mutualr   r   r,   r   r   r   r/   W   r0   z$TestMutualRecursion.test_type_changec                 C   s8   | j  }| j tdd}d}| |||| d S )NTr*      )r   Zmake_four_levelr   r   r8   r   r   r   test_four_level]   r0   z#TestMutualRecursion.test_four_levelc                 C   s   | j tdd}| t}|d W d    n1 sw   Y  d}| |t|j | j t}| j  }t	  tj
dtd |d}W d    n1 sRw   Y  | ||d d S )NTr*      zUnknown attribute 'ndim'ignore)category   )r   Zmake_inner_errorr   r    r   r!   r"   r#   warningscatch_warningsfilterwarningsr   r4   )r   r   r%   errmsgr-   gotr   r   r   test_inner_errorc   s   



z$TestMutualRecursion.test_inner_errorc                 C   sR   | j  }| t}|d W d    n1 sw   Y  | t|jd d S )NrN   Zraise_mutual)r   Zmake_raise_mutualr    r3   r4   r"   r#   r<   r   r   r   r5   s   s
   

zTestMutualRecursion.test_raiseN)r>   r?   r@   r   rE   rK   r&   r/   rM   rW   r5   r   r   r   r   rA   @   s    rA   __main__)rB   rR   Znumbar   Znumba.core.errorsr   r   Znumba.tests.supportr   Zunittestr   rA   r>   mainr   r   r   r   <module>   s    6;