a
    
d!                     @   st   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rpe	  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   s   ddl m} || _d S Nr   )recursion_usecasesZnumba.testsr   modselfr    r   c/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   s   |  | jj d S N)r   r
   Zfib1r   r   r   r   test_global_explicit_sig   s    z*TestSelfRecursion.test_global_explicit_sigc                 C   s   |  | jj d S r   )r   r
   Zfib2r   r   r   r   test_inner_explicit_sig   s    z)TestSelfRecursion.test_inner_explicit_sigc                 C   s   |  | jj d S r   )r   r
   Zfib3r   r   r   r   test_global_implicit_sig   s    z*TestSelfRecursion.test_global_implicit_sigc                 C   sL   |  t}| jd W d    n1 s,0    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   s
    *zTestSelfRecursion.test_runawayc                 C   s8   | 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$   s    
z"TestSelfRecursion.test_type_changec                 C   sL   |  t}| jd W d    n1 s,0    Y  | t|jd d S )N   
raise_self)r   
ValueErrorr
   r+   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   r-   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:0    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)   r.   r3   r6   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   s   ddl m} || _d S 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 ]8}| ||d||d | ||dd||dd q(d S )NTr$   )r      r*   )xr@   )yz)r
   Zmake_mutual2r   r   )r   ZpfooZpbarZcfooZcbarrA   r   r   r   test_mutual_2J   s
    z!TestMutualRecursion.test_mutual_2c                 C   sL   |  t}| jd W d    n1 s,0    Y  | dt|j d S r   )r   r   r
   Zrunaway_mutualr   r   r   r    r   r   r   r"   Q   s
    *z TestMutualRecursion.test_runawayc                 C   s8   | j  }| j tdd}d}| || ||  d S r#   )r
   Zmake_type_change_mutualr   r   r&   r   r   r   r)   W   s    
z$TestMutualRecursion.test_type_changec                 C   s8   | j  }| j tdd}d}| |||| d S )NTr$      )r
   Zmake_four_levelr   r   r1   r   r   r   test_four_level]   s    
z#TestMutualRecursion.test_four_levelc                 C   s   | j tdd}| t}|d W d    n1 s:0    Y  d}| |t|j | j t}| j  }t	 & tj
dtd |d}W d    n1 s0    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   r-   )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 s20    Y  | t|jd d S )NrG   Zraise_mutual)r
   Zmake_raise_mutualr   r,   r-   r   r   r5   r   r   r   r.   s   s    
&zTestMutualRecursion.test_raiseN)r7   r8   r9   r   r>   rD   r"   r)   rF   rP   r.   r   r   r   r   r:   @   s   r:   __main__)r;   rK   Znumbar   Znumba.core.errorsr   r   Znumba.tests.supportr   Zunittestr   r:   r7   mainr   r   r   r   <module>   s   6;