
    xKg                     b   d Z ddlmZ  ej                  dd      d        Zd Z e       Zej                  d        Z ej                  d      d	        Z ej                  d      d
        Z	 ej                  d      d        Z
 ej                  dd      d        Zd fdZd fdZy)z
Usecases of recursive functions in the CUDA target, many derived from
numba/tests/recursion_usecases.py.

Some functions are compiled at import time, hence a separate module.
    )cudai8(i8)Tdevicec                 J    | dk  r| S t        | dz
        t        | dz
        z   S N      )fib1ns    n/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/tests/cudapy/recursion_usecases.pyr   r      s+    1u A;a!e$$    c                  F     t        j                  dd       fd         S )Nr   Tr   c                 @    | dk  r| S  | dz
         | dz
        z   S r    )r   fib2s    r   r   zmake_fib2.<locals>.fib2   s*    q5HAE{T!a%[((r   )r   jit)r   s   @r   	make_fib2r      s'    	XXht$) %)
 Kr   c                 >    | dkD  r|dkD  r| t        | |z
  |      z   S |S )Nr
   r   )type_change_self)xys     r   r   r   !   s+    1uQ#AE1---r   c                 J    | dk  r| S t        | dz
        t        | dz
        z   S r   )fib3r   s    r   r   r   *   s)    1uA;a!e$$r   c                     t        |       S N)runaway_selfr   s    r   r   r   3   s    ?r   c                 J    | dk(  rt        d      | dkD  rt        | dz
        S y)Nr
   
raise_selfr   )
ValueErrorr!   r   s    r   r!   r!   8   s-    Av&&	
Q!a%  r   F)debugoptc                     t        |        y r   )r!   r   s    r   raise_self_kernelr&   B   s	    qMr   c                     | S r   r   r   s    r   <lambda>r(   G   s    Ar   c                 0    | d        | fd       S )Nc                     | dkD  r| dz
  S y )N   r
   r   r   s    r   fooz&make_optional_return_case.<locals>.fooH   s    q5q5Lr   c                 @     |       }||S |dk  r|S |  |      z  S )N   r   )r   outbarr,   s     r   r0   z&make_optional_return_case.<locals>.barO   s0    !f;J1WJs3x<r   r   )r   r0   r,   s    @@r   make_optional_return_caser1   G   s0     	 	  	  Jr   c                     | S r   r   r   s    r   r(   r(   \   s    !r   c                     | fd       S )Nc                 *    | dk  ry |  | dz
        fS )Nr   r
   r   )r   	make_lists    r   r5   z*make_growing_tuple_case.<locals>.make_list^   s!    69QU#$$r   r   )r   r5   s    @r   make_growing_tuple_caser6   \   s    % 	%
 r   N)__doc__numbar   r   r   r   r   r   r   r   r!   r&   r1   r6   r   r   r   <module>r9      s     
(4 % !% {  
 
% % 
  
  
%  ! #. * !, r   