§
    2@Äj{  ã                   ó¬   — 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     úKC:\Projects\Historical\venv\Lib\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Ø%Ð%Ñ'Ô'ˆØ%Ð%¥c°4Ð&8Ñ&8Ô&8Ñ9Ô9ˆØˆØ×Ò   t ¨e¨e°T¨lÑ;Ô;Ð;Ð;Ð;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ØˆJ�q‰MŒMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò�˜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ð 	5ˆCØ×Ò˜U˜U 3™ZœZ¨¨¨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�#‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�ŠØ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Ø×#Ò# 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                 óÜ   — 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ØˆN˜3ÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à�ŠÐ;Ý˜&Ô*Ñ+Ô+ñ	-ô 	-ð 	-ð 	-ð 	-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 ¨e¨e°T¨lÑ;Ô;Ð;Ð;Ð;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¡
¤
¨E¨E°#©J¬JÑ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�!‰HŒHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à-ˆØ�Š�f�c &Ô"2Ñ3Ô3Ñ4Ô4Ð4ð !Ð ¥¨dÐ!3Ñ!3Ô!3Ñ4Ô4ˆØ Ð Ñ"Ô"ˆÝÔ$Ñ&Ô&ð 	ð 	ÝÔ# Hµ|ÐDÑDÔDÐDØ�%˜‘(”(ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜˜e˜e A™hœhÑ'Ô'Ð'Ð'Ð'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�!‰HŒHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò�˜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ÒÐØ€H„M�O„O€O€O€Oð Ðr   