o
    Ίi%  γ                   @   s4  d Z ddlmZ eddddd Zdd	 Ze Zd
d fddZedddd Zedddd Zedddd Z	edddd Z
edddd Zdd fddZedddd Zedddd Zdd fd d!Zd"d fd#d$Zd%d fd&d'Zd(d fd)d*Zd+d fd,d-Zd.d fd/d0Zd1S )2zh
Usecases of recursive functions.

Some functions are compiled at import time, hence a separate module.
ι    ©Ϊjitϊi8(i8)T©Ϊnopythonc                 C   s&   | dk r| S t | d t | d d S ©Nι   ι   ©Ϊn)Ϊfib1r
   © r   ϊ[/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/tests/recursion_usecases.pyr   
   s   r   c                      s   t ddd fdd  S )Nr   Tr   c                    s&   | dk r| S  | d  | d d S r   r   r
   ©Ϊfib2r   r   r      s   zmake_fib2.<locals>.fib2r   r   r   r   r   Ϊ	make_fib2   s   
r   c                 C   σ   | S ©Nr   ©Ϊxr   r   r   Ϊ<lambda>   σ    r   c                    σ   |  fdd  S )Nc                    σ&   | dkr|dkr|  | | | S |S ©Nr	   r   r   ©r   Ϊy©Ϊtype_change_selfr   r   r      σ   z/make_type_change_self.<locals>.type_change_selfr   r   r   r   r   Ϊmake_type_change_self   s   r    c                 C   s$   | dk r| S t | d t | d  S ©Nr   r	   )Ϊfib3r
   r   r   r   r"   )   s   r"   c                 C   σ   t | S r   )Ϊrunaway_selfr   r   r   r   r$   1   σ   r$   c                 C   s(   | dkrt d| dkrt| d S dS )Nr	   Ϊ
raise_selfr   )Ϊ
ValueErrorr&   r   r   r   r   r&   6   σ
   r&   c                 C   σ   | dk rdS | t | d  S ©Nr	   )Ϊ	inner_facr
   r   r   r   Ϊ	outer_facA   σ   r,   c                 C   r)   r*   )r,   r
   r   r   r   r+   H   r-   r+   c                 C   r   r   r   r   r   r   r   r   P   r   c                    s(   |  fdd| fdd  fS )Nc                    s    | dkrd d| d S d|  S )Nr   r   r	   )Ϊzr   r   r   ©Ϊbarr   r   ΪfooQ   s   zmake_mutual2.<locals>.fooc                    s    | | dS )Nr   r   )r   r.   ©r1   r   r   r0   W   s   zmake_mutual2.<locals>.barr   r   r   ©r0   r1   r   Ϊmake_mutual2P   s
   r4   c                 C   r#   r   )Ϊrunaway_mutual_innerr   r   r   r   Ϊrunaway_mutual`   r%   r6   c                 C   r#   r   )r6   r   r   r   r   r5   e   r%   r5   c                 C   r   r   r   r   r   r   r   r   l   r   c                    σ$   |  fdd| fdd S )Nc                    r   r   r   r   r/   r   r   r1   m   s   z$make_type_change_mutual.<locals>.fooc                    r   r   r   r   r2   r   r   r0   w   r   z$make_type_change_mutual.<locals>.barr   r   r   r3   r   Ϊmake_type_change_mutuall   s
   	r8   c                 C   r   r   r   r   r   r   r   r      r   c                    sD   | fdd | fdd| fdd|  fdd S )	Nc                    s   | dkr
 | d S dS )Nr   r   r	   r   r   )Ϊsecondr   r   Ϊfirst   s   zmake_four_level.<locals>.firstc                    σ    | d S )Nι   r   r   )Ϊthirdr   r   r9      σ   zmake_four_level.<locals>.secondc                    r;   )Nι   r   r   )Ϊfourthr   r   r=      r>   zmake_four_level.<locals>.thirdc                    s    | d d S r!   r   r   )r:   r   r   r@      s   zmake_four_level.<locals>.fourthr   r   r   )r:   r@   r9   r=   r   Ϊmake_four_level   s   rA   c                 C   r   r   r   r   r   r   r   r      r   c                    s2   | fdd|  fdd| dd  S )Nc                    σ   | dkr | S dS ©Nr   r	   r   r   ©Ϊinnerr   r   Ϊouter   s   zmake_inner_error.<locals>.outerc                    s   | dkr
| d S  | S rC   r   r   )Ϊ	error_funrF   r   r   rE   £   s   zmake_inner_error.<locals>.innerc                 S   s   | j S r   )Ϊndimr   r   r   r   rG   «   s   z#make_inner_error.<locals>.error_funr   r   r   )rG   rE   rF   r   Ϊmake_inner_error   s   
rI   c                 C   r   r   r   r   r   r   r   r   ³   r   c                    r7   )Nc                    rB   rC   r   r   rD   r   r   rF   ΄   σ   z make_raise_mutual.<locals>.outerc                    s(   | dkrt d| dkr | d S dS )Nr	   Ϊraise_mutualr   )r'   r   )rF   r   r   rE   »   r(   z make_raise_mutual.<locals>.innerr   r   r   )rE   rF   r   Ϊmake_raise_mutual³   s
   rL   c                 C   r   r   r   r   r   r   r   r   Η   r   c                    s"   | dd |  fdd  S )Nc                 S   s   | dkr| d S d S )Nι   r	   r   r   r   r   r   r1   Θ   rJ   z&make_optional_return_case.<locals>.fooc                    s,   | }|d u r
|S |dk r|S |  | S )Nι   r   )r   Ϊoutr3   r   r   r0   Ο   s   z&make_optional_return_case.<locals>.barr   r   r   r3   r   Ϊmake_optional_return_caseΗ   s
   
	rP   c                 C   r   r   r   r   r   r   r   r   ά   r   c                    r   )Nc                    s   | dkrd S |  | d fS rC   r   r
   ©Ϊ	make_listr   r   rR   ή   s   z*make_growing_tuple_case.<locals>.make_listr   r   r   rQ   r   Ϊmake_growing_tuple_caseά   s   rS   N)Ϊ__doc__Ϊnumbar   r   r   r   r    r"   r$   r&   r,   r+   r4   r6   r5   r8   rA   rI   rL   rP   rS   r   r   r   r   Ϊ<module>   s8    

	







