
    sh%                     Z   S r SSKJr  \" SSS9S 5       rS r\" 5       rS 4S	 jr\" SS9S
 5       r\" SS9S 5       r\" SS9S 5       r	\" SS9S 5       r
\" SS9S 5       rS 4S jr\" SS9S 5       r\" SS9S 5       rS 4S jrS 4S jrS 4S jrS 4S jrS 4S jrS 4S jrg) zh
Usecases of recursive functions.

Some functions are compiled at import time, hence a separate module.
    jiti8(i8)Tnopythonc                 H    U S:  a  U $ [        U S-
  5      [        U S-
  S9-   $ N      n)fib1r   s    r/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/recursion_usecases.pyr   r   
   s)    1uA;A&&    c                  .   ^  [        SSS9U 4S j5       m T $ )Nr   Tr   c                 >   > U S:  a  U $ T" U S-
  5      T" U S-
  S9-   $ r	    )r   fib2s    r   r   make_fib2.<locals>.fib2   s*    q5HAE{TAE]**r   r   )r   s   @r   	make_fib2r      s#    D!+ "+
 Kr   c                     U $ Nr   xs    r   <lambda>r      s    r   c                    ^ U U4S j5       mT$ )Nc                 <   > U S:  a  US:  a  U T" X-
  U5      -   $ U$ Nr   r   r   )r   ytype_change_selfs     r   r    /make_type_change_self.<locals>.type_change_self   s*    q5QU'q111Hr   r   )r   r    s    @r   make_type_change_selfr"      s     	
 r   c                 L    U S:  a  U $ [        U S-
  5      [        U S-
  5      -   $ Nr
   r   )fib3r   s    r   r%   r%   )   s)    1uA;a!e$$r   c                     [        U 5      $ r   )runaway_selfr   s    r   r'   r'   1   s    ?r   c                 N    U S:X  a  [        S5      eU S:  a  [        U S-
  5      $ g)Nr   
raise_selfr   )
ValueErrorr)   r   s    r   r)   r)   6   s-    Av&&	
Q!a%  r   c                 2    U S:  a  gU [        U S-
  5      -  $ Nr   )	inner_facr   s    r   	outer_facr.   A        1uyQr   c                 2    U S:  a  gU [        U S-
  5      -  $ r,   )r.   r   s    r   r-   r-   H   r/   r   c                     U $ r   r   r   s    r   r   r   P   s    qr   c                 :   ^^ U U4S j5       mU U4S j5       mTT4$ )Nc                 .   > U S:  a
  ST" SU S9-  $ SU -   $ )Nr   r
   r   )zr   r   )r   bars    r   foomake_mutual2.<locals>.fooQ   s$    q5sQ!}$$1ur   c                    > T" X-
  S9$ )Nr   r   )r   r4   r6   s     r   r5   make_mutual2.<locals>.barW   s    QU|r   r   r   r5   r6   s    @@r   make_mutual2r;   P   s4     	
 	 	 8Or   c                     [        U 5      $ r   )runaway_mutual_innerr   s    r   runaway_mutualr>   `   s    ""r   c                     [        U 5      $ r   )r>   r   s    r   r=   r=   e   s    !r   c                     U $ r   r   r   s    r   r   r   l       !r   c                 6   ^^ U U4S j5       mU U4S j5       mT$ )Nc                 <   > U S:  a  US:  a  U T" X-
  U5      -   $ U$ r   r   )r   r   r5   s     r   r6   $make_type_change_mutual.<locals>.foom   s*    q5QU s15!}$$Hr   c                 <   > U S:  a  US:  a  U T" X-
  U5      -   $ U$ r   r   )r   r   r6   s     r   r5   $make_type_change_mutual.<locals>.barw   s(    q5QUs15!}$$Hr   r   r:   s    @@r   make_type_change_mutualrG   l   s0     	 	 	 Jr   c                     U $ r   r   r   s    r   r   r      s    !r   c                 f   ^^^^ U U4S j5       mU U4S j5       mU U4S j5       mU U4S j5       mT$ )Nc                 (   > U S:  a  T" U 5      S-  $ g)Nr   r
   r   r   )r   seconds    r   firstmake_four_level.<locals>.first   s     q5!9q= r   c                    > T" U 5      S-  $ )N   r   )r   thirds    r   rK   make_four_level.<locals>.second   s    Qx!|r   c                    > T" U 5      S-  $ )N   r   )r   fourths    r   rP   make_four_level.<locals>.third   s    ay1}r   c                     > T" U S-  S-
  5      $ r$   r   )r   rL   s    r   rT   make_four_level.<locals>.fourth   s    QUQYr   r   )r   rL   rT   rK   rP   s    @@@@r   make_four_levelrX      sX     	 	 	 	 	 	  	  Lr   c                     U $ r   r   r   s    r   r   r      s    1r   c                 J   ^^^ U U4S j5       mU UU4S j5       mU S 5       mT$ )Nc                 "   > U S:  a  T" U 5      $ gNr   r   r   r   inners    r   outermake_inner_error.<locals>.outer   s    q58O r   c                 6   > U S:  a  T" U S-
  5      $ T" U 5      $ r\   r   )r   	error_funr_   s    r   r^   make_inner_error.<locals>.inner   s$    q5Q< Q<r   c                     U R                   $ r   )ndimr   s    r   rb   #make_inner_error.<locals>.error_fun   s     vvr   r   )r   rb   r^   r_   s    @@@r   make_inner_errorrg      sD     	 	  	  	 	 Lr   c                     U $ r   r   r   s    r   r   r      s    Ar   c                 6   ^^ U U4S j5       mU U4S j5       mT$ )Nc                 "   > U S:  a  T" U 5      $ gr\   r   r]   s    r   r_    make_raise_mutual.<locals>.outer   s    q58Or   c                 J   > U S:X  a  [        S5      eU S:  a  T" U S-
  5      $ g)Nr   raise_mutualr   )r*   )r   r_   s    r   r^    make_raise_mutual.<locals>.inner   s-    6^,,UQ<r   r   )r   r^   r_   s    @@r   make_raise_mutualro      s0     	 	 	 Lr   c                     U $ r   r   r   s    r   r   r      s    Ar   c                 2   ^^ U S 5       mU UU4S j5       mT$ )Nc                     U S:  a  U S-
  $ g )N   r   r   r   s    r   r6   &make_optional_return_case.<locals>.foo   s    q5q5Lr   c                 D   > T" U 5      nUc  U$ US:  a  U$ U T" U5      -  $ )N   r   )r   outr5   r6   s     r   r5   &make_optional_return_case.<locals>.bar   s0    !f;J1WJs3x<r   r   r:   s    @@r   make_optional_return_casery      s0     	 	  	  Jr   c                     U $ r   r   r   s    r   r   r      rA   r   c                    ^ U U4S j5       mT$ )Nc                 ,   > U S::  a  g U T" U S-
  5      4$ r\   r   )r   	make_lists    r   r}   *make_growing_tuple_case.<locals>.make_list   s!    69QU#$$r   r   )r   r}   s    @r   make_growing_tuple_caser      s    % 	%
 r   N)__doc__numbar   r   r   r   r"   r%   r'   r)   r.   r-   r;   r>   r=   rG   rX   rg   ro   ry   r   r   r   r   <module>r      s7    X' ' { *  d% % d  d  d    d    !   d# # d  !, , $ 0 % 2 & ( #. * !, r   