
    wg                         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                          yy)
    N)jit)TypingErrorNumbaWarning)TestCasec                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestSelfRecursionc                 4    | j                   |d      d       y )N
   7   )assertPreciseEqual)selfcfuncs     _/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/tests/test_recursion.py	check_fibzTestSelfRecursion.check_fib   s    b	2.    c                 2    ddl m} | j                  |       y )Nr   )fib1)numba.tests.recursion_usecasesr   r   )r   r   s     r   test_global_explicit_sigz*TestSelfRecursion.test_global_explicit_sig       7tr   c                 2    ddl m} | j                  |       y )Nr   )fib2)r   r   r   )r   r   s     r   test_inner_explicit_sigz)TestSelfRecursion.test_inner_explicit_sig   r   r   c                 2    ddl m} | j                  |       y )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} | j                  t              5 } |d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr   )runaway_self{   #cannot type infer runaway recursion)r   r   assertRaisesr   assertInstr	exception)r   r   raisess      r   test_runawayzTestSelfRecursion.test_runaway   sO    ?{+ 	v	;&**+	-	 	   	AAc                 v    ddl m}  |       } |t        d            }d}| j                   ||  ||        y )Nr   )make_type_change_selfTnopython   g      ?)r   r)   r   r   )r   r)   pfuncr   argss        r   test_type_changez"TestSelfRecursion.test_type_change"   s9    H%'%c4&89teTl;r   c                     ddl m} | j                  t              5 } |d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr   )
raise_self   r2   )r   r2   r!   
ValueErrorassertEqualr#   r$   )r   r2   r%   s      r   
test_raisezTestSelfRecursion.test_raise)   sN    =z* 	fqM	 	V--.=	 	r'   c                     ddl m}  |       } |t        d            }dD ]   }| j                   ||       ||             " y )Nr   )make_optional_return_caseTr*   )r      r
      )r   r8   r   r5   )r   r8   r.   r   args        r   test_optional_returnz&TestSelfRecursion.test_optional_return0   sC    L)+)#t*<=! 	5CU3Zs4	5r   c                     ddl m}  |t        d            }| j                  t              5 } |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)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'T(:;{+ 	v#J	A  !	
	 	s   	A%%A.N)__name__
__module____qualname__r   r   r   r   r&   r0   r6   r<   r@    r   r   r   r   
   s/    /-<>5
r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestMutualRecursionc                 j    ddl m} t        j                  d      }| j	                   |d      |       y )Nr   )	outer_facr
   )r   rH   math	factorialr   )r   rH   expects      r   test_mutual_1z!TestMutualRecursion.test_mutual_1D   s'    <#	"v6r   c                     ddl m}  |       \  }} |t        d            \  }}dD ]D  }| j                   ||       ||             | j                   ||d       ||d             F y )	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   sh    ?!^
d!#t"45
d 	DA##D1Itay9##D1ND1NC	Dr   c                     ddl m} | j                  t              5 } |d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr   )runaway_mutualr   r    )r   rZ   r!   r   r"   r#   r$   )r   rZ   r%   s      r   r&   z TestMutualRecursion.test_runawayQ   sO    A{+ 	 v3	 ;&**+	-	  	 r'   c                 v    ddl m}  |       } |t        d            }d}| j                   ||  ||        y )Nr   )make_type_change_mutualTr*   r,   )r   r\   r   r   )r   r\   r.   r   r/   s        r   r0   z$TestMutualRecursion.test_type_changeX   s9    J')'T(:;teTl;r   c                     ddl m}  |       } |t        d            }d}| j                   ||       ||             y )Nr   )make_four_levelTr*      )r   r^   r   r   )r   r^   r.   r   r;   s        r   test_four_levelz#TestMutualRecursion.test_four_level_   s9    B!T 23c
E#J7r   c                    ddl m}  |t        d            }| j                  t              5 } |d       d d d        d}| j                  |t        j                                |t        d            } |       }t        j                         5  t        j                  dt        	        |d
      }d d d        | j                   |d
             y # 1 sw Y   xY w# 1 sw Y   .xY w)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 d!34{+ 	v!H	-fc&"2"234 !d!34 "$$& 	##H|D(C	 	eAh'	 		 	s   	C$C$C!$C-c                     ddl m}  |       }| j                  t              5 } |d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr   )make_raise_mutualrc   raise_mutual)r   ro   r!   r4   r5   r#   r$   )r   ro   r   r%   s       r   r6   zTestMutualRecursion.test_raisew   sV    D!#z* 	f!H	 	V--.?	 	s   	AA#N)
rA   rB   rC   rL   rX   r&   r0   r`   rm   r6   rD   r   r   rF   rF   B   s'    7
D-<8("@r   rF   __main__)rI   rh   numbar   numba.core.errorsr   r   numba.tests.supportr   unittestr   rF   rA   mainrD   r   r   <module>rw      sM       7 ( 5
 5
p;@( ;@| zHMMO r   