§
    ƒÛg!  ã                   ó¬   — 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     úP/granary/edev/quantum/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   ó   € Ø�Š�t”x”}Ñ%Ô%Ð%Ð%Ð%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ˆØ”×.Ò.­s¸DÐ/AÑ/AÔ/AÑBÔBˆØˆØ×Ò   t ¨e¨e°T¨lÑ;Ô;Ð;Ð;Ð;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Ò2µ3ÀÐ3EÑ3EÔ3EÑFÔFˆØ!ð 	5ð 	5ˆCØ×Ò˜U˜U 3™ZœZ¨¨¨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µ¸dÐ1CÑ1CÔ1CÑDÔDˆØ×Ò�{Ñ+Ô+ð 	¨vØˆE�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�ŠØ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Ò 2°2Ñ 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Ø×#Ò# D D¨1 I¡I¤I¨t¨t°a¨y©y¬yÑ9Ô9Ð9Ø×#Ò# D D¨1° N¡N¤N°D°D¸1À°N±N´NÑ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µ¸dÐ1CÑ1CÔ1CÑDÔDˆØˆØ×Ò   t ¨e¨e°T¨lÑ;Ô;Ð;Ð;Ð;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¡
¤
¨E¨E°#©J¬JÑ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�!‰HŒHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à-ˆØ�Š�f�c &Ô"2Ñ3Ô3Ñ4Ô4Ð4ð ”×)Ò)­#Ñ.Ô.ˆØ”×)Ò)Ñ+Ô+ˆÝÔ$Ñ&Ô&ð 	ð 	ÝÔ# Hµ|ÐDÑDÔDÐDØ�%˜‘(”(ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜e˜e A™hœhÑ'Ô'Ð'Ð'Ð'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�!‰HŒHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò�˜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ÒÐØ€H„M�O„O€O€O€Oð Ðr   