
    xKg9                         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                          yy)    )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                 <    ddl m} || _        t        |           y )Nr   )recursion_usecases)numba.cuda.tests.cudapyr
   modsupersetUp)selfr
   	__class__s     j/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/tests/cudapy/test_recursion.pyr   zTestSelfRecursion.setUp
   s     	?%    c                     t         j                  fd       }t        j                  dgt        j                        }t        j
                  |      } |d   ||       |d   }d}| j                  ||       y )Nc                 "     |d         | d<   y Nr    )rxcfuncs     r   kernelz+TestSelfRecursion.check_fib.<locals>.kernel   s    1;AaDr   
   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   sm    		 
	 JJt288,MM!tQ11r   c                 N    | j                  | j                  j                         y N)r)   r   fib1r   s    r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig       txx}}%r   c                 N    | j                  | j                  j                         y r+   )r)   r   fib2r-   s    r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig!   r/   r   c                 N    | j                  | j                  j                         y r+   )r)   r   fib3r-   s    r   test_global_implicit_sigz*TestSelfRecursion.test_global_implicit_sig$   r/   r   zSimulator does not compilec                 
   | j                  t              5 }| j                  j                  t	        j
                  d      fd       }d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nvoid()c                        d       y )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'   sj    {+vHH))EXXh  	 , 	;&**+	- ,+s   4A99B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   }| j                  ||       y )Nc                 *     |d   |d         | d<   y r   r   )r   r   yr   s      r   r   z2TestSelfRecursion.test_type_change.<locals>.kernel8   s    1qt$AaDr   )   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1))		% 
	% JJQy1JJQy

3MM!tQ1$<11r   c                     | j                  t              5 } | j                  j                  d   d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr      
raise_self)r:   
ValueErrorr   raise_self_kernelassertEqualr=   r>   )r   r@   s     r   
test_raisezTestSelfRecursion.test_raiseH   sX    
 z*f,DHH&&t,Q/ + 	V--.= +*s    A$$A-c                   	 | j                   j                         	| j                   j                  t        j                        t        j                  fd       }	fd}dD ]h  } ||      }t	        j
                  |gt        j                        }t	        j                  |      } |d   ||       |d   }| j                  ||       j y )Nc                 .     |d         }|d}|| d<   y )Nr     r   )r   r   resr   s      r   r   z6TestSelfRecursion.test_optional_return.<locals>.kernelW   s#    !+C{AaDr   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22488<		 
		 "C!#H

C51Aa AF4LAqTFXv. "r   z4Recursion handled because simulator does not compilec                 0   | j                   j                  t        j                        | j	                  t
              5 }t        j                  d      fd       }d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr7   c                        d       y )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   ss    00:{+vXXh   ,
 	A  !	
 ,+s    BB)__name__
__module____qualname__r   r)   r.   r2   r5   r   rA   unittestskiprK   expectedFailurerR   r]   rb   __classcell__)r   s   @r   r   r      s    2&&& 12	- 3	- X]]BC2 D2( > > X]]BC/ D/4 KL
 M
r   r   __main__)numbar   numba.core.errorsr   numba.cuda.testingr   r   numpyr"   rf   r   rc   mainr   r   r   <module>rp      s=     ) <  q
 q
h zHMMO r   