U
    ,d%  γ                   @   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©Znopythonc                 C   s&   | dk r| S t | d t | d d S ©Nι   ι   ©Ϊn)Ϊfib1r	   © r   ϊB/tmp/pip-unpacked-wheel-eu7e0c37/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   | S ©Nr   ©Ϊxr   r   r   Ϊ<lambda>   σ    r   c                    s   |  fdd  S )Nc                    s*   | dkr"|dkr"|  | | | S |S d S ©Nr   r   r   ©r   Ϊy©Ϊtype_change_selfr   r   r      s    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   s   t | S r   )Ϊrunaway_selfr   r   r   r   r   1   s    r   c                 C   s.   | dkrt dn| dkr&t| d S dS d S )Nr   Ϊ
raise_selfr   )Ϊ
ValueErrorr   r   r   r   r   r   6   s
    
r   c                 C   s   | dk rdS | t | d  S ©Nr   )Ϊ	inner_facr	   r   r   r   Ϊ	outer_facA   s    r#   c                 C   s   | dk rdS | t | d  S r!   )r#   r	   r   r   r   r"   H   s    r"   c                 C   s   | S 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$   ©r'   r   r   r&   W   s    zmake_mutual2.<locals>.barr   r   r   ©r&   r'   r   Ϊmake_mutual2P   s
    r*   c                 C   s   t | S r   )Ϊrunaway_mutual_innerr   r   r   r   Ϊrunaway_mutual`   s    r,   c                 C   s   t | S r   )r,   r   r   r   r   r+   e   s    r+   c                 C   s   | S r   r   r   r   r   r   r   l   r   c                    s$   |  fdd| fdd S )Nc                    s*   | dkr"|dkr"|  | | | S |S d S r   r   r   r%   r   r   r'   m   s    z$make_type_change_mutual.<locals>.fooc                    s*   | dkr"|dkr"|  | | | S |S d S r   r   r   r(   r   r   r&   w   s    z$make_type_change_mutual.<locals>.barr   r   r   r)   r   Ϊmake_type_change_mutuall   s
    	r-   c                 C   s   | S 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 d S )Nr   r   r   r   r   )Ϊsecondr   r   Ϊfirst   s    zmake_four_level.<locals>.firstc                    s    | d S )Nι   r   r   )Ϊthirdr   r   r.      s    zmake_four_level.<locals>.secondc                    s    | d S )Nι   r   r   )Ϊfourthr   r   r1      s    zmake_four_level.<locals>.thirdc                    s    | d d S r   r   r   )r/   r   r   r3      s    zmake_four_level.<locals>.fourthr   r   r   )r/   r3   r.   r1   r   Ϊmake_four_level   s    r4   c                 C   s   | S r   r   r   r   r   r   r      r   c                    s2   | fdd|  fdd| dd  S )Nc                    s   | dkr | S dS d S ©Nr   r   r   r   ©Ϊinnerr   r   Ϊouter   s    zmake_inner_error.<locals>.outerc                    s    | dkr| d S  | S d S r5   r   r   )Ϊ	error_funr8   r   r   r7   £   s    zmake_inner_error.<locals>.innerc                 S   s   | j S r   )Ϊndimr   r   r   r   r9   «   s    z#make_inner_error.<locals>.error_funr   r   r   )r9   r7   r8   r   Ϊmake_inner_error   s    
r;   c                 C   s   | S r   r   r   r   r   r   r   ³   r   c                    s$   |  fdd| fdd S )Nc                    s   | dkr | S dS d S r5   r   r   r6   r   r   r8   ΄   s    z make_raise_mutual.<locals>.outerc                    s.   | dkrt dn| dkr& | d S dS d S )Nr   Zraise_mutualr   )r    r   )r8   r   r   r7   »   s
    
z make_raise_mutual.<locals>.innerr   r   r   )r7   r8   r   Ϊmake_raise_mutual³   s
    r<   c                 C   s   | S 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 d S )Nι   r   r   r   r   r   r   r'   Θ   s    z&make_optional_return_case.<locals>.fooc                    s0   | }|d kr|S |dk r |S |  | S d S )Nι   r   )r   Ϊoutr)   r   r   r&   Ο   s    z&make_optional_return_case.<locals>.barr   r   r   r)   r   Ϊmake_optional_return_caseΗ   s
    
	r@   c                 C   s   | S r   r   r   r   r   r   r   ά   r   c                    s   |  fdd  S )Nc                    s   | dkrd S |  | d fS r5   r   r	   ©Ϊ	make_listr   r   rB   ή   s    z*make_growing_tuple_case.<locals>.make_listr   r   r   rA   r   Ϊmake_growing_tuple_caseά   s    rC   N)Ϊ__doc__Znumbar   r   r   r   r   r   r   r   r#   r"   r*   r,   r+   r-   r4   r;   r<   r@   rC   r   r   r   r   Ϊ<module>   s6   

	



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