
    ܙd!                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	Z	 G d de          Z
 G d de          Zed	k    r e	j                     dS dS )
    N)jit)TypingErrorNumbaWarning)TestCasec                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestSelfRecursionc                      ddl m} || _        d S Nr   )recursion_usecasesnumba.testsr   modselfr   s     :lib/python3.11/site-packages/numba/tests/test_recursion.pysetUpzTestSelfRecursion.setUp   s!     	322222%    c                 D    |                       |d          d           d S )N
   7   )assertPreciseEqual)r   cfuncs     r   	check_fibzTestSelfRecursion.check_fib   s&    b		2.....r   c                 D    |                      | j        j                   d S N)r   r   fib1r   s    r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig       tx}%%%%%r   c                 D    |                      | j        j                   d S r   )r   r   fib2r   s    r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig   r   r   c                 D    |                      | j        j                   d S r   )r   r   fib3r   s    r   test_global_implicit_sigz*TestSelfRecursion.test_global_implicit_sig   r   r   c                     |                      t                    5 }| j                            d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S N{   z#cannot type infer runaway recursion)assertRaisesr   r   runaway_selfassertInstr	exceptionr   raisess     r   test_runawayzTestSelfRecursion.test_runaway   s    {++ 	'vH!!#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	';&*++	- 	- 	- 	- 	-   AA	Ac                     | j                                         }| j                             t          d                    }d}|                      ||  ||            d S NTnopython)   g      ?)r   make_type_change_selfr   r   r   pfuncr   argss       r   test_type_changez"TestSelfRecursion.test_type_change$   sb    ..00..sD/A/A/ABBteeTl;;;;;r   c                     |                      t                    5 }| j                            d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )N   
raise_self)r)   
ValueErrorr   r>   assertEqualr,   r-   r.   s     r   
test_raisezTestSelfRecursion.test_raise*   s    z** 	#fH"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	V-..=====r1   c                     | j                                         }| j                             t          d                    }dD ]*}|                      ||           ||                     +d S )NTr4   )r      r      )r   make_optional_return_caser   r@   r   r9   r   args       r   test_optional_returnz&TestSelfRecursion.test_optional_return0   sw    22442233E3E3EFF! 	5 	5CUU3ZZs4444	5 	5r   c                     | j                             t          d                    }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NTr4   d   z3Return type of recursive function does not converge)r   make_growing_tuple_caser   r)   r   r+   r,   r-   r   r   r/   s      r   test_growing_return_tuplez+TestSelfRecursion.test_growing_return_tuple6   s    00d1C1C1CDD{++ 	vE#JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	A !!	
 	
 	
 	
 	
s   AA"AN)__name__
__module____qualname__r   r   r   r"   r%   r0   r;   rA   rH   rM    r   r   r   r   
   s        & & &/ / /& & && & && & &- - -< < <> > >5 5 5
 
 
 
 
r   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestMutualRecursionc                      ddl m} || _        d S r
   r   r   s     r   r   zTestMutualRecursion.setUpB   s    222222%r   c                     t          j        d          }|                     | j                            d          |           d S )Nr   )math	factorialr   r   	outer_fac)r   expects     r   test_mutual_1z!TestMutualRecursion.test_mutual_1F   s=    ## 2 22 6 6?????r   c                 J   | j                                         \  }}| j                             t          d                    \  }}dD ]X}|                      ||           ||                     |                      ||d           ||d                     Yd S )NTr4   )r      r=   )xr]   )yz)r   make_mutual2r   r   )r   pfoopbarcfoocbarr^   s         r   test_mutual_2z!TestMutualRecursion.test_mutual_2J   s    X**,,
dX**3+=+=+=>>
d 	D 	DA##DD1IIIttayyy999##DD1NNNDD1NNNCCCC	D 	Dr   c                     |                      t                    5 }| j                            d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S r'   )r)   r   r   runaway_mutualr+   r,   r-   r.   s     r   r0   z TestMutualRecursion.test_runawayQ   s    {++ 	)vH##C(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	);&*++	- 	- 	- 	- 	-r1   c                     | j                                         }| j                             t          d                    }d}|                      ||  ||            d S r3   )r   make_type_change_mutualr   r   r8   s       r   r;   z$TestMutualRecursion.test_type_changeW   sb    002200d1C1C1CDDteeTl;;;;;r   c                     | j                                         }| j                             t          d                    }d}|                      ||           ||                     d S )NTr4      )r   make_four_levelr   r   rF   s       r   test_four_levelz#TestMutualRecursion.test_four_level]   sf    ((**((d);););<<c

EE#JJ77777r   c                 t   | j                             t          d                    }|                     t                    5 } |d           d d d            n# 1 swxY w Y   d}|                     |t          |j                             | j                             t                    }| j                                         }t          j	                    5  t          j
        dt                      |d          }d d d            n# 1 swxY w Y   |                     | |d                     d S )NTr4      zUnknown attribute 'ndim'ignore)category   )r   make_inner_errorr   r)   r   r+   r,   r-   warningscatch_warningsfilterwarningsr   r@   )r   r   r/   errmsgr9   gots         r   test_inner_errorz$TestMutualRecursion.test_inner_errorc   s   ))#t*<*<*<=={++ 	vE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	-fc&"233444 ))#..))++$&& 	 	#H|DDDD%((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	eeAhh'''''s$   AA"A'DDDc                    | j                                         }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nrp   raise_mutual)r   make_raise_mutualr)   r?   r@   r,   r-   rL   s      r   rA   zTestMutualRecursion.test_raises   s    **,,z** 	fE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V-..?????s   AAAN)rN   rO   rP   r   rZ   rf   r0   r;   rn   rz   rA   rQ   r   r   rS   rS   @   s        & & &@ @ @D D D- - -< < <8 8 8( ( ( @ @ @ @ @r   rS   __main__)rV   ru   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   rS   rN   mainrQ   r   r   <module>r      s            7 7 7 7 7 7 7 7 ( ( ( ( ( ( 3
 3
 3
 3
 3
 3
 3
 3
l8@ 8@ 8@ 8@ 8@( 8@ 8@ 8@v zHMOOOOO r   