Ë
    èÿæiyC  ã                   ód  — 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j#                  «       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jH                  «        yy)é    )ÚStringION)Útypes)Úcompile_extraÚFlags)ÚTestCaseÚtagÚMemoryLeakMixinTc                 óœ   — ddl m} |j                  dd «       |j                  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       úq/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_looplifting.pyÚcompile_isolatedr      sT   € Ý.à
×Ñ�m TÔ*Ø
×Ñ�h Ô#ÜØ×!Ñ!Ø×!Ñ!ØØñ	ð
 ñð ó    c                 ón   — t        j                  d«      }t        |j                  «      D ]  }| ||<   Œ	 |S )Né   )ÚnpÚemptyÚrangeÚsize©ÚxÚaÚis      r   Úlift1r#       s1   € ä
�‰�‹€AÜ�1—6‘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)   )   sR   € ä
�‰�Ó€AÜ�1—7‘7˜1‘:ÖˆÜ�q—w‘w˜q‘zÖ"ˆAàˆAˆa�ˆdŠ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   sO   € ä‹€AÜ
�	‰	�!œ2Ÿ8™8Ô$€AØ	€AÜ�1—7‘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   <   sc   € ä‹€AÜ
�	‰	�!œ2Ÿ8™8Ô$€AØ	€AØ	€AÜ�1—7‘7˜1‘:ÖˆØ	ˆQˆq‰T�A‰X‰ˆØ	ˆQ‰‰ð ð ˆq‰5€Lr   c                 óŽ   — t        «       }t        j                  d«      }t        |j                  d   «      D ]
  }|dkD  sŒ	 |S  |S )Nr%   r   é   ©r0   r   r1   r   r'   ©r    r3   r!   r"   s       r   Úlift5r=   G   sC   € Ü‹€AÜ
�	‰	�!‹€AÜ�1—7‘7˜1‘:Öˆàˆq‹5ØØ€Hð	 ð €Hr   c              #   óª   K  — t        j                  d«      }d–— t        |j                  «      D ]  }| ||<   Œ	 t        j                  |«      –— y ­w)Nr   r   )r   r   r   r   Úsumr   s      r   Ú	lift_gen1r@   P   sB   è ø€ ä
�‰�‹€AØ
‚GÜ�1—6‘6Ž]ˆàˆˆ!Šð ô �&‰&�‹)ƒOùs   ‚AAc                  ór   — t        j                  d«       t        d«      D ]  } t        d«      D ]  }  y Œ y)Nr&   é
   r:   )r   r   r   )r"   r(   s     r   Úlift_issue2561rC   Y   s1   € Ü‡H�HˆQ„KÜ�2ŽYˆÜ�r–ˆAÚñ ð ð r   c                 óp   — t        j                  d«      }t        |j                  d   «      D ]  }|c S  |S ©Nr%   r   )r   r1   r   r'   r   s      r   Úreject1rF   `   s2   € Ü
�	‰	�!‹€AÜ�1—7‘7˜1‘:ÖˆàŠð ð €Hr   c              #   ó’   K  — t        «       }t        j                  d«      }t        |j                  d   «      D ]	  }||   –— Œ y ­wrE   r;   r<   s       r   Úreject_gen1rH   h   s:   è ø€ Ü‹€AÜ
�	‰	�!‹€AÜ�1—7‘7˜1‘:Öˆà�‰d‹
ñ ùs   ‚AAc              #   óÀ   K  — t        «       }t        j                  d«      }t        |j                  «      D ]#  }||   | z   }t        |«      D ]  }|dz  }Œ	 |–— Œ% y ­w)Nr   r:   )r0   r   r1   r   r   )r    r3   r!   r"   Úresr(   s         r   Úreject_gen2rK   o   sY   è ø€ Ü‹€AÜ
�	‰	�!‹€AÜ�1—6‘6Ž]ˆà�‰d�Q‰hˆÜ�q–ˆAð ˜‘(‰Cð ð ‹	ñ ùs   ‚AAc                 óÔ   — t        j                  dt         j                  ¬«      }t        |j                  «      D ]*  }t        «       }t        j                  |dz   «      |   ||<   Œ, |S )Nr   r-   r&   )r   r   Úint32r   r   r0   r1   )r    r!   r"   r3   s       r   Úreject_npm1rN   {   sQ   € Ü
�‰�œ"Ÿ(™(Ô#€AÜ�1—6‘6Ž]ˆä‹HˆÜ�y‰y˜˜Q™Ó Ñ"ˆˆ!Šð ð
 €Hr   c                   ól   — 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y)ÚTestLoopLiftingc           	      ó°   — ddl m} t        |j                  |j                  ||d t
        i ¬«      }| j                  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‡   sM   € Ý2äØ×%Ñ%Ø×%Ñ%Ø�HØ¤N¸2ô	
ˆð 	×Ñœ˜TŸ[™[Ó)¨1Ô-Øˆr   c                 ó¤   — |j                   d   }|j                  j                  «       \  }| j                  |j                  j
                  «       y ©Nr   )rV   Ú	overloadsÚvaluesÚ
assertTrueÚfndescÚnative)rW   rX   ÚjitloopÚloopcress       r   Úassert_lifted_nativez$TestLoopLifting.assert_lifted_native”   s;   € à—+‘+˜a‘.ˆØ×&Ñ&×-Ñ-Ó/‰
ˆØ�‰˜Ÿ™×.Ñ.Õ/r   c                 ó–   — | j                  ||«      } ||Ž } |j                  |Ž }| j                  |«       | j                  ||«       y)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š   sM   € ð �}‰}˜V XÓ.ˆÙ˜4�=ˆØˆd×Ñ Ð%ˆØ×!Ñ! $Ô'à×Ñ ¨#Õ.r   c                 óº   — | j                  ||«      }t         ||Ž «      }t         |j                  |Ž «      }| j                  |«       | j	                  ||«       y)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¥   sX   € ð
 �}‰}˜V XÓ.ˆÜ™ ˜Ó&ˆÜÐ#�4×#Ñ# TÐ*Ó+ˆØ×!Ñ! $Ô'à×Ñ ¨#Õ.r   c                 óª   — t        ||t        ¬«      }| j                  |j                  «        ||Ž } |j                  |Ž }| j                  ||«       y)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±   sR   € ô   ¨Ü&4ô6ˆà×Ñ˜Ÿ™Ô%Ù˜4�=ˆØˆd×Ñ Ð%ˆà×Ñ ¨#Õ.r   c                 óÎ   — t        ||t        ¬«      }| j                  |j                  «       t	         ||Ž «      }t	         |j
                  |Ž «      }| j                  ||«       y)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ˆà×Ñ˜Ÿ™Ô%Ü™ ˜Ó&ˆÜÐ#�4×#Ñ# TÐ*Ó+ˆØ×Ñ ¨#Õ.r   c                 óP   — | j                  t        t        j                  fd«       y ©N)é{   )rk   r#   r   Úintp©rW   s    r   Ú
test_lift1zTestLoopLifting.test_lift1È   ó   € Ø×Ñœ5¤5§:¡: -°Õ8r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rk   r)   r   rx   ry   s    r   Ú
test_lift2zTestLoopLifting.test_lift2Ë   r{   r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rk   r5   r   rx   ry   s    r   Ú
test_lift3zTestLoopLifting.test_lift3Î   r{   r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rk   r8   r   rx   ry   s    r   Ú
test_lift4zTestLoopLifting.test_lift4Ñ   r{   r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rk   r=   r   rx   ry   s    r   Ú
test_lift5zTestLoopLifting.test_lift5Ô   r{   r   c                 ó2   — | j                  t        dd«       y )N© )rk   rC   ry   s    r   Útest_lift_issue2561z#TestLoopLifting.test_lift_issue2561×   s   € Ø×Ñœ>¨2¨rÕ2r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rn   r@   r   rx   ry   s    r   Útest_lift_gen1zTestLoopLifting.test_lift_gen1Ú   s   € Ø×$Ñ$¤Y´·±°¸vÕFr   c                 óP   — | j                  t        t        j                  fd«       y rv   )rr   rF   r   rx   ry   s    r   Útest_reject1zTestLoopLifting.test_reject1Ý   s   € Ø×Ñœ7¤U§Z¡Z M°6Õ:r   c                 óP   — | j                  t        t        j                  fd«       y rv   )rt   rH   r   rx   ry   s    r   Útest_reject_gen1z TestLoopLifting.test_reject_gen1à   ó   € Ø×$Ñ$¤[´5·:±:°-ÀÕHr   c                 óP   — | j                  t        t        j                  fd«       y rv   )rt   rK   r   rx   ry   s    r   Útest_reject_gen2z TestLoopLifting.test_reject_gen2ã   r�   r   N)Ú__name__Ú
__module__Ú__qualname__rY   rc   rk   rn   rr   rt   rz   r}   r   r�   rƒ   r†   rˆ   rŠ   rŒ   r�   r…   r   r   rP   rP   …   sU   „ òò0ò	/ò
/ò
/ò	/ò9ò9ò9ò9ò9ò3òGò;òIóIr   rP   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestLoopLiftingAnnotatec                 ó  ‡
— ddl m} d„ Š
ˆ
fd„}  |d¬«      |«      }t        j                  d«      }|j	                  «       } ||«      }t        j
                  j                  ||dz   «       t        «       }|j                  |¬	«       |j                  «       }|j                  «        | j                  d
|«       |j                  j                  dz   }	| j                  dj                  |	¬«      |«       | j                  d|«       y)zO
        Verify that annotation works as expected with one lifted loop
        r   ©Újitc                   ó   — y ©Nr…   r…   r   r   Úbarz4TestLoopLiftingAnnotate.test_annotate_1.<locals>.barï   ó   € Ør   c                 ód   •—  ‰«        t        | j                  «      D ]  }| |xx   dz  cc<   Œ | S )Nr&   ©r   r   )r    r"   rš   s     €r   Úfooz4TestLoopLiftingAnnotate.test_annotate_1.<locals>.fooò   s.   ø€ ÙŒEÜ˜1Ÿ6™6–]�Ø�!“˜‘	”ð #ð ˆHr   T©ÚforceobjrB   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è   sÙ   ø€ õ 	ò	ô	ð "‰s˜DÔ! #Ó&ˆä�I‰I�b‹MˆØ—‘“ˆÙ�‹GˆÜ
�
‰
×Ñ  5¨1¡9Ô-ä‹jˆØ×Ñ ÐÔ$Ø—\‘\“^ˆ
Ø�	‰	Œà�‰Ð:¸JÔGØ�|‰|×*Ñ*¨QÑ.ˆØ�‰Ð+×2Ñ2¸Ð2Ó=¸zÔJØ�‰Ð'¨Õ4r   c                 ón  ‡— ddl m} d„ Šˆfd„}  |d¬«      |«      }t        j                  d«      }|j	                  «       } ||«      }t        j
                  j                  ||dz   d	z  «       t        «       }|j                  |¬
«       |j                  «       }|j                  «        | j                  d|«       |j                  j                  dz   }	|j                  j                  dz   }
| j                  dj                  |	¬«      |«       | j                  dj                  |
¬«      |«       y)zP
        Verify that annotation works as expected with two lifted loops
        r   r–   c                   ó   — y 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  sM   ø€ ÙŒEä˜1Ÿ6™6–]�Ø�!“˜‘	”ð #ô ˜1Ÿ6™6–]�Ø�!“˜‘	”ð #àˆHr   TrŸ   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
  sÿ   ø€ õ 	ò	ô	ð "‰s˜DÔ! #Ó&ˆä�I‰I�b‹MˆØ—‘“ˆÙ�‹GˆÜ
�
‰
×Ñ  E¨A¡I°¡?Ô3ä‹jˆØ×Ñ ÐÔ$Ø—\‘\“^ˆ
Ø�	‰	Œà�‰Ð:¸JÔGØ—‘×+Ñ+¨aÑ/ˆØ—‘×+Ñ+¨aÑ/ˆØ�‰Ð+×2Ñ2¸Ð2Ó>À
ÔKØ�‰Ð+×2Ñ2¸Ð2Ó>À
ÕKr   N)r�   r‘   r’   r¸   r¿   r…   r   r   r”   r”   ç   s   „ ò 5óD$Lr   r”   c                   ó`   — 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y)ÚTestLoopLiftingInActionc                 ó†   — |j                   |j                  d      j                  }| j                  t	        |«      |«       y r[   )r\   Ú
signaturesrV   rT   rU   )rW   ÚjittedÚ	loopcountrV   s       r   Úassert_has_liftedz)TestLoopLiftingInAction.assert_has_lifted2  s7   € Ø×!Ñ! &×"3Ñ"3°AÑ"6Ñ7×>Ñ>ˆØ×Ñœ˜V› iÕ0r   c                 ó  — ddl m}m}m}m}  | |||d d  «      d¬«      d„ «       }dD ]]  }t        j                  dd¬	«      }t        j                  dd¬	«      } |||«       |j                  ||«       | j                  ||«       Œ_ y )
Nr   )r—   ÚvoidrM   ÚdoubleTrŸ   c                 ó°   — | dk(  r)t        |j                  d   «      D ]  }||   dz  ||<   Œ y t        |j                  d   «      D ]  }||   dz   ||<   Œ y )Nr   g       @ç      ð?)r   r'   )Úur!   r"   s      r   Úforloop_with_ifz?TestLoopLiftingInAction.test_issue_734.<locals>.forloop_with_if9  s[   € à�AŠvÜ˜qŸw™w q™zÖ*�AØ˜Q™4 #™:�A�a’Dñ +ô ˜qŸw™w q™zÖ*�AØ˜Q™4 #™:�A�a’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_7346  s‚   € ß2Ó2á	‰T�%˜¡˜Ó#¨dÔ	3ñ	&ó 
4ð	&ó ˆAÜ—9‘9˜R wÔ/ˆDÜ—9‘9˜R wÔ/ˆDÙ˜A˜tÔ$Ø×#Ñ# A tÔ,Ø×#Ñ# D¨$Õ/ñ r   c                 óÈ   — ddl m}  |dd¬«      d„ «       }t        j                  g d¢«      }t        j                  j                  |j                  |«       ||«      «       y )Nr   r–   zf8[:](f8[:])TrŸ   c                 óê   — t        j                  t        | «      «      }d}t        t        | «      «      D ]  }|dz  }| |   ||<   | |   dk\  sŒ n t        |dz   t        | «      «      D ]  }d||<   Œ	 |S )Nr   r&   rB   )r   ÚzerosrU   r   )r    rJ   ÚindÚiis       r   Útestz4TestLoopLiftingInAction.test_issue_812.<locals>.testL  sx   € ä—(‘(œ3˜q›6Ó"ˆCØˆCÜœC ›F–m�Ø�q‘�Ø˜S™6��C‘Ø�S‘6˜R“<Ùð	 $ô ˜C !™G¤S¨£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_812I  sO   € Ýá	ˆ^ dÔ	+ñ	ó 
,ð	ô �H‰HÒ6Ó7ˆÜ
�
‰
×Ñ §¡¨Q£±°a³Õ9r   c                 óÊ  — ddl m} d„ }t        j                  d«      }t	        «       }  |d¬«      |«      } |||«      } |||«      }| j                  |d   |d   «       | j                  |d   |d   «       |j                  |j                  d      j                  d   }|j                  j                  «       \  }	| j                  |	j                  j                  «       y )Nr   r–   c                 óF   — d}| D ]  }||z  }Œ	 |j                  «       }||fS r[   )Ú__hash__)r!   ÚbÚsÚeÚhs        r   Úlift_issue2368z?TestLoopLiftingInAction.test_issue_2368.<locals>.lift_issue2368b  s.   € ØˆAÛ�Ø�Q‘‘ð à—
‘
“ˆAØ�a�4ˆKr   rB   TrŸ   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_2368_  sÊ   € Ýò	ô �G‰G�B‹KˆÜ‹HˆØ#‘˜dÔ# NÓ3ˆá! ! QÓ'ˆÙ�Q˜‹lˆà×Ñ˜ !™ c¨!¡fÔ-Ø×Ñ˜ !™ c¨!¡fÔ-à×"Ñ" 6×#4Ñ#4°QÑ#7Ñ8×?Ñ?ÀÑBˆØ×&Ñ&×-Ñ-Ó/‰
ˆà�‰˜Ÿ™×.Ñ.Õ/r   c                 ó  — ddl m}  |d¬«      d„ «       }| j                  |j                  d«       |d«      «       | j	                  |d¬«       | j                  |j                  d«       |d«      «       | j	                  |d¬«       y )	Nr   r–   TrŸ   c                 ó.   — d}t        | «      D ]  }|}Œ |S r[   ©r   ©ÚnrJ   r"   s      r   r×   z?TestLoopLiftingInAction.test_no_iteration_w_redef.<locals>.test}  s   € àˆCÜ˜1–X�Ø‘ð àˆJr   éÿÿÿÿr&   ©rÅ   ©r¨   r—   rT   rÎ   rÆ   ©rW   r—   r×   s      r   Útest_no_iteration_w_redefz1TestLoopLiftingInAction.test_no_iteration_w_redefx  s   € õ 	á	�dÔ	ñ	ó 
ð	ð 	×Ñ˜Ÿ™ bÓ)©4°«8Ô4Ø×Ñ˜t¨qÐÔ1à×Ñ˜Ÿ™ a›©$¨q«'Ô2Ø×Ñ˜t¨qÐÕ1r   c                 ó  — ddl m}  |d¬«      d„ «       }| j                  |j                  d«       |d«      «       | j	                  |d¬«       | j                  |j                  d«       |d«      «       | j	                  |d¬«       y )	Nr   r–   TrŸ   c                 ó4   — d}t        | «      D ]  }||z  }Œ	 |S r[   rç   rè   s      r   r×   z7TestLoopLiftingInAction.test_no_iteration.<locals>.testŽ  s#   € àˆCÜ˜1–X�Ø�q‘‘ð àˆJr   rê   r&   rë   rì   rí   s      r   Útest_no_iterationz)TestLoopLiftingInAction.test_no_iteration‹  s}   € Ýá	�dÔ	ñ	ó 
ð	ð 	×Ñ˜Ÿ™ bÓ)©4°«8Ô4Ø×Ñ˜t¨qÐÔ1à×Ñ˜Ÿ™ a›©$¨q«'Ô2Ø×Ñ˜t¨qÐÕ1r   c                 ó¢   — ddl m}  |d¬«      d„ «       }| j                  |j                  d«       |d«      «       | j	                  |d¬«       y )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�Ø‘ð àˆJr   r&   rë   rì   rí   s      r   Útest_define_in_loop_bodyz0TestLoopLiftingInAction.test_define_in_loop_bodyœ  sM   € åá	�dÔ	ñ	ó 
ð	ð 	×Ñ˜Ÿ™ a›©$¨q«'Ô2Ø×Ñ˜t¨qÐÕ1r   c                 ó¦   — ddl m}  |d¬«      d„ «       }t        j                  d«      }| j	                  |j                  |«       ||«      «       y)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(  r7| j                  dk(  r"d}d}t	        | j
                  d   «      D ]  }Œ y 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´  s[   € ä�C‹yœBŸJ™JÒ&Ø—8‘8˜q’=Ø �FØ�AÜ" 3§9¡9¨Q¡<Ö0˜Øñ 1ô $�Oà�Ø‘��1Ø�r   rB   N)r¨   r—   r   r1   rT   rÎ   )rW   r—   r×   rü   s       r   Útest_invalid_argumentz-TestLoopLiftingInAction.test_invalid_argumentª  sJ   € õ 	á	�dÔ	ñ	ó 
ð	ô �i‰i˜‹mˆØ×Ñ˜Ÿ™ cÓ*©D°«IÕ6r   c                 óž   — ddl m}  |d¬«      d„ «       }| j                  |j                  «        |«       «       | j	                  |d¬«       y )Nr   r–   TrŸ   c                  óJ   — d} d}t        d«      D ]  }|dkD  rd} || z  }Œ || fS )Nr,   r   r:   r¼   rç   )r    Úyr"   s      r   r×   zHTestLoopLiftingInAction.test_conditionally_defined_in_loop.<locals>.testÈ  s:   € àˆAØˆAÜ˜1–X�Ø�q’5Ø�1Ø�Q‘‘ð ð �a�4ˆKr   r&   rë   rì   rí   s      r   Ú"test_conditionally_defined_in_loopz:TestLoopLiftingInAction.test_conditionally_defined_in_loopÆ  sI   € ÝÙ	�dÔ	ñ	ó 
ð	ð 	×Ñ˜Ÿ™›©«Ô0Ø×Ñ˜t¨qÐÕ1r   c                 óä   — ddl m} dd l}d„ }|j                  «       5  |j	                  d«         |d¬«      |«      }| j                   |d«       |d«      «       d d d «       y # 1 sw Y   y xY w)Nr   r–   c                 ó*   — | rt        d«      D ]  }Œ y y )NrB   rç   )r!   r"   s     r   r   zRTestLoopLiftingInAction.test_stack_offset_error_when_has_no_return.<locals>.pyfuncÙ  s   € ÙÜ˜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^   € ÝÛò	ð
 ×$Ñ$Õ&Ø×!Ñ! 'Ô*à&‘C Ô& vÓ.ˆEØ×Ñ™V D›\©5°«;Ô7÷	 '×&Ñ&ús   ž?A&Á&A/c                 ó|   ‡— ddl m} d„ Šˆfd„}  |d¬«      |«      }| j                   |d«       |d«      «       y)	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                 óL   •— d}t        | «      D ]  }||z   }Œ	 | ‰| «      z
  }|S )Nr÷   rç   )r    rá   Úkrš   s      €r   rž   z<TestLoopLiftingInAction.test_variable_scope_bug.<locals>.fooï  s1   ø€ ØˆAÜ˜1–X�Ø˜‘E‘ð à‘C˜“F‘
ˆAØˆHr   TrŸ   rB   N)r¨   r—   rT   )rW   r—   rž   r³   rš   s       @r   Útest_variable_scope_bugz/TestLoopLiftingInAction.test_variable_scope_bugä  s=   ø€ õ 	ò	ô	ð "‰s˜DÔ! #Ó&ˆØ×Ñ™˜R›¡$ r£(Õ+r   c                 óT  — ddl m} d„ }  |d¬«      |«      }t        j                  d«      df}| j	                   ||Ž  ||Ž «       | j	                  t        |j                  |j                  d      j                  «      d«       |j                  |j                  d      j                  d   }| j	                  t        |j                  «      d«       t        j                  d«      df}| j	                   ||Ž  ||Ž «       | j	                  t        |j                  «      d	«       y
)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ÿ  sI   € ð ‘#�A�#‘ˆAØˆAÜ˜1Ÿ6™6–]�Ü”Ø˜™$˜B˜$™ ™
‘N‘ð #ð ˆHr   TrŸ   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˜DÔ! #Ó&ˆä�y‰y˜‹}˜aÐˆØ×Ñ™˜d˜¡T¨4 [Ô1à×Ñœ˜TŸ^™^¨D¯O©O¸AÑ,>Ñ?×FÑFÓGÈÔKØ—‘ §¡°Ñ 2Ñ3×:Ñ:¸1Ñ=ˆà×Ñœ˜V×.Ñ.Ó/°Ô3ä�y‰y˜‹}˜bÐ ˆØ×Ñ™˜d˜¡T¨4 [Ô1à×Ñœ˜V×.Ñ.Ó/°Õ3r   c           	      ó€  — ddl m}  |d¬«      d„ «       }t        ddddddd	¬
«      } |di |¤Ž} |j                  di |¤Ž}| j	                  |d   |d   «       | j	                  |d   |d   «       |j
                  |j                  d      j                  \  }| j                  t        |j                  «      d«       y )Nr   r–   TrŸ   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>.foo  sÆ   € ä—X‘X˜a“[¤"§(¡(¨1£+�ˆBØ˜rˆLˆBˆq‰E�2�a‘5Ü—Y‘Y˜q ™s–^�ÜŸ&™&  R¨¡U¡Ó+¨a´"·&±&¸¸RÀ¹U¹Ó2CÑ.CÑC��1�Q‘3‘ÜŸ&™&  R¨¡U¡Ó+¨a´"·&±&¸¸RÀ¹U¹Ó2CÑ.CÑC��1�Q‘3’ð $ô Œ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_4223  s¼   € Ýá	�dÔ	ñ	ó 
ð	ô ˜˜s c¨S°Q¸1ÀÔDˆÙ‰m�F‰mˆØ�3—;‘;Ñ( Ñ(ˆØ×Ñ  A¡¨°©Ô4Ø× Ñ   Q¡¨°!©Ô5Ø—=‘= §¡°Ñ!2Ñ3×:Ñ:‰ˆØ×Ñœ˜V×7Ñ7Ó8¸!Õ<r   c                 ó´  — ddl m}  |d¬«      d„ «       } |d¬«      d„ «       } |d¬«      d„ «       }t        j                  d«      }t        j                  d«      }| j	                   |||«      |j                  ||«      «       | j	                   |||«      |j                  ||«      «       | j	                   |||«      |j                  ||«      «       y )	Nr   r–   TrŸ   c                 ó<   — d}t        | |«      D ]
  \  }}||z   }Œ |S r[   )Úzip)ÚXÚYr"   r    r  s        r   Úudt_zipzDTestLoopLiftingInAction.test_lift_zip_and_enumerate.<locals>.udt_zip2  s)   € àˆAÜ˜A˜qž	‘��1Ø˜‘E‘ð "àˆHr   c                 ó:   — d}t        | «      D ]
  \  }}||z   }Œ |S r[   )Ú	enumerate)r#  r$  r"   ré   r    s        r   Úudt_enumeratezJTestLoopLiftingInAction.test_lift_zip_and_enumerate.<locals>.udt_enumerate:  s'   € àˆAÜ! !ž‘��1Ø˜‘E‘ð %àˆHr   c                 óT   — d}t        t        | |«      «      D ]  \  }\  }}||z   }Œ |S r[   )r'  r"  )r#  r$  r"   ré   r    r  s         r   Úudt_enumerate_zipzNTestLoopLiftingInAction.test_lift_zip_and_enumerate.<locals>.udt_enumerate_zipB  s2   € àˆAÜ&¤s¨1¨a£yÖ1‘	�‘6�A�qØ˜‘E‘ð 2àˆHr   r,   )r¨   r—   r   rã   rT   rÎ   )rW   r—   r%  r(  r*  r#  r$  s          r   Útest_lift_zip_and_enumeratez3TestLoopLiftingInAction.test_lift_zip_and_enumerate.  s×   € åá	�dÔ	ñ	ó 
ð	ñ 
�dÔ	ñ	ó 
ð	ñ 
�dÔ	ñ	ó 
ð	ô �G‰G�A‹JˆÜ�G‰G�A‹Jˆà×Ñ™  A›¨¯©¸¸1Ó(=Ô>Ø×Ñ™ q¨!Ó,¨m×.CÑ.CÀAÀqÓ.IÔJØ×ÑÑ*¨1¨aÓ0Ø*×2Ñ2°1°aÓ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Á   1  sI   „ ò1ò0ò&:ò,0ò22ò&2ò"2ò7ò82ò8ò,ò*4ò@=ó*!:r   rÁ   Ú__main__)%Úior   Únumpyr   Ú
numba.corer   Únumba.core.compilerr   r   Únumba.tests.supportr   r   r	   ÚunittestrS   Úforce_pyobjectÚenable_loopliftr©   Úpyobject_looplift_flagsÚenable_pyobject_loopliftr   r#   r)   r5   r8   r=   r@   rC   rF   rH   rK   rN   rP   r”   rÁ   r�   Úmainr…   r   r   Ú<module>r8     sÖ   ðÝ Û å ß 4ß >Ñ >Û ñ “€Ø $€Ô Ø!%€Ô à(×-Ñ-Ó/Ð Ø37Ð Ô 0òòòòò	òòòòòò
òô_I�o xô _IôDGL˜hô GLôT^:˜o¨xô ^:ðB	 ˆzÒØ€H‡M�M…Oð r   