U
    ¿ÿjg%  ã                   @   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-qtpwf23r/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   

	



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