
    J/Ph9                         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e          Z
edk    r e	j                     dS dS )    )cuda)TypingError)CUDATestCaseskip_on_cudasimNc                   
    e Zd Z fdZd Zd Zd Zd Z ed          d             Z	 e
j        d          d	             Ze
j        d
             Z e
j        d          d             Z ed          d             Z xZS )TestSelfRecursionc                 b    ddl m} || _        t                                                       d S )Nr   )recursion_usecases)numba.cuda.tests.cudapyr
   modsupersetUp)selfr
   	__class__s     f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_recursion.pyr   zTestSelfRecursion.setUp
   s3     	?>>>>>%    c                    t           j        fd            }t          j        dgt          j                  }t          j        |          } |d         ||           |d         }d}|                     ||           d S )Nc                 0     |d                   | d<   d S Nr    )rxcfuncs     r   kernelz+TestSelfRecursion.check_fib.<locals>.kernel   s    51;;AaDDDr   
   dtype   r   r   7   )r   jitnpasarrayint64
zeros_likeassertPreciseEqual)r   r   r   r   r   actualexpecteds    `     r   	check_fibzTestSelfRecursion.check_fib   s    		 	 	 	 
	 Jt28,,,M!tQ111111r   c                 D    |                      | j        j                   d S N)r)   r   fib1r   s    r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig       tx}%%%%%r   c                 D    |                      | j        j                   d S r+   )r)   r   fib2r-   s    r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig!   r/   r   c                 D    |                      | j        j                   d S r+   )r)   r   fib3r-   s    r   test_global_implicit_sigz*TestSelfRecursion.test_global_implicit_sig$   r/   r   zSimulator does not compilec                    |                      t                    5 }| j        j        t	          j        d          fd            }d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nvoid()c                        d           d S )Nr   r   r   s   r   r   z.TestSelfRecursion.test_runaway.<locals>.kernel,   s    ar   z#cannot type infer runaway recursion)	assertRaisesr   r   runaway_selfr   r!   assertInstr	exceptionr   raisesr   r   s      @r   test_runawayzTestSelfRecursion.test_runaway'   s    {++ 	vH)EXh     		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	;&*++	- 	- 	- 	- 	-s   ,AAAz-Needs insert_unresolved_ref support in targetc                   	 | j         j        j        }| j         j        	t          j        	fd            }d}t          j        |d         gt
          j                  }t          j        |d         gt
          j                  }t          j	        |          } |d         |||            || }|d         }| 
                    ||           d S )Nc                 >     |d         |d                   | d<   d S r   r   )r   r   yr   s      r   r   z2TestSelfRecursion.test_type_change.<locals>.kernel8   s$    51qt$$AaDDDr   )   g      ?r   r   r   r   )r   type_change_selfpy_funcr   r!   r"   r#   r$   float64r%   r&   )
r   pfuncr   argsr   rD   r   r(   r'   r   s
            @r   test_type_changez"TestSelfRecursion.test_type_change3   s    )1)		% 	% 	% 	% 
	% JQy111JQy
333M!tQ15$<111111r   c                     |                      t                    5 } | j        j        d         d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr      
raise_self)r:   
ValueErrorr   raise_self_kernelassertEqualr=   r>   )r   r@   s     r   
test_raisezTestSelfRecursion.test_raiseH   s    
 z** 	0f,DH&t,Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	V-..=====s   AA
Ac                   	 | j                                         	| j                             t          j                  t          j        fd            }	fd}dD ]r} ||          }t	          j        |gt          j                  }t	          j        |          } |d         ||           |d         }|                     ||           sd S )Nc                 <     |d                   }|d}|| d<   d S )Nr     r   )r   r   resr   s      r   r   z6TestSelfRecursion.test_optional_return.<locals>.kernelW   s+    %!++C{AaDDDr   c                 &     |           }|d}|S )NrU   r   )r   rV   rI   s     r   
cpu_kernelz:TestSelfRecursion.test_optional_return.<locals>.cpu_kernel^   s    %((C{Jr   )r      r      r   r   r   )	r   make_optional_return_caser   r!   r"   r#   r$   r%   rQ   )
r   r   rX   argr(   r   r   r'   r   rI   s
           @@r   test_optional_returnz&TestSelfRecursion.test_optional_returnR   s    22442248<<		 	 	 	 
		 	 	 	 	 " 	/ 	/C!z#H
C5111Aa  AF4LAqTFXv....	/ 	/r   z4Recursion handled because simulator does not compilec                 B   | j                             t          j                  |                     t
                    5 }t          j        d          fd            }d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr7   c                        d           d S )Nd   r   r9   s   r   r   z;TestSelfRecursion.test_growing_return_tuple.<locals>.kernelr   s    c




r   z3Return type of recursive function does not converge)	r   make_growing_tuple_caser   r!   r:   r   r<   r=   r>   r?   s      @r   test_growing_return_tuplez+TestSelfRecursion.test_growing_return_tuplem   s    00::{++ 	vXh     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	A !!	
 	
 	
 	
 	
s     A,,A03A0)__name__
__module____qualname__r   r)   r.   r2   r5   r   rA   unittestskiprK   expectedFailurerR   r]   rb   __classcell__)r   s   @r   r   r      s6           2 2 2& & && & && & & _122	- 	- 32	- X]BCC2 2 DC2( > > > X]BCC/ / DC/4 _KLL
 
 ML
 
 
 
 
r   r   __main__)numbar   numba.core.errorsr   numba.cuda.testingr   r   numpyr"   rf   r   rc   mainr   r   r   <module>rp      s          ) ) ) ) ) ) < < < < < < < <     q
 q
 q
 q
 q
 q
 q
 q
h zHMOOOOO r   