U
    Ã9%e!  ã                   @   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   úY/var/www/html/Darija-Ai-API/env/lib/python3.8/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   s8   |   t¡}| j d¡ W 5 Q R X |  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   s8   |   t¡}| j d¡ W 5 Q R X |  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   sF   | j  tdd¡}|  t¡}|dƒ W 5 Q R X |  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   s8   |   t¡}| j d¡ W 5 Q R X |  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 5 Q R X d}|  |t|jƒ¡ | j  t¡}| j  ¡ }t 	¡  tj
dtd |dƒ}W 5 Q R X |  ||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   s>   | j  ¡ }|  t¡}|dƒ W 5 Q R X |  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;