
    J/Ph%                        d Z ddlmZ  edd          d             Zd Z e            Zd fd	Z ed          d
             Z ed          d             Z ed          d             Z	 ed          d             Z
 ed          d             Zd fdZ ed          d             Z ed          d             Zd fdZd fdZd fdZd fdZd fdZd fdZdS ) zh
Usecases of recursive functions.

Some functions are compiled at import time, hence a separate module.
    jiti8(i8)Tnopythonc                 ^    | dk     r| S t          | dz
            t          | dz
            z   S N      n)fib1r   s    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/recursion_usecases.pyr   r   
   s1    1uuA;;A&&    c                  @     t          dd           fd              S )Nr   Tr   c                 P    | dk     r| S  | dz
             | dz
            z   S r	    )r   fib2s    r   r   zmake_fib2.<locals>.fib2   s6    q55HtAE{{TTAE]]]**r   r   )r   s   @r   	make_fib2r      s;    D!!!+ + + + "!+
 Kr   c                     | S Nr   xs    r   <lambda>r      s     r   c                 "    | fd            S )Nc                 D    | dk    r|dk    r|  | |z
  |          z   S |S Nr   r   r   )r   ytype_change_selfs     r   r   z/make_type_change_self.<locals>.type_change_self   s6    q55QUU''Aq1111Hr   r   )r   r   s    @r   make_type_change_selfr       s.        	S
 r   c                 \    | dk     r| S t          | dz
            t          | dz
            z   S Nr
   r   )fib3r   s    r   r#   r#   )   s/    1uuA;;a!e$$r   c                      t          |           S r   )runaway_selfr   s    r   r%   r%   1   s    ??r   c                 `    | dk    rt          d          | dk    rt          | dz
            S dS )Nr   
raise_selfr   )
ValueErrorr'   r   s    r   r'   r'   6   s9    Avv&&&	
Q!a%   qr   c                 <    | dk     rdS | t          | dz
            z  S Nr   )	inner_facr   s    r   	outer_facr,   A   '    1uuqyQr   c                 <    | dk     rdS | t          | dz
            z  S r*   )r,   r   s    r   r+   r+   H   r-   r   c                     | S r   r   r   s    r   r   r   P   s    q r   c                 B    | fd            | fd            fS )Nc                 :    | dk    rd d|           z  S d| z   S )Nr   r
   r   )zr   r   )r   bars    r   foozmake_mutual2.<locals>.fooQ   s,    q55ssQ!}}}$$1ur   c                 "     | |z
            S )Nr   r   )r   r2   r4   s     r   r3   zmake_mutual2.<locals>.barW   s    sQU|||r   r   r   r3   r4   s    @@r   make_mutual2r7   P   sW        	S
 	    	S 8Or   c                      t          |           S r   )runaway_mutual_innerr   s    r   runaway_mutualr:   `   s    """r   c                      t          |           S r   )r:   r   s    r   r9   r9   e   s    !r   c                     | S r   r   r   s    r   r   r   l       ! r   c                 >    | fd            | fd            S )Nc                 D    | dk    r|dk    r|  | |z
  |          z   S |S r   r   )r   r   r3   s     r   r4   z$make_type_change_mutual.<locals>.foom   s4    q55QUU ss1q5!}}$$Hr   c                 D    | dk    r|dk    r|  | |z
  |          z   S |S r   r   )r   r   r4   s     r   r3   z$make_type_change_mutual.<locals>.barw   s2    q55QUUss1q5!}}$$Hr   r   r6   s    @@r   make_type_change_mutualrA   l   sS        	S 	    	S Jr   c                     | S r   r   r   s    r   r   r      s    ! r   c                 v    | fd            | fd            | fd            | fd            S )Nc                 0    | dk    r |           dz  S dS )Nr   r
   r   r   )r   seconds    r   firstzmake_four_level.<locals>.first   s%     q556!99q= 1r   c                       |           dz  S )N   r   )r   thirds    r   rE   zmake_four_level.<locals>.second   s    uQxx!|r   c                       |           dz  S )N   r   )r   fourths    r   rI   zmake_four_level.<locals>.third   s    vayy1}r   c                 &     | dz  dz
            S r"   r   )r   rF   s    r   rL   zmake_four_level.<locals>.fourth   s    uQUQYr   r   )r   rF   rL   rE   rI   s    @@@@r   make_four_levelrN      s        	S 	    	S 	    	S 	        	S  Lr   c                     | S r   r   r   s    r   r   r      s    1 r   c                 X    | fd            | fd            | d             S )Nc                 *    | dk    r |           S dS Nr   r   r   r   inners    r   outerzmake_inner_error.<locals>.outer   s     q55588O 1r   c                 B    | dk    r | dz
            S  |           S rR   r   )r   	error_funrU   s    r   rT   zmake_inner_error.<locals>.inner   s.    q555Q<< 9Q<<r   c                     | j         S r   )ndimr   s    r   rW   z#make_inner_error.<locals>.error_fun   s     vr   r   )r   rW   rT   rU   s    @@@r   make_inner_errorrZ      st        	S 	          	S  	  	S Lr   c                     | S r   r   r   s    r   r   r      s    A r   c                 >    | fd            | fd            S )Nc                 *    | dk    r |           S dS rR   r   rS   s    r   rU   z make_raise_mutual.<locals>.outer   s    q55588O1r   c                 Z    | dk    rt          d          | dk    r | dz
            S dS )Nr   raise_mutualr   )r(   )r   rU   s    r   rT   z make_raise_mutual.<locals>.inner   s:    66^,,,UU5Q<<1r   r   )r   rT   rU   s    @@r   make_raise_mutualr`      sS        	S 	    	S Lr   c                     | S r   r   r   s    r   r   r      s    A r   c                 <    | d             | fd            S )Nc                     | dk    r| dz
  S d S )N   r   r   r   s    r   r4   z&make_optional_return_case.<locals>.foo   s    q55q5LFr   c                 N     |           }||S |dk     r|S |  |          z  S )N   r   )r   outr3   r4   s     r   r3   z&make_optional_return_case.<locals>.bar   s:    c!ff;J1WWJss3xx<r   r   r6   s    @@r   make_optional_return_caserh      sN      	S 	          	S  Jr   c                     | S r   r   r   s    r   r   r      r=   r   c                 "    | fd            S )Nc                 4    | dk    rd S |  | dz
            fS rR   r   )r   	make_lists    r   rl   z*make_growing_tuple_case.<locals>.make_list   s*    66499QU##$$r   r   )r   rl   s    @r   make_growing_tuple_caserm      s.    % % % % 	S%
 r   N)__doc__numbar   r   r   r   r    r#   r%   r'   r,   r+   r7   r:   r9   rA   rN   rZ   r`   rh   rm   r   r   r   <module>rp      sk          X' ' '   y{{ *k     d% % % d   d   d      d      ![      d# # # d   !,    , $    0 %    2 &+    ( #.+    * !,      r   