§
    ƒÛg9  ã                   óˆ   — d dl mZ d dlmZ d dlmZmZ d dlZd dl	Z	 G d„ de¦  «        Z
edk    r e	j        ¦   «          dS dS )é    )Úcuda)ÚTypingError)ÚCUDATestCaseÚskip_on_cudasimNc                   ó
  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z ed¦  «        d„ ¦   «         Z	 e
j        d¦  «        d	„ ¦   «         Ze
j        d
„ ¦   «         Z e
j        d¦  «        d„ ¦   «         Z ed¦  «        d„ ¦   «         Zˆ xZS )ÚTestSelfRecursionc                 ób   •— ddl m} || _        t          ¦   «                              ¦   «          d S )Nr   )Úrecursion_usecases)Únumba.cuda.tests.cudapyr
   ÚmodÚsuperÚsetUp)Úselfr
   Ú	__class__s     €ú\/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_recursion.pyr   zTestSelfRecursion.setUp
   s3   ø€ ð 	?Ð>Ð>Ð>Ð>Ð>Ø%ˆŒÝ‰Œ�Š‰Œˆˆˆó    c                 ó  ‡— t           j        ˆfd„¦   «         }t          j        dgt          j        ¬¦  «        }t          j        |¦  «        } |d         ||¦  «         |d         }d}|                      ||¦  «         d S )Nc                 ó0   •—  ‰|d         ¦  «        | d<   d S ©Nr   © )ÚrÚxÚcfuncs     €r   Úkernelz+TestSelfRecursion.check_fib.<locals>.kernel   s   ø€ à�5˜˜1œ‘;”;ˆAˆa‰DˆDˆDr   é
   ©Údtype©é   r   r   é7   )r   ÚjitÚnpÚasarrayÚint64Ú
zeros_likeÚassertPreciseEqual)r   r   r   r   r   ÚactualÚexpecteds    `     r   Ú	check_fibzTestSelfRecursion.check_fib   s‘   ø€ Ý	Œð	ð 	ð 	ð 	ñ 
Œð	õ ŒJ˜�t¥2¤8Ð,Ñ,Ô,ˆÝŒM˜!ÑÔˆØˆˆtŒ�Q˜ÑÔÐà�1”ˆØˆØ×Ò ¨Ñ1Ô1Ð1Ð1Ð1r   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   zSimulator does not compilec                 ó  ‡— |                       t          ¦  «        5 }| j        j        Št	          j        d¦  «        ˆfd„¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )Núvoid()c                  ó   •—  ‰ d¦  «         d S )Nr   r   ©r   s   €r   r   z.TestSelfRecursion.test_runaway.<locals>.kernel,   s   ø€ à��a‘”���r   z#cannot type infer runaway recursion)	ÚassertRaisesr   r   Úrunaway_selfr   r!   ÚassertInÚstrÚ	exception©r   Úraisesr   r   s      @r   Útest_runawayzTestSelfRecursion.test_runaway'   sÔ   ø€ à×Ò�{Ñ+Ô+ð 	¨vØ”HÔ)ˆEåŒX�hÑÔðð ð ð ñ  Ôðð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ;Ý˜&Ô*Ñ+Ô+ñ	-ô 	-ð 	-ð 	-ð 	-s   œ,AÁAÁAz-Needs insert_unresolved_ref support in targetc                 ó¤  ‡	— | j         j        j        }| j         j        Š	t          j        ˆ	fd„¦   «         }d}t          j        |d         gt
          j        ¬¦  «        }t          j        |d         gt
          j        ¬¦  «        }t          j	        |¦  «        } |d         |||¦  «          ||Ž }|d         }|  
                    ||¦  «         d S )Nc                 ó>   •—  ‰|d         |d         ¦  «        | d<   d S r   r   )r   r   Úyr   s      €r   r   z2TestSelfRecursion.test_type_change.<locals>.kernel8   s$   ø€ à�5˜˜1œ˜q œtÑ$Ô$ˆAˆa‰DˆDˆDr   )é   g      À?r   r   r   r   )r   Útype_change_selfÚpy_funcr   r!   r"   r#   r$   Úfloat64r%   r&   )
r   Úpfuncr   Úargsr   rD   r   r(   r'   r   s
            @r   Útest_type_changez"TestSelfRecursion.test_type_change3   sÕ   ø€ à”Ô)Ô1ˆØ”Ô)ˆå	Œð	%ð 	%ð 	%ð 	%ñ 
Œð	%ð ˆÝŒJ˜˜Qœ�y­¬Ð1Ñ1Ô1ˆÝŒJ˜˜Qœ�y­¬
Ð3Ñ3Ô3ˆÝŒM˜!ÑÔˆàˆˆtŒ�Q˜˜1ÑÔÐà�5˜$�<ˆØ�1”ˆà×Ò ¨Ñ1Ô1Ð1Ð1Ð1r   c                 óð   — |                       t          ¦  «        5 } | j        j        d         d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )Nr   é   Ú
raise_self)r:   Ú
ValueErrorr   Úraise_self_kernelÚassertEqualr=   r>   )r   r@   s     r   Ú
test_raisezTestSelfRecursion.test_raiseH   s­   € ð
 ×Ò�zÑ*Ô*ð 	0¨fØ,ˆDŒHÔ& tÔ,¨QÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	×Ò�˜VÔ-Ñ.Ô.°Ñ=Ô=Ð=Ð=Ð=s   ›AÁAÁ
Ac                 ó¦  ‡‡	— | j                              ¦   «         Š	| j                              t          j        ¦  «        Št          j        ˆfd„¦   «         }ˆ	fd„}dD ]r} ||¦  «        }t	          j        |gt          j        ¬¦  «        }t	          j        |¦  «        } |d         ||¦  «         |d         }|                      ||¦  «         Œsd S )Nc                 ó<   •—  ‰|d         ¦  «        }|€d}|| d<   d S )Nr   éç  r   )r   r   Úresr   s      €r   r   z6TestSelfRecursion.test_optional_return.<locals>.kernelW   s+   ø€ à�%˜˜!œ‘+”+ˆCØˆ{Ø�ØˆAˆa‰DˆDˆDr   c                 ó&   •—  ‰| ¦  «        }|€d}|S )NrU   r   )r   rV   rI   s     €r   Ú
cpu_kernelz:TestSelfRecursion.test_optional_return.<locals>.cpu_kernel^   s   ø€ Ø�%˜‘(”(ˆCØˆ{Ø�ØˆJr   )r   é   r   é   r   r   r   )	r   Úmake_optional_return_caser   r!   r"   r#   r$   r%   rQ   )
r   r   rX   Úargr(   r   r   r'   r   rI   s
           @@r   Útest_optional_returnz&TestSelfRecursion.test_optional_returnR   só   øø€ à”×2Ò2Ñ4Ô4ˆØ”×2Ò2µ4´8Ñ<Ô<ˆå	Œð	ð 	ð 	ð 	ñ 
Œð	ð	ð 	ð 	ð 	ð 	ð "ð 	/ð 	/ˆCØ!�z #‘”ˆHÝ”
˜C˜5­¬Ð1Ñ1Ô1ˆAÝ”˜aÑ Ô ˆAØˆF�4ŒL˜˜AÑÔÐØ�q”TˆFà×Ò˜X vÑ.Ô.Ð.Ð.ð	/ð 	/r   z4Recursion handled because simulator does not compilec                 óB  ‡— | j                              t          j        ¦  «        Š|                      t
          ¦  «        5 }t          j        d¦  «        ˆfd„¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )Nr7   c                  ó   •—  ‰ d¦  «         d S )Néd   r   r9   s   €r   r   z;TestSelfRecursion.test_growing_return_tuple.<locals>.kernelr   s   ø€ à��c‘
”
�
�
�
r   z3Return type of recursive function does not converge)	r   Úmake_growing_tuple_caser   r!   r:   r   r<   r=   r>   r?   s      @r   Útest_growing_return_tuplez+TestSelfRecursion.test_growing_return_tuplem   sá   ø€ à”×0Ò0µ´Ñ:Ô:ˆà×Ò�{Ñ+Ô+ð 	¨vÝŒX�hÑÔðð ð ð ñ  Ôðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 	�ŠØAÝ�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
s   Á  A,Á,A0Á3A0)Ú__name__Ú
__module__Ú__qualname__r   r)   r.   r2   r5   r   rA   ÚunittestÚskiprK   ÚexpectedFailurerR   r]   rb   Ú__classcell__)r   s   @r   r   r      s6  ø€ € € € € ðð ð ð ð ð2ð 2ð 2ð&ð &ð &ð&ð &ð &ð&ð &ð &ð €_Ð1Ñ2Ô2ð	-ð 	-ñ 3Ô2ð	-ð €X„]ÐBÑCÔCð2ð 2ñ DÔCð2ð( Ôð>ð >ñ Ôð>ð €X„]ÐBÑCÔCð/ð /ñ DÔCð/ð4 €_ÐKÑLÔLð
ð 
ñ MÔLð
ð 
ð 
ð 
ð 
r   r   Ú__main__)Únumbar   Únumba.core.errorsr   Únumba.cuda.testingr   r   Únumpyr"   rf   r   rc   Úmainr   r   r   ú<module>rp      s¯   ðØ Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ø €€€ðq
ð q
ð q
ð q
ð q
˜ñ q
ô q
ð q
ðh ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   