U
    -e9                     @   s\   d dl mZ d dlmZ d dlmZmZ d dlZd dl	Z	G dd deZ
edkrXe	  dS )    )cuda)TypingError)CUDATestCaseskip_on_cudasimNc                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zeddd Z	e
ddd Ze
jdd Ze
ddd Zeddd Z  ZS )TestSelfRecursionc                    s    ddl m} || _t   d S )Nr   )recursion_usecases)Znumba.cuda.tests.cudapyr   modsupersetUp)selfr   	__class__ g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_recursion.pyr
   
   s    zTestSelfRecursion.setUpc                    sX   t j fdd}tjdgtjd}t|}|d || |d }d}| || d S )Nc                    s    |d | d< d S Nr   r   )rxcfuncr   r   kernel   s    z+TestSelfRecursion.check_fib.<locals>.kernel
   Zdtype   r   r   7   )r   jitnpasarrayint64
zeros_likeassertPreciseEqual)r   r   r   r   r   actualexpectedr   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_sigzSimulator does not compilec              	      sJ   |  t$}| jj td fdd}W 5 Q R X | dt|j d S )Nvoid()c                      s    d d S )Nr   r   r   r   r   r   r   ,   s    z.TestSelfRecursion.test_runaway.<locals>.kernelz#cannot type infer runaway recursion)	assertRaisesr   r   Zrunaway_selfr   r   assertInstr	exceptionr   raisesr   r   r   r   test_runaway'   s    zTestSelfRecursion.test_runawayz-Needs insert_unresolved_ref support in targetc           	         s   | j jj}| j j tj fdd}d}tj|d gtjd}tj|d gtjd}t	|}|d ||| || }|d }| 
|| d S )Nc                    s    |d |d | d< d S r   r   )r   r   yr   r   r   r   8   s    z2TestSelfRecursion.test_type_change.<locals>.kernel)   g      ?r   r   r   r   )r   Ztype_change_selfZpy_funcr   r   r   r   r   Zfloat64r   r    )	r   pfuncr   argsr   r1   r   r"   r!   r   r   r   test_type_change3   s    

z"TestSelfRecursion.test_type_changec              	   C   s<   |  t}| jjd d W 5 Q R X | t|jd d S )Nr      Z
raise_self)r*   
ValueErrorr   Zraise_self_kernelassertEqualr,   r-   )r   r/   r   r   r   
test_raiseH   s    zTestSelfRecursion.test_raisec                    s   | j  | j tj tj fdd}fdd}dD ]J}||}tj|gtjd}t|}|d || |d }| || q:d S )	Nc                    s$    |d }|d krd}|| d< d S )Nr     r   )r   r   resr   r   r   r   W   s    z6TestSelfRecursion.test_optional_return.<locals>.kernelc                    s    | }|d krd}|S )Nr:   r   )r   r;   )r3   r   r   
cpu_kernel^   s    z:TestSelfRecursion.test_optional_return.<locals>.cpu_kernel)r      r      r   r   r   )	r   Zmake_optional_return_caser   r   r   r   r   r   r8   )r   r   r<   argr"   r   r   r!   r   )r   r3   r   test_optional_returnR   s    

z&TestSelfRecursion.test_optional_returnz4Recursion handled because simulator does not compilec              	      sP   | j tj | t}td fdd}W 5 Q R X | dt|j d S )Nr)   c                      s    d d S )Nd   r   r   r   r   r   r   r   s    z;TestSelfRecursion.test_growing_return_tuple.<locals>.kernelz3Return type of recursive function does not converge)	r   Zmake_growing_tuple_caser   r   r*   r   r+   r,   r-   r.   r   r   r   test_growing_return_tuplem   s    z+TestSelfRecursion.test_growing_return_tuple)__name__
__module____qualname__r
   r#   r&   r'   r(   r   r0   unittestskipr5   ZexpectedFailurer9   r@   rB   __classcell__r   r   r   r   r      s   


	
r   __main__)Znumbar   Znumba.core.errorsr   Znumba.cuda.testingr   r   numpyr   rF   r   rC   mainr   r   r   r   <module>   s   t