o
    Y۷i9                     @   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r.e	  dS 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)numba.cuda.tests.cudapyr   modsupersetUp)selfr   	__class__ \/home/ubuntu/vllm_env/lib/python3.10/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
   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      |  | jj d S N)r%   r	   fib1r   r   r   r   test_global_explicit_sig      z*TestSelfRecursion.test_global_explicit_sigc                 C   r&   r'   )r%   r	   fib2r)   r   r   r   test_inner_explicit_sig!   r+   z)TestSelfRecursion.test_inner_explicit_sigc                 C   r&   r'   )r%   r	   fib3r)   r   r   r   test_global_implicit_sig$   r+   z*TestSelfRecursion.test_global_implicit_sigzSimulator does not compilec                    s^   |  t}| jj td fdd}W d    n1 sw   Y  | dt|j d S )Nvoid()c                          d d S )Nr   r   r   r   r   r   r   ,      z.TestSelfRecursion.test_runaway.<locals>.kernelz#cannot type infer runaway recursion)	assertRaisesr   r	   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	   type_change_selfpy_funcr   r   r   r   r    float64r!   r"   )	r   pfuncr   argsr   r;   r   r$   r#   r   r   r   test_type_change3   s   

z"TestSelfRecursion.test_type_changec                 C   sP   |  t}| jjd d W d    n1 sw   Y  | t|jd d S )Nr      
raise_self)r3   
ValueErrorr	   raise_self_kernelassertEqualr6   r7   )r   r9   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 ]%}||}tj|gtjd}t|}|d || |d }| || qd S )	Nc                    s$    |d }|d u rd}|| d< d S )Nr     r   )r   r   resr   r   r   r   W   s   z6TestSelfRecursion.test_optional_return.<locals>.kernelc                    s    | }|d u r
d}|S )NrI   r   )r   rJ   )r@   r   r   
cpu_kernel^   s   z:TestSelfRecursion.test_optional_return.<locals>.cpu_kernel)r      r      r   r   r   )	r	   make_optional_return_caser   r   r   r   r    r!   rG   )r   r   rK   argr$   r   r   r#   r   )r   r@   r   test_optional_returnR   s   

z&TestSelfRecursion.test_optional_returnz4Recursion handled because simulator does not compilec                    sd   | j tj | t}td fdd}W d    n1 s"w   Y  | dt|j d S )Nr0   c                      r1   )Nd   r   r   r   r   r   r   r   r2   z;TestSelfRecursion.test_growing_return_tuple.<locals>.kernelz3Return type of recursive function does not converge)	r	   make_growing_tuple_caser   r   r3   r   r5   r6   r7   r8   r   r   r   test_growing_return_tuplem   s   z+TestSelfRecursion.test_growing_return_tuple)__name__
__module____qualname__r   r%   r*   r-   r/   r   r:   unittestskiprB   expectedFailurerH   rP   rS   __classcell__r   r   r   r   r      s     


	
r   __main__)numbar   numba.core.errorsr   numba.cuda.testingr   r   numpyr   rW   r   rT   mainr   r   r   r   <module>   s    t