
    J/Ph                         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                   D    e 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          d           d S )N
   7   )assertPreciseEqual)selfcfuncs     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_recursion.py	check_fibzTestSelfRecursion.check_fib   s&    b		2.....    c                 <    ddl m} |                     |           d S )Nr   )fib1)numba.tests.recursion_usecasesr   r   )r   r   s     r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig   ,    777777tr   c                 <    ddl m} |                     |           d S )Nr   )fib2)r   r   r   )r   r   s     r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig   r   r   c                 <    ddl m} |                     |           d S )Nr   )fib3)r   r   r   )r   r   s     r   test_global_implicit_sigz*TestSelfRecursion.test_global_implicit_sig   r   r   c                     ddl m} |                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr   )runaway_self{   #cannot type infer runaway recursion)r   r   assertRaisesr   assertInstr	exception)r   r   raisess      r   test_runawayzTestSelfRecursion.test_runaway   s    ??????{++ 	vL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	;&*++	- 	- 	- 	- 	-   9= =c                     ddl m}  |            } |t          d                    }d}|                      ||  ||            d S )Nr   )make_type_change_selfTnopython   g      ?)r   r)   r   r   )r   r)   pfuncr   argss        r   test_type_changez"TestSelfRecursion.test_type_change"   sj    HHHHHH%%''%%c4&8&8&899teeTl;;;;;r   c                     ddl m} |                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr   )
raise_self   r2   )r   r2   r!   
ValueErrorassertEqualr#   r$   )r   r2   r%   s      r   
test_raisezTestSelfRecursion.test_raise)   s    ======z** 	fJqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V-..=====r'   c                     ddl m}  |            } |t          d                    }dD ]*}|                      ||           ||                     +d S )Nr   )make_optional_return_caseTr*   )r      r
      )r   r8   r   r5   )r   r8   r.   r   args        r   test_optional_returnz&TestSelfRecursion.test_optional_return0   s    LLLLLL))++))#t*<*<*<==! 	5 	5CUU3ZZs4444	5 	5r   c                    ddl m}  |t          d                    }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr   )make_growing_tuple_caseTr*   d   z3Return type of recursive function does not converge)r   r>   r   r!   r   r"   r#   r$   )r   r>   r   r%   s       r   test_growing_return_tuplez+TestSelfRecursion.test_growing_return_tuple7   s    JJJJJJ''T(:(:(:;;{++ 	vE#JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	A !!	
 	
 	
 	
 	
s   AAAN)__name__
__module____qualname__r   r   r   r   r&   r0   r6   r<   r@    r   r   r   r   
   s        / / /      - - -< < <> > >5 5 5
 
 
 
 
r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestMutualRecursionc                 x    ddl m} t          j        d          }|                      |d          |           d S )Nr   )	outer_facr
   )r   rH   math	factorialr   )r   rH   expects      r   test_mutual_1z!TestMutualRecursion.test_mutual_1D   sG    <<<<<<##		"v66666r   c                    ddl m}  |            \  }} |t          d                    \  }}dD ]X}|                      ||           ||                     |                      ||d           ||d                     Yd S )	Nr   )make_mutual2Tr*   )r      r3   )xrP   )yz)r   rN   r   r   )r   rN   pfoopbarcfoocbarrQ   s          r   test_mutual_2z!TestMutualRecursion.test_mutual_2I   s    ??????!\^^
d!\#t"4"4"455
d 	D 	DA##DD1IIIttayyy999##DD1NNNDD1NNNCCCC	D 	Dr   c                     ddl m} |                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr   )runaway_mutualr   r    )r   rZ   r!   r   r"   r#   r$   )r   rZ   r%   s      r   r&   z TestMutualRecursion.test_runawayQ   s    AAAAAA{++ 	 vN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ;&*++	- 	- 	- 	- 	-r'   c                     ddl m}  |            } |t          d                    }d}|                      ||  ||            d S )Nr   )make_type_change_mutualTr*   r,   )r   r\   r   r   )r   r\   r.   r   r/   s        r   r0   z$TestMutualRecursion.test_type_changeX   sj    JJJJJJ''))''T(:(:(:;;teeTl;;;;;r   c                     ddl m}  |            } |t          d                    }d}|                      ||           ||                     d S )Nr   )make_four_levelTr*      )r   r^   r   r   )r   r^   r.   r   r;   s        r   test_four_levelz#TestMutualRecursion.test_four_level_   sl    BBBBBB!!T 2 2 233c

EE#JJ77777r   c                 8   ddl m}  |t          d                    }|                     t                    5 } |d           d d d            n# 1 swxY w Y   d}|                     |t          |j                              |t          d                    } |            }t          j	                    5  t          j
        dt          	            |d
          }d d d            n# 1 swxY w Y   |                     | |d
                     d S )Nr   )make_inner_errorTr*      zUnknown attribute 'ndim')forceobjignore)category   )r   rb   r   r!   r   r"   r#   r$   warningscatch_warningsfilterwarningsr   r5   )r   rb   r   r%   errmsgr.   gots          r   test_inner_errorz$TestMutualRecursion.test_inner_errorf   s   CCCCCC  d!3!3!344{++ 	vE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	-fc&"233444 ! d!3!3!344  ""$&& 	 	#H|DDDD%((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	eeAhh'''''s#   AAA='C00C47C4c                     ddl m}  |            }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr   )make_raise_mutualrc   raise_mutual)r   ro   r!   r4   r5   r#   r$   )r   ro   r   r%   s       r   r6   zTestMutualRecursion.test_raisew   s    DDDDDD!!##z** 	fE!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V-..?????s   AA
AN)
rA   rB   rC   rL   rX   r&   r0   r`   rm   r6   rD   r   r   rF   rF   B   s        7 7 7
D D D- - -< < <8 8 8( ( ("@ @ @ @ @r   rF   __main__)rI   rh   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   rF   rA   mainrD   r   r   <module>rw      s            7 7 7 7 7 7 7 7 ( ( ( ( ( ( 5
 5
 5
 5
 5
 5
 5
 5
p;@ ;@ ;@ ;@ ;@( ;@ ;@ ;@| zHMOOOOO r   