§
    ƒÛgF  ã                   ó†  — d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZ d dlZ e¦   «         Zde_        de_        e                     ¦   «         Zde_        d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ dee
¦  «        Z  G d„ de
¦  «        Z! G d„ dee
¦  «        Z"e#dk    r ej$        ¦   «          dS dS )é    )ÚStringION)Útypes)Úcompile_extraÚFlags)ÚTestCaseÚtagÚMemoryLeakMixinTc                 óš   — ddl m} |                     dd ¦  «         |                     di ¦  «         t          |j        |j        | |fi |¤ŽS )Nr   ©Ú
cpu_targetÚreturn_typeÚlocals)Únumba.core.registryr   Ú
setdefaultr   Útyping_contextÚtarget_context)ÚpyfuncÚargtypesÚkwargsr   s       úR/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_looplifting.pyÚcompile_isolatedr      ss   € Ø.Ð.Ð.Ð.Ð.Ð.à
×Ò�m TÑ*Ô*Ð*Ø
×Ò�h Ñ#Ô#Ð#ÝØÔ!ØÔ!ØØð	ð ð
 ðð ð ó    c                 óf   — t          j        d¦  «        }t          |j        ¦  «        D ]}| ||<   Œ|S )Né   )ÚnpÚemptyÚrangeÚsize©ÚxÚaÚis      r   Úlift1r#       s6   € å
Œ�‰Œ€AÝ�1”6‰]Œ]ð ð ˆàˆˆ!‰ˆØ€Hr   c                 ó°   — t          j        d¦  «        }t          |j        d         ¦  «        D ]&}t          |j        d         ¦  «        D ]	}| |||f<   Œ
Œ'|S )N)r   é   r   é   )r   r   r   Úshape)r    r!   r"   Újs       r   Úlift2r)   )   sf   € å
Œ�ÑÔ€AÝ�1”7˜1”:ÑÔð ð ˆÝ�q”w˜q”zÑ"Ô"ð 	ð 	ˆAàˆAˆa�ˆd‰GˆGð	ð €Hr   c                 ó¼   — t          ¦   «         }t          j        dt          j        ¬¦  «        }d}t	          |j        d         ¦  «        D ]}|||         | z  z  }Œ|S ©Né   ©Údtyper   ©Úobjectr   ÚarangeÚint64r   r'   )r    Ú_r!   Úcr"   s        r   Úlift3r5   3   s[   € å‰Œ€AÝ
Œ	�!�2œ8Ð$Ñ$Ô$€AØ	€AÝ�1”7˜1”:ÑÔð ð ˆØ	ˆQˆqŒT�A‰X‰ˆˆØ€Hr   c                 óÐ   — t          ¦   «         }t          j        dt          j        ¬¦  «        }d}d}t	          |j        d         ¦  «        D ]}|||         | z  z  }||z  }Œ||z   S r+   r/   )r    r3   r!   r4   Údr"   s         r   Úlift4r8   <   sm   € å‰Œ€AÝ
Œ	�!�2œ8Ð$Ñ$Ô$€AØ	€AØ	€AÝ�1”7˜1”:ÑÔð ð ˆØ	ˆQˆqŒT�A‰X‰ˆØ	ˆQ‰ˆˆØˆq‰5€Lr   c                 ó”   — t          ¦   «         }t          j        d¦  «        }t          |j        d         ¦  «        D ]
}|dk    r nŒ|S )Nr%   r   é   ©r0   r   r1   r   r'   ©r    r3   r!   r"   s       r   Úlift5r=   G   sM   € Ý‰Œ€AÝ
Œ	�!‰Œ€AÝ�1”7˜1”:ÑÔð ð ˆàˆqŠ5ˆ5ØˆEð à€Hr   c              #   óž   K  — t          j        d¦  «        }dV — t          |j        ¦  «        D ]}| ||<   Œt          j        |¦  «        V — d S )Nr   r   )r   r   r   r   Úsumr   s      r   Ú	lift_gen1r@   P   sS   è è € å
Œ�‰Œ€AØ
€G€G€GÝ�1”6‰]Œ]ð ð ˆàˆˆ!‰ˆÝ
Œ&�‰)Œ)€O€O€O€O€Or   c                  ó|   — t          j        d¦  «         t          d¦  «        D ]} t          d¦  «        D ]}  dS ŒdS )Nr&   é
   r:   )r   r   r   )r"   r(   s     r   Úlift_issue2561rC   Y   sL   € Ý„HˆQ�K„K€KÝ�2‰YŒYð ð ˆÝ�r‘”ð 	ð 	ˆAØ�1�1�1ð	àˆ1r   c                 ón   — t          j        d¦  «        }t          |j        d         ¦  «        D ]}|c S |S ©Nr%   r   )r   r1   r   r'   r   s      r   Úreject1rF   `   s:   € Ý
Œ	�!‰Œ€AÝ�1”7˜1”:ÑÔð ð ˆàˆˆˆØ€Hr   c              #   óœ   K  — t          ¦   «         }t          j        d¦  «        }t          |j        d         ¦  «        D ]}||         V — Œd S rE   r;   r<   s       r   Úreject_gen1rH   h   sR   è è € Ý‰Œ€AÝ
Œ	�!‰Œ€AÝ�1”7˜1”:ÑÔð ð ˆà�Œdˆ
ˆ
ˆ
ˆ
ðð r   c              #   óÈ   K  — t          ¦   «         }t          j        d¦  «        }t          |j        ¦  «        D ](}||         | z   }t          |¦  «        D ]}|dz  }Œ|V — Œ)d S )Nr   r:   )r0   r   r1   r   r   )r    r3   r!   r"   Úresr(   s         r   Úreject_gen2rK   o   sw   è è € Ý‰Œ€AÝ
Œ	�!‰Œ€AÝ�1”6‰]Œ]ð ð ˆà�Œd�Q‰hˆÝ�q‘”ð 	ð 	ˆAð ˜‘(ˆCˆCØˆ	ˆ	ˆ	ˆ	ðð r   c                 óÐ   — t          j        dt           j        ¬¦  «        }t          |j        ¦  «        D ]0}t          ¦   «         }t          j        |dz   ¦  «        |         ||<   Œ1|S )Nr   r-   r&   )r   r   Úint32r   r   r0   r1   )r    r!   r"   r3   s       r   Úreject_npm1rN   {   s[   € Ý
Œ��"œ(Ð#Ñ#Ô#€AÝ�1”6‰]Œ]ð #ð #ˆå‰HŒHˆÝŒy˜˜Q™ÑÔ Ô"ˆˆ!‰ˆà€Hr   c                   óz   — 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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestLoopLiftingc           	      ó¬   — ddl m} t          |j        |j        ||d t
          i ¬¦  «        }|                      t          |j        ¦  «        d¦  «         |S )Nr   r   )r   Úflagsr   r&   )	r   r   r   r   r   Úlooplift_flagsÚassertEqualÚlenÚlifted)Úselfr   r   r   Úcress        r   Útry_liftzTestLoopLifting.try_lift‡   sg   € Ø2Ð2Ð2Ð2Ð2Ð2åØÔ%ØÔ%Ø�HØ¥N¸2ð	
ñ 
ô 
ˆð 	×Ò�˜Tœ[Ñ)Ô)¨1Ñ-Ô-Ð-Øˆr   c                 ó”   — |j         d         }|j                             ¦   «         \  }|                      |j        j        ¦  «         d S ©Nr   )rV   Ú	overloadsÚvaluesÚ
assertTrueÚfndescÚnative)rW   rX   ÚjitloopÚloopcress       r   Úassert_lifted_nativez$TestLoopLifting.assert_lifted_native”   s@   € à”+˜a”.ˆØÔ&×-Ò-Ñ/Ô/‰
ˆØ�Š˜œÔ.Ñ/Ô/Ð/Ð/Ð/r   c                 ó¦   — |                       ||¦  «        } ||Ž } |j        |Ž }|                      |¦  «         |                      ||¦  «         dS )zH
        Check that pyfunc can loop-lift even in nopython mode.
        N)rY   Úentry_pointrc   ÚassertPreciseEqual©rW   r   r   ÚargsrX   ÚexpectedÚgots          r   Úcheck_lift_okzTestLoopLifting.check_lift_okš   sa   € ð �}Š}˜V XÑ.Ô.ˆØ�6˜4�=ˆØˆdÔ Ð%ˆØ×!Ò! $Ñ'Ô'Ð'à×Ò ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 óÚ   — |                       ||¦  «        }t           ||Ž ¦  «        }t           |j        |Ž ¦  «        }|                      |¦  «         |                      ||¦  «         dS )zg
        Check that pyfunc (a generator function) can loop-lift even in
        nopython mode.
        N)rY   Úlistre   rc   rf   rg   s          r   Úcheck_lift_generator_okz'TestLoopLifting.check_lift_generator_ok¥   sr   € ð
 �}Š}˜V XÑ.Ô.ˆÝ˜˜ ˜Ñ&Ô&ˆÝÐ#�4Ô# TÐ*Ñ+Ô+ˆØ×!Ò! $Ñ'Ô'Ð'à×Ò ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 ó²   — t          ||t          ¬¦  «        }|                      |j        ¦  «          ||Ž } |j        |Ž }|                      ||¦  «         dS )z4
        Check that pyfunc can't loop-lift.
        ©rR   N)r   rS   ÚassertFalserV   re   rf   rg   s          r   Úcheck_no_liftzTestLoopLifting.check_no_lift±   sk   € õ   ¨Ý&4ð6ñ 6ô 6ˆà×Ò˜œÑ%Ô%Ð%Ø�6˜4�=ˆØˆdÔ Ð%ˆà×Ò ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 óæ   — t          ||t          ¬¦  «        }|                      |j        ¦  «         t	           ||Ž ¦  «        }t	           |j        |Ž ¦  «        }|                      ||¦  «         dS )zK
        Check that pyfunc (a generator function) can't loop-lift.
        rp   N)r   rS   rq   rV   rm   re   rf   rg   s          r   Úcheck_no_lift_generatorz'TestLoopLifting.check_no_lift_generator½   s|   € õ   ¨Ý&4ð6ñ 6ô 6ˆà×Ò˜œÑ%Ô%Ð%Ý˜˜ ˜Ñ&Ô&ˆÝÐ#�4Ô# TÐ*Ñ+Ô+ˆØ×Ò ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 ó€  — t          ||t          ¬¦  «        }|                      |j        ¦  «         |                      ¦   «         5   |j        |Ž  ddd¦  «         n# 1 swxY w Y   t          ||t          ¬¦  «        }|                      |j        ¦  «          ||Ž } |j        |Ž }|                      ||¦  «         dS )zƒ
        Check that pyfunc will fail loop-lifting if pyobject mode
        is disabled inside the loop, succeed otherwise.
        rp   N)r   rS   r^   rV   ÚassertTypingErrorre   Úpyobject_looplift_flagsrf   rg   s          r   Úcheck_no_lift_nopythonz&TestLoopLifting.check_no_lift_nopythonÈ   s  € õ
   ¨Ý&4ð6ñ 6ô 6ˆà�Š˜œÑ$Ô$Ð$Ø×#Ò#Ñ%Ô%ð 	$ð 	$ØˆDÔ˜dÐ#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$å ¨Ý&=ð?ñ ?ô ?ˆà�Š˜œÑ$Ô$Ð$Ø�6˜4�=ˆØˆdÔ Ð%ˆØ×Ò ¨#Ñ.Ô.Ð.Ð.Ð.s   ÁAÁA!Á$A!c                 óT   — |                       t          t          j        fd¦  «         d S ©N)é{   )rk   r#   r   Úintp©rW   s    r   Ú
test_lift1zTestLoopLifting.test_lift1Ù   ó$   € Ø×Ò�5¥5¤: -°Ñ8Ô8Ð8Ð8Ð8r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rk   r)   r   r|   r}   s    r   Ú
test_lift2zTestLoopLifting.test_lift2Ü   r   r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rk   r5   r   r|   r}   s    r   Ú
test_lift3zTestLoopLifting.test_lift3ß   r   r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rk   r8   r   r|   r}   s    r   Ú
test_lift4zTestLoopLifting.test_lift4â   r   r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rk   r=   r   r|   r}   s    r   Ú
test_lift5zTestLoopLifting.test_lift5å   r   r   c                 ó>   — |                       t          dd¦  «         d S )N© )rk   rC   r}   s    r   Útest_lift_issue2561z#TestLoopLifting.test_lift_issue2561è   s    € Ø×Ò�>¨2¨rÑ2Ô2Ð2Ð2Ð2r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rn   r@   r   r|   r}   s    r   Útest_lift_gen1zTestLoopLifting.test_lift_gen1ë   s$   € Ø×$Ò$¥Yµ´°¸vÑFÔFÐFÐFÐFr   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rr   rF   r   r|   r}   s    r   Útest_reject1zTestLoopLifting.test_reject1î   s$   € Ø×Ò�7¥U¤Z M°6Ñ:Ô:Ð:Ð:Ð:r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rt   rH   r   r|   r}   s    r   Útest_reject_gen1z TestLoopLifting.test_reject_gen1ñ   ó$   € Ø×$Ò$¥[µ5´:°-ÀÑHÔHÐHÐHÐHr   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rt   rK   r   r|   r}   s    r   Útest_reject_gen2z TestLoopLifting.test_reject_gen2ô   r‘   r   c                 óT   — |                       t          t          j        fd¦  «         d S rz   )rx   rN   r   r|   r}   s    r   Útest_reject_npm1z TestLoopLifting.test_reject_npm1÷   s$   € Ø×#Ò#¥Kµ%´*°ÀÑGÔGÐGÐGÐGr   N)Ú__name__Ú
__module__Ú__qualname__rY   rc   rk   rn   rr   rt   rx   r~   r�   rƒ   r…   r‡   rŠ   rŒ   rŽ   r�   r“   r•   r‰   r   r   rP   rP   …   s0  € € € € € ðð ð ð0ð 0ð 0ð	/ð 	/ð 	/ð
/ð 
/ð 
/ð
/ð 
/ð 
/ð	/ð 	/ð 	/ð/ð /ð /ð"9ð 9ð 9ð9ð 9ð 9ð9ð 9ð 9ð9ð 9ð 9ð9ð 9ð 9ð3ð 3ð 3ðGð Gð Gð;ð ;ð ;ðIð Ið IðIð Ið IðHð Hð Hð Hð Hr   rP   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestLoopLiftingAnnotatec                 óH  ‡
— ddl m} d„ Š
ˆ
fd„} ||¦  «        }t          j        d¦  «        }|                     ¦   «         } ||¦  «        }t          j                             ||dz   ¦  «         t          ¦   «         }|                     |¬¦  «         | 	                    ¦   «         }| 
                    ¦   «          |                      d|¦  «         |j        j        d	z   }	|                      d
                     |	¬¦  «        |¦  «         |                      d|¦  «         dS )zO
        Verify that annotation works as expected with one lifted loop
        r   ©Újitc                  ó   — d S ©Nr‰   r‰   r   r   Úbarz4TestLoopLiftingAnnotate.test_annotate_1.<locals>.bar  ó   € ØˆDr   c                 ój   •—  ‰¦   «          t          | j        ¦  «        D ]}| |xx         dz  cc<   Œ| S )Nr&   ©r   r   )r    r"   r    s     €r   Úfooz4TestLoopLiftingAnnotate.test_annotate_1.<locals>.foo  sA   ø€ ØˆC‰EŒEˆEÝ˜1œ6‘]”]ð ð �Ø�!��”˜‘	��‘�àˆHr   rB   r&   ©Úfileú"The function contains lifted loopsr:   úLoop at line {line}©ÚlinezHas 1 overloadsN©Únumbar�   r   r1   ÚcopyÚtestingÚassert_equalr   Úinspect_typesÚgetvalueÚcloseÚassertInÚ__code__Úco_firstlinenoÚformat)rW   r�   r¤   Úcfoor    ÚxcopyÚrÚbufÚ
annotationrª   r    s             @r   Útest_annotate_1z'TestLoopLiftingAnnotate.test_annotate_1ü   s0  ø€ ð 	ÐÐÐÐÐð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð ˆs�3‰xŒxˆåŒI�b‰MŒMˆØ—’‘”ˆØˆD�‰GŒGˆÝ
Œ
×Ò  5¨1¡9Ñ-Ô-Ð-å‰jŒjˆØ×Ò ÐÑ$Ô$Ð$Ø—\’\‘^”^ˆ
Ø�	Š	‰Œˆà�ŠÐ:¸JÑGÔGÐGØŒ|Ô*¨QÑ.ˆØ�ŠÐ+×2Ò2¸Ð2Ñ=Ô=¸zÑJÔJÐJØ�ŠÐ'¨Ñ4Ô4Ð4Ð4Ð4r   c                 ó”  ‡— ddl m} d„ Šˆfd„} ||¦  «        }t          j        d¦  «        }|                     ¦   «         } ||¦  «        }t          j                             ||dz   dz  ¦  «         t          ¦   «         }|                     |¬¦  «         | 	                    ¦   «         }| 
                    ¦   «          |                      d	|¦  «         |j        j        d
z   }	|j        j        dz   }
|                      d                     |	¬¦  «        |¦  «         |                      d                     |
¬¦  «        |¦  «         dS )zP
        Verify that annotation works as expected with two lifted loops
        r   rœ   c                  ó   — d S rŸ   r‰   r‰   r   r   r    z4TestLoopLiftingAnnotate.test_annotate_2.<locals>.bar%  r¡   r   c                 ó¸   •—  ‰¦   «          t          | j        ¦  «        D ]}| |xx         dz  cc<   Œt          | j        ¦  «        D ]}| |xx         dz  cc<   Œ| S )Nr&   r:   r£   )r    r"   r(   r    s      €r   r¤   z4TestLoopLiftingAnnotate.test_annotate_2.<locals>.foo(  so   ø€ ØˆC‰EŒEˆEå˜1œ6‘]”]ð ð �Ø�!��”˜‘	��‘�å˜1œ6‘]”]ð ð �Ø�!��”˜‘	��‘�ØˆHr   rB   r&   r:   r¥   r§   r   é   r¨   r©   Nr«   )rW   r�   r¤   r·   r    r¸   r¹   rº   r»   Úline1Úline2r    s              @r   Útest_annotate_2z'TestLoopLiftingAnnotate.test_annotate_2  sT  ø€ ð 	ÐÐÐÐÐð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð ˆs�3‰xŒxˆåŒI�b‰MŒMˆØ—’‘”ˆØˆD�‰GŒGˆÝ
Œ
×Ò  E¨A¡I°¡?Ñ3Ô3Ð3å‰jŒjˆØ×Ò ÐÑ$Ô$Ð$Ø—\’\‘^”^ˆ
Ø�	Š	‰Œˆà�ŠÐ:¸JÑGÔGÐGØ”Ô+¨aÑ/ˆØ”Ô+¨aÑ/ˆØ�ŠÐ+×2Ò2¸Ð2Ñ>Ô>À
ÑKÔKÐKØ�ŠÐ+×2Ò2¸Ð2Ñ>Ô>À
ÑKÔKÐKÐKÐKr   N)r–   r—   r˜   r¼   rÃ   r‰   r   r   rš   rš   û   s8   € € € € € ð 5ð  5ð  5ðD$Lð $Lð $Lð $Lð $Lr   rš   c                   ób   — 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„ Zd„ Zd„ Zd„ ZdS )ÚTestLoopLiftingInActionc                 ó†   — |j         |j        d                  j        }|                      t	          |¦  «        |¦  «         d S r[   )r\   Ú
signaturesrV   rT   rU   )rW   ÚjittedÚ	loopcountrV   s       r   Úassert_has_liftedz)TestLoopLiftingInAction.assert_has_liftedF  s<   € ØÔ! &Ô"3°AÔ"6Ô7Ô>ˆØ×Ò�˜V™œ iÑ0Ô0Ð0Ð0Ð0r   c                 ó@  — ddl m}m}m}m}  | |||d d …         ¦  «        d¬¦  «        d„ ¦   «         }dD ]f}t          j        dd¬	¦  «        }t          j        dd¬	¦  «        } |||¦  «         |                     ||¦  «         |                      ||¦  «         Œgd S )
Nr   )r�   ÚvoidrM   ÚdoubleT©Úforceobjc                 óÂ   — | dk    r-t          |j        d         ¦  «        D ]}||         dz  ||<   Œd S t          |j        d         ¦  «        D ]}||         dz   ||<   Œd S )Nr   g       @ç      ð?)r   r'   )Úur!   r"   s      r   Úforloop_with_ifz?TestLoopLiftingInAction.test_issue_734.<locals>.forloop_with_ifM  s�   € à�AŠvˆvÝ˜qœw qœzÑ*Ô*ð &ð &�AØ˜Qœ4 #™:�A�a‘D�Dð&ð &õ ˜qœw qœzÑ*Ô*ð &ð &�AØ˜Qœ4 #™:�A�a‘D�Dð&ð &r   )r   r&   rB   rM   r-   )	r¬   r�   rÌ   rM   rÍ   r   r1   Úpy_funcrf   )	rW   r�   rÌ   rM   rÍ   rÓ   rÒ   Únb_aÚnp_as	            r   Útest_issue_734z&TestLoopLiftingInAction.test_issue_734J  sç   € Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2à	ˆˆTˆT�%˜   œÑ#Ô#¨dÐ	3Ñ	3Ô	3ð	&ð 	&ñ 
4Ô	3ð	&ð ð 	0ð 	0ˆAÝ”9˜R wÐ/Ñ/Ô/ˆDÝ”9˜R wÐ/Ñ/Ô/ˆDØˆO˜A˜tÑ$Ô$Ð$Ø×#Ò# A tÑ,Ô,Ð,Ø×#Ò# D¨$Ñ/Ô/Ð/Ð/ð	0ð 	0r   c                 óâ   — ddl m}  |dd¬¦  «        d„ ¦   «         }t          j        g d¢¦  «        }t          j                             |                     |¦  «         ||¦  «        ¦  «         d S )Nr   rœ   zf8[:](f8[:])TrÎ   c                 ó  — t          j        t          | ¦  «        ¦  «        }d}t          t          | ¦  «        ¦  «        D ] }|dz  }| |         ||<   | |         dk    r nŒ!t          |dz   t          | ¦  «        ¦  «        D ]}d||<   Œ|S )Nr   r&   rB   )r   ÚzerosrU   r   )r    rJ   ÚindÚiis       r   Útestz4TestLoopLiftingInAction.test_issue_812.<locals>.test`  s™   € å”(�3˜q™6œ6Ñ"Ô"ˆCØˆCÝ�C ™FœF‘m”mð ð �Ø�q‘�Ø˜Sœ6��C‘Ø�S”6˜R’<�<Ø�Eð  õ
 ˜C !™G¥S¨¡V¤VÑ,Ô,ð ð �Ø��B‘�ØˆJr   )
rÑ   r%   r:   éýÿÿÿr,   r:   rB   r,   r:   rÀ   )r¬   r�   r   Úarrayr®   r¯   rÔ   )rW   r�   rÝ   r    s       r   Útest_issue_812z&TestLoopLiftingInAction.test_issue_812]  s…   € ØÐÐÐÐÐà	ˆˆ^ dÐ	+Ñ	+Ô	+ð	ð 	ñ 
,Ô	+ð	õ ŒHÐ6Ð6Ð6Ñ7Ô7ˆÝ
Œ
×Ò §¢¨Q¡¤°°°a±´Ñ9Ô9Ð9Ð9Ð9r   c                 óä  — ddl m} d„ }t          j        d¦  «        }t	          ¦   «         } ||¦  «        } |||¦  «        } |||¦  «        }|                      |d         |d         ¦  «         |                      |d         |d         ¦  «         |j        |j        d                  j        d         }|j         	                    ¦   «         \  }	|  
                    |	j        j        ¦  «         d S )Nr   rœ   c                 óJ   — d}| D ]}||z  }Œ|                      ¦   «         }||fS r[   )Ú__hash__)r!   ÚbÚsÚeÚhs        r   Úlift_issue2368z?TestLoopLiftingInAction.test_issue_2368.<locals>.lift_issue2368v  s7   € ØˆAØð ð �Ø�Q‘��Ø—
’
‘”ˆAØ�a�4ˆKr   rB   r&   )r¬   r�   r   Úonesr0   rT   r\   rÇ   rV   r]   r^   r_   r`   )
rW   r�   rè   r!   rä   rÈ   ri   rj   ra   rb   s
             r   Útest_issue_2368z'TestLoopLiftingInAction.test_issue_2368s  sö   € ØÐÐÐÐÐð	ð 	ð 	õ ŒG�B‰KŒKˆÝ‰HŒHˆØ��^Ñ$Ô$ˆà!�> ! QÑ'Ô'ˆØˆf�Q˜‰lŒlˆà×Ò˜ !œ c¨!¤fÑ-Ô-Ð-Ø×Ò˜ !œ c¨!¤fÑ-Ô-Ð-àÔ" 6Ô#4°QÔ#7Ô8Ô?ÀÔBˆØÔ&×-Ò-Ñ/Ô/‰
ˆà�Š˜œÔ.Ñ/Ô/Ð/Ð/Ð/r   c                 ó`  — ddl m}  |d¬¦  «        d„ ¦   «         }|                      |                     d¦  «         |d¦  «        ¦  «         |                      |d¬¦  «         |                      |                     d¦  «         |d¦  «        ¦  «         |                      |d¬¦  «         d S )	Nr   rœ   TrÎ   c                 ó2   — d}t          | ¦  «        D ]}|}Œ|S r[   ©r   ©ÚnrJ   r"   s      r   rÝ   z?TestLoopLiftingInAction.test_no_iteration_w_redef.<locals>.test‘  s(   € àˆCÝ˜1‘X”Xð ð �Ø��ØˆJr   éÿÿÿÿr&   ©rÉ   ©r¬   r�   rT   rÔ   rÊ   ©rW   r�   rÝ   s      r   Útest_no_iteration_w_redefz1TestLoopLiftingInAction.test_no_iteration_w_redefŒ  sÉ   € ð 	ÐÐÐÐÐà	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	×Ò˜Ÿš bÑ)Ô)¨4¨4°©8¬8Ñ4Ô4Ð4Ø×Ò˜t¨qÐÑ1Ô1Ð1à×Ò˜Ÿš a™œ¨$¨$¨q©'¬'Ñ2Ô2Ð2Ø×Ò˜t¨qÐÑ1Ô1Ð1Ð1Ð1r   c                 ó`  — ddl m}  |d¬¦  «        d„ ¦   «         }|                      |                     d¦  «         |d¦  «        ¦  «         |                      |d¬¦  «         |                      |                     d¦  «         |d¦  «        ¦  «         |                      |d¬¦  «         d S )	Nr   rœ   TrÎ   c                 ó8   — d}t          | ¦  «        D ]}||z  }Œ|S r[   rí   rî   s      r   rÝ   z7TestLoopLiftingInAction.test_no_iteration.<locals>.test¢  s,   € àˆCÝ˜1‘X”Xð ð �Ø�q‘��ØˆJr   rð   r&   rñ   rò   ró   s      r   Útest_no_iterationz)TestLoopLiftingInAction.test_no_iterationŸ  sÇ   € ØÐÐÐÐÐà	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	×Ò˜Ÿš bÑ)Ô)¨4¨4°©8¬8Ñ4Ô4Ð4Ø×Ò˜t¨qÐÑ1Ô1Ð1à×Ò˜Ÿš a™œ¨$¨$¨q©'¬'Ñ2Ô2Ð2Ø×Ò˜t¨qÐÑ1Ô1Ð1Ð1Ð1r   c                 óÎ   — ddl m}  |d¬¦  «        d„ ¦   «         }|                      |                     d¦  «         |d¦  «        ¦  «         |                      |d¬¦  «         d S )Nr   rœ   TrÎ   c                 ó.   — t          | ¦  «        D ]}|}Œ|S rŸ   rí   )rï   r"   rJ   s      r   rÝ   z>TestLoopLiftingInAction.test_define_in_loop_body.<locals>.test´  s#   € å˜1‘X”Xð ð �Ø��ØˆJr   r&   rñ   rò   ró   s      r   Útest_define_in_loop_bodyz0TestLoopLiftingInAction.test_define_in_loop_body°  s„   € àÐÐÐÐÐà	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	×Ò˜Ÿš a™œ¨$¨$¨q©'¬'Ñ2Ô2Ð2Ø×Ò˜t¨qÐÑ1Ô1Ð1Ð1Ð1r   c                 óÈ   — ddl m}  |d¬¦  «        d„ ¦   «         }t          j        d¦  «        }|                      |                     |¦  «         ||¦  «        ¦  «         dS )zäTest a problem caused by invalid discovery of loop argument
        when a variable is used afterwards but not before.

        Before the fix, this will result in::

        numba.ir.NotDefinedError: 'i' is not defined
        r   rœ   TrÎ   c                 ó¸   — t          | ¦  «        t          j        k    r5| j        dk    r#d}d}t	          | j        d         ¦  «        D ]}Œd S t          ‚d}d\  }}|S )Nr&   ç        r   )r   r   )Útyper   ÚndarrayÚndimr   r'   Ú	Exception)ÚargÚresultr(   r"   s       r   rÝ   z;TestLoopLiftingInAction.test_invalid_argument.<locals>.testÈ  sn   € å�C‰yŒy�BœJÒ&Ð&Ø”8˜q’=�=Ø �FØ�AÝ" 3¤9¨Q¤<Ñ0Ô0ð ð ˜Øðð õ $�Oà�Ø‘��1Ø�r   rB   N)r¬   r�   r   r1   rT   rÔ   )rW   r�   rÝ   r  s       r   Útest_invalid_argumentz-TestLoopLiftingInAction.test_invalid_argument¾  s|   € ð 	ÐÐÐÐÐà	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	õ Œi˜‰mŒmˆØ×Ò˜Ÿš cÑ*Ô*¨D¨D°©I¬IÑ6Ô6Ð6Ð6Ð6r   c                 óÊ   — ddl m}  |d¬¦  «        d„ ¦   «         }|                      |                     ¦   «          |¦   «         ¦  «         |                      |d¬¦  «         d S )Nr   rœ   TrÎ   c                  óP   — d} d}t          d¦  «        D ]}|dk    rd} || z  }Œ|| fS )Nr,   r   r:   rÀ   rí   )r    Úyr"   s      r   rÝ   zHTestLoopLiftingInAction.test_conditionally_defined_in_loop.<locals>.testÜ  sC   € àˆAØˆAÝ˜1‘X”Xð ð �Ø�q’5�5Ø�1Ø�Q‘��Ø�a�4ˆKr   r&   rñ   rò   ró   s      r   Ú"test_conditionally_defined_in_loopz:TestLoopLiftingInAction.test_conditionally_defined_in_loopÚ  s€   € ØÐÐÐÐÐØ	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	×Ò˜Ÿš™œ¨¨©¬Ñ0Ô0Ð0Ø×Ò˜t¨qÐÑ1Ô1Ð1Ð1Ð1r   c                 ó  — ddl m} dd l}d„ }|                     ¦   «         5  |                     d¦  «           |d¬¦  «        |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   rœ   c                 ó2   — | rt          d¦  «        D ]}Œd S d S )NrB   rí   )r!   r"   s     r   r   zRTestLoopLiftingInAction.test_stack_offset_error_when_has_no_return.<locals>.pyfuncí  s6   € Øð Ý˜r™œð ð �AØðð ðð r   ÚerrorTrÎ   )r¬   r�   ÚwarningsÚcatch_warningsÚsimplefilterrT   )rW   r�   r  r   Úcfuncs        r   Ú*test_stack_offset_error_when_has_no_returnzBTestLoopLiftingInAction.test_stack_offset_error_when_has_no_returné  sú   € ØÐÐÐÐÐØˆˆˆð	ð 	ð 	ð
 ×$Ò$Ñ&Ô&ð 	8ð 	8Ø×!Ò! 'Ñ*Ô*Ð*à&�C�C Ð&Ñ&Ô& vÑ.Ô.ˆEØ×Ò˜V˜V D™\œ\¨5¨5°©;¬;Ñ7Ô7Ð7ð		8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8s   ¢ABÂBÂ	Bc                 óŠ   ‡— ddl m} d„ Šˆfd„} ||¦  «        }|                       |d¦  «         |d¦  «        ¦  «         dS )zŒ
        https://github.com/numba/numba/issues/2179

        Looplifting transformation is using the wrong version of variable `h`.
        r   rœ   c                 ó   — | S rŸ   r‰   )r    s    r   r    z<TestLoopLiftingInAction.test_variable_scope_bug.<locals>.bar   s   € ØˆHr   c                 óV   •— d}t          | ¦  «        D ]}||z   }Œ| ‰| ¦  «        z
  }|S )Nrý   rí   )r    rç   Úkr    s      €r   r¤   z<TestLoopLiftingInAction.test_variable_scope_bug.<locals>.foo  s>   ø€ ØˆAÝ˜1‘X”Xð ð �Ø˜‘E��Ø�C�C˜‘F”F‘
ˆAØˆHr   rB   N)r¬   r�   rT   )rW   r�   r¤   r·   r    s       @r   Útest_variable_scope_bugz/TestLoopLiftingInAction.test_variable_scope_bugø  sz   ø€ ð 	ÐÐÐÐÐð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð ˆs�3‰xŒxˆØ×Ò˜˜˜R™œ $ $ r¡(¤(Ñ+Ô+Ð+Ð+Ð+r   c                 óX  — ddl m} d„ } ||¦  «        }t          j        d¦  «        df}|                       ||Ž  ||Ž ¦  «         |                      t          |j        |j        d                  j        ¦  «        d¦  «         |j        |j        d                  j        d         }|                      t          |j        ¦  «        d¦  «         t          j        d¦  «        df}|                       ||Ž  ||Ž ¦  «         |                      t          |j        ¦  «        d¦  «         dS )	z<
        https://github.com/numba/numba/issues/2481
        r   rœ   c                 ó’   — | d d |…         }d}t          |j        ¦  «        D ]$}t          ¦   «          ||d d d…         |         z  }Œ%|S )Nr&   rð   )r   r   r0   )r    r  ÚAr4   r  s        r   r¤   z<TestLoopLiftingInAction.test_recompilation_loop.<locals>.foo  sV   € ð �#�#�A�#”ˆAØˆAÝ˜1œ6‘]”]ð #ð #�Ý‘”�Ø˜˜$˜$˜B˜$œ œ
‘N��ØˆHr   rB   r&   rð   r:   N)	r¬   r�   r   r1   rT   rU   r\   rÇ   rV   )rW   r�   r¤   r·   rh   rV   s         r   Útest_recompilation_loopz/TestLoopLiftingInAction.test_recompilation_loop  s.  € ð 	ÐÐÐÐÐð	ð 	ð 	ð ˆs�3‰xŒxˆåŒy˜‰}Œ}˜aÐˆØ×Ò˜˜˜d˜ T T¨4 [Ñ1Ô1Ð1à×Ò�˜Tœ^¨D¬O¸AÔ,>Ô?ÔFÑGÔGÈÑKÔKÐKØ” ¤°Ô 2Ô3Ô:¸1Ô=ˆà×Ò�˜VÔ.Ñ/Ô/°Ñ3Ô3Ð3åŒy˜‰}Œ}˜bÐ ˆØ×Ò˜˜˜d˜ T T¨4 [Ñ1Ô1Ð1à×Ò�˜VÔ.Ñ/Ô/°Ñ3Ô3Ð3Ð3Ð3r   c                 ór  — d„ }ddl m}   |¦   «         |¦  «        } |d¦  «         |                      |j        |j        d                  j        d¦  «           |d¬¦  «        |¦  «        } |d¦  «         |                      t          |j        |j        d                  j        ¦  «        d¦  «         d S )Nc                 ó(   — d„ dD ¦   «          dD ]}Œ| S )Nc                 ó   — g | ]}|‘ŒS r‰   r‰   )Ú.0r  s     r   ú
<listcomp>zRTestLoopLiftingInAction.test_lift_listcomp_block0.<locals>.foo.<locals>.<listcomp>/  s   € ÐÐÐ�1ˆQÐÐÐr   )r&   r‰   )ÚXr    s     r   r¤   z>TestLoopLiftingInAction.test_lift_listcomp_block0.<locals>.foo.  s-   € ØÐ˜ÐÑÔÐØð ð �ØØˆHr   r   rœ   r&   r‰   TrÎ   )r¬   r�   rT   r\   rÇ   rV   rU   )rW   r¤   r�   Úfs       r   Útest_lift_listcomp_block0z1TestLoopLiftingInAction.test_lift_listcomp_block0,  sÈ   € ð	ð 	ð 	ð 	ÐÐÐÐÐØˆCˆC‰EŒE�#‰JŒJˆØ	ˆˆ!‰ŒˆØ×Ò˜œ Q¤\°!¤_Ô5Ô<¸bÑAÔAÐAàˆCˆC˜ÐÑÔ˜sÑ#Ô#ˆØ	ˆˆ!‰ŒˆØ×Ò�˜Qœ[¨¬°a¬Ô9Ô@ÑAÔAÀ1ÑEÔEÐEÐEÐEr   c           	      ó”  — ddl m} |d„ ¦   «         }t          ddddddd¬¦  «        } |d
i |¤Ž} |j        d
i |¤Ž}|                      |d         |d         ¦  «         |                      |d	         |d	         ¦  «         |j        |j        d                  j        \  }|                      t          |j
        ¦  «        d	¦  «         d S )Nr   rœ   c                 óÐ  — t          j        |¦  «        t          j        |¦  «        }}||c|d<   |d<   t          j        |dz
  ¦  «        D ]Š}	t          j        | ||	         z  ¦  «        |t          j        | ||	         z  ¦  «        z  z   ||	dz   <   t          j        |||	         z  ¦  «        |t          j        |||	         z  ¦  «        z  z   ||	dz   <   Œ‹t          ¦   «          ||fS )Nr   r&   )r   rÚ   r1   ÚsinÚcosr0   )
r!   rä   r4   r7   Úx0Úy0rï   ÚxsÚysr"   s
             r   r¤   zDTestLoopLiftingInAction.test_lift_objectmode_issue_4223.<locals>.fooH  sÕ   € å”X˜a‘[”[¥"¤(¨1¡+¤+�ˆBØ˜rˆLˆBˆq‰E�2�a‘5Ý”Y˜q ™s‘^”^ð Dð D�Ýœ&  R¨¤U¡Ñ+Ô+¨aµ"´&¸¸RÀ¼U¹Ñ2CÔ2CÑ.CÑC��1�Q‘3‘Ýœ&  R¨¤U¡Ñ+Ô+¨aµ"´&¸¸RÀ¼U¹Ñ2CÔ2CÑ.CÑC��1�Q‘3‘�Ý‰HŒHˆHØ�r�6ˆMr   g333333û?g333333ã?g333333ó?éÈ   )r!   rä   r4   r7   r&  r'  rï   r&   r‰   )r¬   r�   ÚdictrÔ   rf   r\   rÇ   rV   rT   rU   Únopython_signatures)rW   r�   r¤   r   rj   ri   rV   s          r   Útest_lift_objectmode_issue_4223z7TestLoopLiftingInAction.test_lift_objectmode_issue_4223E  sî   € ØÐÐÐÐÐà	ð	ð 	ñ 
Œð	õ ˜˜s c¨S°Q¸1ÀÐDÑDÔDˆØˆcˆmˆm�FˆmˆmˆØ�3”;Ð(Ð( Ð(Ð(ˆØ×Ò  A¤¨°¬Ñ4Ô4Ð4Ø× Ò   Q¤¨°!¬Ñ5Ô5Ð5Ø”= ¤°Ô!2Ô3Ô:‰ˆØ×Ò�˜VÔ7Ñ8Ô8¸!Ñ<Ô<Ð<Ð<Ð<r   N)r–   r—   r˜   rÊ   r×   rà   rê   rô   r÷   rú   r  r  r  r  r  r!  r-  r‰   r   r   rÅ   rÅ   E  sé   € € € € € ð1ð 1ð 1ð0ð 0ð 0ð&:ð :ð :ð,0ð 0ð 0ð22ð 2ð 2ð&2ð 2ð 2ð"2ð 2ð 2ð7ð 7ð 7ð82ð 2ð 2ð8ð 8ð 8ð,ð ,ð ,ð*4ð 4ð 4ð>Fð Fð Fð2=ð =ð =ð =ð =r   rÅ   Ú__main__)%Úior   Únumpyr   Ú
numba.corer   Únumba.core.compilerr   r   Únumba.tests.supportr   r   r	   ÚunittestrS   Úenable_pyobjectÚenable_loopliftr­   rw   Úenable_pyobject_loopliftr   r#   r)   r5   r8   r=   r@   rC   rF   rH   rK   rN   rP   rš   rÅ   r–   Úmainr‰   r   r   ú<module>r9     s3  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø €€€ð �‘”€Ø!%€Ô Ø!%€Ô à(×-Ò-Ñ/Ô/Ð Ø37Ð Ô 0ðð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðð ð ðð ð ðð ð ðð ð ðð ð ð
ð 
ð 
ðð ð ðsHð sHð sHð sHð sH�o xñ sHô sHð sHðlGLð GLð GLð GLð GL˜hñ GLô GLð GLðTS=ð S=ð S=ð S=ð S=˜o¨xñ S=ô S=ð S=ðl ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   