o
    8Î®c%  ã                   @   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   úE/tmp/pip-target-vg8gfxp4/lib/python/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    

	




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