Ë
    èÿæiUv  ã                   óJ  — d Z ddlZddlmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZ e	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z G d	„ d
ee«      Z G d„ dee«      Z G d„ dee«      Zedk(  r ej.                  «        yy)z0
Test bytecode fixes provided in interpreter.py
é    N)ÚjitÚnjitÚobjmodeÚtypeofÚ	literally)Úoverload)Útypes)ÚUnsupportedBytecodeError)ÚTestCaseÚMemoryLeakMixinÚskip_unless_py10_or_laterc/                 ó  — | |z   |z   |z   |z   |z   |z   |z   |z   |	z   |
z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   |z   | z   |!z   |"z   |#z   |$z   |%z   |&z   |'z   |(z   |)z   |*z   |+z   |,z   |-z   |.z   S ©N© )/Úarg0Úarg1Úarg2Úarg3Úarg4Úarg5Úarg6Úarg7Úarg8Úarg9Úarg10Úarg11Úarg12Úarg13Úarg14Úarg15Úarg16Úarg17Úarg18Úarg19Úarg20Úarg21Úarg22Úarg23Úarg24Úarg25Úarg26Úarg27Úarg28Úarg29Úarg30Úarg31Úarg32Úarg33Úarg34Úarg35Úarg36Úarg37Úarg38Úarg39Úarg40Úarg41Úarg42Úarg43Úarg44Úarg45Úarg46s/                                                  úq/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_interpreter.pyÚsum_jit_funcrA      só  € ðf 	Ø
ñ	à
ñ	ð ñ	ð ñ		ð
 ñ	ð ñ	ð ñ	ð ñ	ð ñ		ð ñ
	ð ñ	ð ñ	ð ñ	ð ñ	ð ñ	ð  ñ!	ð" ñ#	ð$ ñ%	ð& ñ'	ð( ñ)	ð* ñ+	ð, ñ-	ð. ñ/	ð0 ñ1	ð2 ñ3	ð4 ñ5	ð6 ñ7	ð8 ñ9	ð: ñ;	ð< ñ=	ð> ñ?	ð@ ñA 	ðB ñC!	ðD ñE"	ðF ñG#	ðH ñI$	ðJ ñK%	ðL ñM&	ðN ñO'	ðP ñQ(	ðR ñS)	ðT ñU*	ðV ñW+	ðX ñY,	ðZ ñ[-	ð\ ñ].	ð0ó    c                   óî   — e Zd ZdZdZdZd„ Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚTestCallFunctionExPeepHoleaž  
    gh #7812

    Tests that check a peephole optimization for Function calls
    in Python 3.10. The bytecode changes when
    (n_args / 2) + n_kws > 15, which moves the arguments from
    the stack into a tuple and dictionary.

    This peephole optimization updates the IR to use the original format.
    There are different paths when n_args > 30 and n_args <= 30 and when
    n_kws > 15 and n_kws <= 15.
    é   é   c                 ó¶  — t        ||z   «      D �cg c]  }d|› �‘Œ	 }}g }t        ||z   «      D ]'  }|dz  dk(  rd|› d�}nd|› �}|j                  |«       Œ) dj                  |«      }d|› d�}|d	z  }t        |«      D ]  }|d
||   › d�z  }Œ t        |||z   «      D ]  }|d
||   › d||   › d�z  }Œ |dz  }i }	t        |dt        i|	«       |	d   S c c}w )zw
            Generates a function that calls sum_jit_func
            with the desired number of args and kws.
        Úargé   r   zpow(argz, 2)z, z	def impl(z):
z    return sum_jit_func(
z        z,
Ú=z    )
rA   Úimpl)ÚrangeÚappendÚjoinÚexecrA   )
ÚselfÚn_argsÚn_kwsÚiÚ
param_listÚ	args_listÚarg_valÚtotal_paramsÚ	func_textÚ
local_varss
             r@   Úgen_funcz#TestCallFunctionExPeepHole.gen_func…   s*  € ô
 */¨v¸©~Ô)>Ó?Ñ)> A˜˜A˜3’iÐ)>ˆ
Ð?Øˆ	Ü�v ‘~Ö&ˆAð �1‰u˜ŠzØ# A 3 dÐ+‘à ˜s˜)�Ø×Ñ˜WÕ%ð 'ð —y‘y Ó,ˆØ ˜~¨TÐ2ˆ	ØÐ1Ñ1ˆ	Ü�v–ˆAØ˜8 I¨a¡L >°Ð5Ñ5‰Ið ä�v˜v¨™~Ö.ˆAØ˜8 J¨q¡M ?°!°I¸a±L°>ÀÐEÑE‰Ið /à�YÑˆ	Øˆ
ÜˆY˜¬Ð6¸
ÔCØ˜&Ñ!Ð!ùò) @s   ‘Cc                 óæ   — t        | j                  «      D �cg c]  }|‘Œ }}| j                  | j                  d«      }|} t        «       |«      } ||Ž } ||Ž }| j	                  ||«       yc c}w )z˜
        Tests calling a function when n_args > 30 and
        n_kws = 0. This shouldn't use the peephole, but
        it should still succeed.
        r   N)rL   ÚTHRESHOLD_ARGSrZ   r   ÚassertEqual©rP   rS   Ú
total_argsÚfÚpy_funcÚcfuncÚaÚbs           r@   Útest_all_argsz(TestCallFunctionExPeepHole.test_all_args    sv   € ô "' t×':Ñ':Ô!;Ó<Ñ!;˜A’aÐ!;ˆ
Ð<Ø�M‰M˜$×-Ñ-¨qÓ1ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò =ó   ˜	A.c                 óæ   — t        | j                  «      D �cg c]  }|‘Œ }}| j                  d| j                  «      }|} t        «       |«      } ||Ž } ||Ž }| j	                  ||«       yc c}w )zR
        Tests calling a function when n_kws > 15 and
        n_args = 0.
        r   N)rL   ÚTHRESHOLD_KWSrZ   r   r]   r^   s           r@   Útest_all_kwsz'TestCallFunctionExPeepHole.test_all_kws¯   sv   € ô "' t×'9Ñ'9Ô!:Ó;Ñ!:˜A’aÐ!:ˆ
Ð;Ø�M‰M˜!˜T×/Ñ/Ó0ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò <rf   c                 ó   — | j                   dz
  }| j                  dz
  }t        ||z   «      D �cg c]  }|‘Œ }}| j                  ||«      }|} t	        «       |«      } ||Ž } ||Ž }	| j                  ||	«       yc c}w )zs
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args <= 30 and n_kws <= 15
        é   N©r\   rh   rL   rZ   r   r]   ©
rP   Ú	used_argsÚused_kwsrS   r_   r`   ra   rb   rc   rd   s
             r@   Útest_small_args_small_kwsz4TestCallFunctionExPeepHole.test_small_args_small_kws½   s�   € ð ×'Ñ'¨!Ñ+ˆ	Ø×%Ñ%¨Ñ)ˆÜ!&¨	°hÑ'?Ô!@ÓAÑ!@˜A’aÐ!@ˆ
ÐAØ�M‰M˜) XÓ.ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò Bs   ¯	A;c                 óú   — | j                   dz
  }| j                  }t        ||z   «      D �cg c]  }|‘Œ }}| j                  ||«      }|} t	        «       |«      } ||Ž } ||Ž }	| j                  ||	«       yc c}w )zr
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args <= 30 and n_kws > 15
        rk   Nrl   rm   s
             r@   Útest_small_args_large_kwsz4TestCallFunctionExPeepHole.test_small_args_large_kwsÍ   s‹   € ð ×'Ñ'¨!Ñ+ˆ	Ø×%Ñ%ˆÜ!&¨	°hÑ'?Ô!@ÓAÑ!@˜A’aÐ!@ˆ
ÐAØ�M‰M˜) XÓ.ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò Bó   ¬	A8c                 óú   — | j                   }| j                  dz
  }t        ||z   «      D �cg c]  }|‘Œ }}| j                  ||«      }|} t	        «       |«      } ||Ž } ||Ž }	| j                  ||	«       yc c}w )zr
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args > 30 and n_kws <= 15
        rk   Nrl   rm   s
             r@   Útest_large_args_small_kwsz4TestCallFunctionExPeepHole.test_large_args_small_kwsÝ   s‹   € ð ×'Ñ'ˆ	Ø×%Ñ%¨Ñ)ˆÜ!&¨	°hÑ'?Ô!@ÓAÑ!@˜A’aÐ!@ˆ
ÐAØ�M‰M˜) XÓ.ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò Brs   c                 óô   — | j                   }| j                  }t        ||z   «      D �cg c]  }|‘Œ }}| j                  ||«      }|} t	        «       |«      } ||Ž } ||Ž }	| j                  ||	«       yc c}w )zq
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args > 30 and n_kws > 15
        Nrl   rm   s
             r@   Útest_large_args_large_kwsz4TestCallFunctionExPeepHole.test_large_args_large_kwsí   s†   € ð ×'Ñ'ˆ	Ø×%Ñ%ˆÜ!&¨	°hÑ'?Ô!@ÓAÑ!@˜A’aÐ!@ˆ
ÐAØ�M‰M˜) XÓ.ˆØˆØ”“�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜˜AÕùò Bs   ©	A5c                 óŒ   ‡— d„ Št         ˆfd„«       }t        t         ‰«       «      «      } |«       }| j                  ||«       y)zO
        Tests calling an objectmode function with > 15 return values.
        c                   ó   — y)N)r   rk   é   é   é   rI   é   é   é   é	   é
   é   é   é   é   é   r   r   rB   r@   ra   zBTestCallFunctionExPeepHole.test_large_kws_objmode.<locals>.py_func  s   € ðrB   c                  ó.  •— t        di dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“Ž5   ‰«       \  } }}}}}}}}}	}
}}}}}ddd«        z   z   z   z   z   z   z   z   	z   
z   z   z   z   z   z   S # 1 sw Y   Œ8xY w)zÆ
            Wrapper to call py_func from objmode. This tests
            large kws with objmode. If the definition for the
            call is not properly updated this test will fail.
            rc   Úint64rd   ÚcÚdÚer`   ÚgÚhrS   ÚjÚkÚlÚmÚnÚoÚpNr   )r   )rc   rd   r‰   rŠ   r‹   r`   rŒ   r�   rS   rŽ   r�   r�   r‘   r’   r“   r”   ra   s                   €r@   Úobjmode_funczGTestCallFunctionExPeepHole.test_large_kws_objmode.<locals>.objmode_func  s•  ø€ ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ò!ñF “Iñ#ØØØØØØØØØØØØØØØØ÷EðJ Øñàñð ñð ñ	ð
 ñð ñð ñð ñð ñ	ð ñ
ð ñð ñð ñð ñð ñð÷Ið ús   »BÂBN)r   ÚsumÚlistr]   )rP   r•   rc   rd   ra   s       @r@   Útest_large_kws_objmodez1TestCallFunctionExPeepHole.test_large_kws_objmodeý   sF   ø€ ò
	ô( 
ó;	ó 
ð;	ôz ”‘W“Y“Ó ˆÙ‹NˆØ×Ñ˜˜AÕrB   c                 óÔ   — d„ }| j                  t        «      5 }  t        «       |«      d«       ddd«       | j                  dt	        j
                  «      «       y# 1 sw Y   Œ/xY w)ze
        Tests generating large args when one of the inputs
        has inlined controlflow.
        c                 ó²   — t        g d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘| rdnd‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘­ddiŽS ©Nrk   rz   r:   ©rA   ©Úflags    r@   Úinline_funczRTestCallFunctionExPeepHole.test_large_args_inline_controlflow.<locals>.inline_func^  s�  € Üð &Øð&àð&ð ð&ð ð	&ð
 ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð  ð!&ð" ð#&ð$ ð%&ð& ð'&ð( ð)&ð* ð+&ñ, ‘˜qð-&ð. ð/&ð0 ð1&ð2 ð3&ð4 ð5&ð6 ð7&ð8 ð9&ð: ð;&ð< ð=&ð> ð?&ð@ ðA&ðB ðC&ðD ðE&ðF ðG&ðH òI&ðJ ñK&ð &rB   FNú9You can resolve this issue by moving the control flow out©ÚassertRaisesr
   r   ÚassertInÚstrÚ	exception©rP   rŸ   Úraisess      r@   Ú"test_large_args_inline_controlflowz=TestCallFunctionExPeepHole.test_large_args_inline_controlflowX  sY   € ò'	ðR ×ÑÔ7Ô8¸FØˆFŒD‹F�;Ó Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Ð8úó   ™AÁA'c                 ór   — d„ }|} t        «       |«      } |d«      } |d«      }| j                  ||«       y)úœ
        Tests generating large args when one of the inputs
        has the change suggested in the error message
        for inlined control flow.
        c                 ó¶   — | rdnd}t        g d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘|‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘­ddiŽS r›   rœ   ©rž   Úa_vals     r@   rŸ   zVTestCallFunctionExPeepHole.test_large_args_noninlined_controlflow.<locals>.inline_func•  s’  € Ù‘A 1ˆEÜð &Øð&àð&ð ð&ð ð	&ð
 ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð  ð!&ð" ð#&ð$ ð%&ð& ð'&ð( ð)&ð* ð+&ð, ð-&ð. ð/&ð0 ð1&ð2 ð3&ð4 ð5&ð6 ð7&ð8 ð9&ð: ð;&ð< ð=&ð> ð?&ð@ ðA&ðB ðC&ðD ðE&ðF ðG&ðH òI&ðJ ñK&ð &rB   FN©r   r]   ©rP   rŸ   ra   rb   rc   rd   s         r@   Ú&test_large_args_noninlined_controlflowzATestCallFunctionExPeepHole.test_large_args_noninlined_controlflowŽ  s?   € ò(	ðT ˆØ”“�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜˜AÕrB   c                 óÔ   — d„ }| j                  t        «      5 }  t        «       |«      d«       ddd«       | j                  dt	        j
                  «      «       y# 1 sw Y   Œ/xY w)zù
        Tests generating only large args when one of the inputs
        has inlined controlflow. This requires a special check
        inside peep_hole_call_function_ex_to_call_function_kw
        because it usually only handles varkwargs.
        c                 ó¬   — t        g d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘| rdnd‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘­Ž S ©Nrk   rz   rœ   r�   s    r@   rŸ   zPTestCallFunctionExPeepHole.test_all_args_inline_controlflow.<locals>.inline_funcÍ  s�  € Üð %Øð%àð%ð ð%ð ð	%ð
 ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð  ð!%ð" ð#%ð$ ð%%ð& ð'%ð( ð)%ð* ð+%ñ, ‘˜qð-%ð. ð/%ð0 ð1%ð2 ð3%ð4 ð5%ð6 ð7%ð8 ð9%ð: ð;%ð< ð=%ð> ð?%ð@ ðA%ðB ðC%ðD ðE%ðF ðG%ðH òI%ð %rB   FNr    r¡   r¦   s      r@   Ú test_all_args_inline_controlflowz;TestCallFunctionExPeepHole.test_all_args_inline_controlflowÅ  sY   € ò&	ðP ×ÑÔ7Ô8¸FØˆFŒD‹F�;Ó Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Ð8úr©   c                 ór   — d„ }|} t        «       |«      } |d«      } |d«      }| j                  ||«       y)r«   c                 ó°   — | rdnd}t        g d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘|‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘­Ž S r´   rœ   r­   s     r@   rŸ   zTTestCallFunctionExPeepHole.test_all_args_noninlined_controlflow.<locals>.inline_func  s†  € Ù‘A 1ˆEÜð %Øð%àð%ð ð%ð ð	%ð
 ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð ð%ð  ð!%ð" ð#%ð$ ð%%ð& ð'%ð( ð)%ð* ð+%ð, ð-%ð. ð/%ð0 ð1%ð2 ð3%ð4 ð5%ð6 ð7%ð8 ð9%ð: ð;%ð< ð=%ð> ð?%ð@ ðA%ðB ðC%ðD ðE%ðF ðG%ðH òI%ð %rB   FNr¯   r°   s         r@   Ú$test_all_args_noninlined_controlflowz?TestCallFunctionExPeepHole.test_all_args_noninlined_controlflowü  s?   € ò'	ðR ˆØ”“�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜˜AÕrB   c                 óÔ   — d„ }| j                  t        «      5 }  t        «       |«      d«       ddd«       | j                  dt	        j
                  «      «       y# 1 sw Y   Œ/xY w)zd
        Tests generating large kws when one of the inputs
        has inlined controlflow.
        c                 ó€   — t        di dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“d| rd“ŽS d“ŽS )Nr   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rz   r   rœ   r�   s    r@   rŸ   zQTestCallFunctionExPeepHole.test_large_kws_inline_controlflow.<locals>.inline_func8  s¼   € Üò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ   ‘að!ð ñ  &'ð!ð rB   FNr    r¡   r¦   s      r@   Ú!test_large_kws_inline_controlflowz<TestCallFunctionExPeepHole.test_large_kws_inline_controlflow2  sX   € ò	ð( ×ÑÔ7Ô8¸FØˆFŒD‹F�;Ó Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Ð8úr©   c                 ór   — d„ }|} t        «       |«      } |d«      } |d«      }| j                  ||«       y)z›
        Tests generating large kws when one of the inputs
        has the change suggested in the error message
        for inlined control flow.
        c                 ó€   — | rdnd}t        di dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“d|“ŽS )Nrk   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   rœ   r­   s     r@   rŸ   zUTestCallFunctionExPeepHole.test_large_kws_noninlined_controlflow.<locals>.inline_funcZ  s´   € Ù‘A 1ˆEÜò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ð rB   FNr¯   r°   s         r@   Ú%test_large_kws_noninlined_controlflowz@TestCallFunctionExPeepHole.test_large_kws_noninlined_controlflowS  s>   € ò	ð* ˆØ”“�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜˜AÕrB   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r\   rh   rZ   r   re   ri   rp   rr   ru   rw   r˜   r¨   r±   rµ   r¸   r»   r¾   r   rB   r@   rD   rD   u   s$  „ ñð €NØ€Mò"ð6 ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñXó ðXðt ñ3
ó ð3
ðj ñ4ó ð4ðl ñ4
ó ð4
ðl ñ3ó ð3ðj ñ
ó ð
ð@ ñó ñrB   rD   c                   ó�   — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zy
)ÚTestLargeConstDictað  
    gh #7894

    Tests that check a peephole optimization for constant
    dictionaries in Python 3.10. The bytecode changes when
    number of elements > 15, which splits the constant dictionary
    into multiple dictionaries that are joined by a DICT_UPDATE
    bytecode instruction.

    This optimization modifies the IR to rejoin dictionaries
    and remove the DICT_UPDATE generated code. This then allows
    code that depends on literal dictionaries or literal keys
    to succeed.
    c                 ón   — d„ }|} t        «       |«      } |«       } |«       }| j                  ||«       y)úr
        Tests that a function with a large heterogeneous constant
        dictionary remains a constant.
        c                  ó€   — i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥} | d   S )NÚArk   ÚBÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQrc   ©ÚRÚSrÛ   r   ©rŠ   s    r@   Ú
const_funczJTestLargeConstDict.test_large_heterogeneous_const_dict.<locals>.const_funcŒ  sé   € ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* �S‘6ˆMrB   Nr¯   )rP   rÝ   ra   rb   rc   rd   s         r@   Ú#test_large_heterogeneous_const_dictz6TestLargeConstDict.test_large_heterogeneous_const_dict†  s:   € ò	ð6 ˆØ”“�zÓ"ˆÙ‹IˆÙ‹GˆØ×Ñ˜˜AÕrB   c                 ó^   ‡ ‡— d„ Št        ‰«      ˆ fd„«       }t        ˆfd„«       } |«        y)zvCheck the literal values for a LiteralStrKeyDict requiring
        optimizations because it is heterogeneous.
        c                  ó   — y r   r   rÜ   s    r@   ÚbarzYTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.bar³  ó   € ØrB   c                 óÊ  •— i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥}d„ }|j                  «       D ��ci c]!  \  }}t        j                  |«       ||«      “Œ# }}}‰j                  t	        | t        j
                  «      «       ‰j                  | j                  |«       ‰j                  t        | d«      d«       d„ S c c}}w )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rc   rÙ   c                 ól   — t        j                  | «      rt        j                  | «      S t        | «      S r   )r	   Úmaybe_literalÚliteralr   )Úzs    r@   Úspecific_tyzqTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.specific_tyÎ  s'   € Ü+0×+>Ñ+>¸qÔ+A”u—}‘} QÓ'ÐPÄvÈaÃyÐPrB   Úinitial_valueFc                 ó   — | S r   r   rÜ   s    r@   Ú<lambda>znTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.<lambda>Ô  ó   € ™QrB   )	Úitemsr	   ræ   Ú
assertTrueÚ
isinstanceÚLiteralStrKeyDictr]   Úliteral_valueÚhasattr)rŠ   rc   rè   ÚxÚyÚexpectedrP   s         €r@   Úol_barz\TestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar¶  se  ø€ ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAò,QàEFÇWÁWÄYÔOÁY¹T¸QÀœŸ™ aÓ(©+°a«.Ñ8ÀYˆHÑOØ�O‰OœJ q¬%×*AÑ*AÓBÔCØ×Ñ˜QŸ_™_¨hÔ7Ø×ÑœW Q¨Ó8¸%Ô@ÙÐùó	 Ps   Á&Cc                  óŠ   •— i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥}  ‰| «       y )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rc   rÙ   r   ©rŠ   rá   s    €r@   ÚfoozYTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.fooÖ  sè   ø€ ð
Ø�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAñ* ��FrB   N©r   r   ©rP   rö   rù   rá   s   `  @r@   Ú9test_large_heterogeneous_LiteralStrKeyDict_literal_valueszLTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values­  s;   ù€ ò	ô 
�#‹ó	ó 
ð	ô> 
ó	ó 
ð	ñ6 	�rB   c                 óv   — d„ }|} t        «       |«      }d} ||«      } ||«      }| j                  ||«       y)rÆ   c                 ó€   — i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“d| dœ¥}|d   S )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÛ   r   )rc   rŠ   s     r@   Úconst_keys_funczTTestLargeConstDict.test_large_heterogeneous_const_keys_dict.<locals>.const_keys_funcú  sé   € ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* �S‘6ˆMrB   Úa_stringNr¯   )rP   rÿ   ra   rb   Úvaluerc   rd   s          r@   Ú(test_large_heterogeneous_const_keys_dictz;TestLargeConstDict.test_large_heterogeneous_const_keys_dictô  sC   € ò	ð6 "ˆØ”“�Ó'ˆàˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜˜AÕrB   c                 ó^   ‡ ‡— d„ Št        ‰«      ˆ fd„«       }t        ˆfd„«       } |«        y)z�Checks that the optimization for large dictionaries
        do not incorrectly update initial values due to other
        mutations.
        c                  ó   — y r   r   rÜ   s    r@   rá   zDTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.bar#  râ   rB   c                 ó&  •— i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥}| j                   €d„ S ‰j                  t        | t        j                  «      «       ‰j                  | j                   |«       d„ S )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   r~   rÙ   c                 ó   — t        | «      S r   ©r   rÜ   s    r@   rë   zYTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.ol_bar.<locals>.<lambda>>  ó   € ¤¨1¤rB   c                 ó   — | S r   r   rÜ   s    r@   rë   zYTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.ol_bar.<locals>.<lambda>A  rì   rB   ©ré   rî   rï   r	   ÚDictTyper]   ©rŠ   rc   rP   s     €r@   rö   zGTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.ol_bar&  s"  ø€ ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* �‰Ð&Ù-Ð-Ø�O‰OœJ q¬%¯.©.Ó9Ô:Ø×Ñ˜QŸ_™_¨aÔ0ÙÐrB   c                  ó”   •— i dd“dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥} d| d<    ‰| «       y )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   r~   rÙ   r|   ÚXr   rø   s    €r@   rù   zDTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.fooC  sñ   ø€ ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* ˆAˆc‰FÙ��FrB   Nrú   rû   s   `  @r@   Ú$test_large_dict_mutation_not_carriedz7TestLargeConstDict.test_large_dict_mutation_not_carried  s;   ù€ ò	ô 
�#‹ó	ó 
ð	ô8 
ó	ó 
ð	ñ6 	�rB   c                 óê   ‡ ‡‡	‡
‡— d„ Š	d„ ŠdŠdŠ
t        ‰	d¬«      ˆˆ fd„«       }t        ‰d¬«      ˆ
ˆ fd„«       }ˆˆ	fd„}|} t        «       |«      } |«       } |«       }‰ j                  ||«       y	)
zf
        Tests an example using a regular update is
        not modified by the optimization.
        c                  ó   — y r   r   ©ró   s    r@   Úcheck_beforezDTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_beforeh  ó   € ØrB   c                  ó   — y r   r   r  s    r@   Úcheck_afterzCTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_afterk  r  rB   FT)Úprefer_literalc                 ó¨   •— ‰sMdŠddddœ}‰j                  t        | t        j                  «      «       ‰j	                  | j
                  |«       d„ S )NTrk   rz   r{   ©rc   rd   r‰   c                  ó   — y r   r   rÜ   s    r@   rë   zYTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_before.<locals>.<lambda>�  ó   € ˜TrB   )rî   rï   r	   r  r]   ré   )rŠ   rc   Úchecked_beforerP   s     €€r@   Úol_check_beforezGTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_beforeq  sP   ø€ ñ "Ø!%�àØØñ�ð
 —‘¤
¨1¬e¯n©nÓ =Ô>Ø× Ñ  §¡°!Ô4á!Ð!rB   c                 óž   •— ‰sHdŠ‰j                  t        | t        j                  «      «       ‰j                  | j                  d u «       d„ S )NTc                  ó   — y r   r   rÜ   s    r@   rë   zXTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_after.<locals>.<lambda>Ž  r  rB   )rî   rï   r	   r  ré   )rŠ   Úchecked_afterrP   s    €€r@   Úol_check_afterzFTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_afterƒ  s?   ø€ ñ !Ø $�Ø—‘¤
¨1¬e¯n©nÓ =Ô>Ø—‘ §¡°4Ð 7Ô8á!Ð!rB   c                  ó€   •— ddddœ} dddœ} ‰| «       | j                  |«        ‰| «       t        | «      dkD  r|S | S )z˜
            Dictionary update between two constant
            dictionaries. This verifies d2 doesn't
            get incorrectly removed.
            rk   rz   r{   r  r|   )rŠ   r‹   )ÚupdateÚlen)Úd1Úd2r  r  s     €€r@   Úconst_dict_funczGTestLargeConstDict.test_usercode_update_use_d2.<locals>.const_dict_func�  sU   ø€ ð ØØñˆBð ØñˆBñ ˜ÔØ�I‰I�bŒMÙ˜ŒOä�2‹w˜Š{Ø�	ØˆIrB   N)r   r   r]   )rP   r  r!  r'  ra   rb   rc   rd   r  r  r   r  s   `       @@@@r@   Útest_usercode_update_use_d2z.TestLargeConstDict.test_usercode_update_use_d2a  s…   ü€ ò	ò	ð ˆØˆä	�,¨tÔ	4ô	"ó 
5ð	"ô" 
�+¨dÔ	3ô
	"ó 
4ð
	"õ	ð. "ˆØ”“�Ó'ˆÙ‹IˆÙ‹GˆØ×Ñ˜˜AÕrB   c                 óÖ   — d„ }| j                  t        «      5 }  t        «       |«      dd«       ddd«       | j                  dt	        j
                  «      «       y# 1 sw Y   Œ/xY w)zÉ
        Tests generating a large dictionary when one of
        the inputs requires inline control flow
        has the change suggested in the error message
        for inlined control flow.
        c                 óˆ   — i dd“dd“dd“dd“dd“dd“dd“d	|rdnd
“dd“dd“dd“dd“dd“dd“dd“dd“dd“d| dœ¥}|d   S )NrÈ   rk   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rz   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÛ   r   )rc   rž   rŠ   s      r@   rŸ   zPTestLargeConstDict.test_large_const_dict_inline_controlflow.<locals>.inline_funcµ  sí   € ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð ™$‘Q Aðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* �S‘6ˆMrB   r   FNr    r¡   r¦   s      r@   Ú(test_large_const_dict_inline_controlflowz;TestLargeConstDict.test_large_const_dict_inline_controlflow­  sZ   € ò	ð6 ×ÑÔ7Ô8¸FØˆFŒD‹F�;Ó 
¨EÔ2÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Ð8ús   ™AÁA(c                 óz   — d„ }|} t        «       |«      }d} ||d«      } ||d«      }| j                  ||«       y)z¥
        Tests generating large constant dict when one of the
        inputs has the change suggested in the error message
        for inlined control flow.
        c                 óŒ   — |rdnd}i dd“dd“dd“dd“dd“dd“d	d“d
|“dd“dd“dd“dd“dd“dd“dd“dd“dd“d| dœ¥}|d   S )Nrk   rz   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÛ   r   )rc   rž   ÚvalrŠ   s       r@   Únon_inline_funczWTestLargeConstDict.test_large_const_dict_noninline_controlflow.<locals>.non_inline_funcÞ  sô   € ñ ‘! ˆCðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Sðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øò'ˆAð* �S‘6ˆMrB   r   FNr¯   )rP   r/  ra   rb   r  rc   rd   s          r@   Ú+test_large_const_dict_noninline_controlflowz>TestLargeConstDict.test_large_const_dict_noninline_controlflow×  sI   € ò	ð8 "ˆØ”“�Ó'ˆØˆÙ�E˜5Ó!ˆÙ�%˜ÓˆØ×Ñ˜˜AÕrB   c                 ó^   ‡ ‡— d„ Št        ‰«      ˆ fd„«       }t        ˆfd„«       } |«        y)z®
        Tests that the correct literal values are generated
        for a dictionary that produces two DICT_UPDATE
        bytecode entries for the same dictionary.
        c                  ó   — y r   r   rÜ   s    r@   rá   z>TestLargeConstDict.test_fuse_twice_literal_values.<locals>.bar  râ   rB   c                 óŽ  •— i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFi¥}| j                   €dG„ S ‰j                  t        | t        j                  «      «       ‰j                  | j                   |«       dH„ S )INÚa1rk   Úa2rz   Úa3r{   Úa4r|   Úa5rI   Úa6r}   Úa7r~   Úa8r   Úa9r€   Úa10r�   Úa11r‚   Úa12rƒ   Úa13r„   Úa14r…   Úa15r†   Úa16rF   Úa17é   Úa18é   Úa19é   Úa20é   Úa21é   Úa22é   Úa23é   Úa24é   Úa25é   Úa26é   Úa27é   Úa28é   Úa29é   Úa30é   Úa31rE   Úa32é    Úa33é!   Úa34é"   Úa35é#   c                 ó   — t        | «      S r   r  rÜ   s    r@   rë   zSTestLargeConstDict.test_fuse_twice_literal_values.<locals>.ol_bar.<locals>.<lambda>4  r  rB   c                 ó   — | S r   r   rÜ   s    r@   rë   zSTestLargeConstDict.test_fuse_twice_literal_values.<locals>.ol_bar.<locals>.<lambda>7  rì   rB   r
  r  s     €r@   rö   zATestLargeConstDict.test_fuse_twice_literal_values.<locals>.ol_bar  sö  ø€ ð%Ø�qð%à�qð%ð �qð%ð �qð	%ð
 �qð%ð �qð%ð �qð%ð �qð%ð �qð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð  ˜ð!%ð" ˜ñ#%ð$ ˜ð%%ð& ˜ð'%ð( ˜ð)%ð* ˜ð+%ð, ˜ð-%ð. ˜ð/%ð0 ˜ð1%ð2 ˜ð3%ð4 ˜ð5%ð6 ˜ð7%ð8 ˜ð9%ð: ˜ð;%ð< ˜ð=%ð> ˜ð?%ð@ ˜ðA%ðB ˜ðC%ðD ˜ñE%ðH ˜ñI%ˆAðL �‰Ð&Ù-Ð-Ø�O‰OœJ q¬%¯.©.Ó9Ô:Ø×Ñ˜QŸ_™_¨aÔ0ÙÐrB   c                  óò   •— i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFi¥}  ‰| «       y )GNr4  rk   r5  rz   r6  r{   r7  r|   r8  rI   r9  r}   r:  r~   r;  r   r<  r€   r=  r�   r>  r‚   r?  rƒ   r@  r„   rA  r…   rB  r†   rC  rF   rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  rE   ra  rb  rc  rd  re  rf  rg  rh  r   rø   s    €r@   rù   z>TestLargeConstDict.test_fuse_twice_literal_values.<locals>.foo9  s¼  ø€ ð%Ø�qð%à�qð%ð �qð%ð �qð	%ð
 �qð%ð �qð%ð �qð%ð �qð%ð �qð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð ˜ð%ð  ˜ð!%ð" ˜ñ#%ð$ ˜ð%%ð& ˜ð'%ð( ˜ð)%ð* ˜ð+%ð, ˜ð-%ð. ˜ð/%ð0 ˜ð1%ð2 ˜ð3%ð4 ˜ð5%ð6 ˜ð7%ð8 ˜ð9%ð: ˜ð;%ð< ˜ð=%ð> ˜ð?%ð@ ˜ðA%ðB ˜ðC%ðD ˜ñE%ðH ˜ñI%ˆAñL ��FrB   Nrú   rû   s   `  @r@   Útest_fuse_twice_literal_valuesz1TestLargeConstDict.test_fuse_twice_literal_values  s=   ù€ ò	ô 
�#‹ó+	ó 
ð+	ôZ 
ó)	ó 
ð)	ñV 	�rB   N)r¿   rÀ   rÁ   rÂ   r   rÞ   rü   r  r  r(  r+  r0  rl  r   rB   r@   rÄ   rÄ   v  s¶   „ ñð ñ$ó ð$ðL ñDó ðDðL ñ&ó ð&ðP ñAó ðAðF ñIó ðIðV ñ'
ó ð'
ðR ñ'ó ð'ðR ñcó ñcrB   rÄ   c                   ó   — e Zd ZdZd„ Zy)Ú'TestListExtendInStarArgNonTupleIterablea^  Test `fn(pos_arg0, pos_arg1, *args)` where args is a non-tuple iterable.

    Python 3.9+ will generate LIST_EXTEND bytecode to combine the positional
    arguments with the `*args`.

    See #8059

    NOTE: At the moment, there are no meaningful tests for NoPython because the
    lack of support for `tuple(iterable)` for most iterable types.
    c                 ó®   ‡— d„ Št        d¬«      ˆfd„«       } |d«      }|j                  d«      }| j                  |d«       | j                  ||«       y )Nc                  ó   — | S r   r   r  s    r@   ÚconsumerzSTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.consumert  s   € ØˆHrB   T)Úforceobjc                 ó   •—  ‰ddg| ¢­Ž S r´   r   )ró   rq  s    €r@   rù   zNTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.foow  s   ø€ á˜A˜qÐ% 1Ò%Ð%rB   Úijo)rk   rz   rS   rŽ   r“   )r   ra   r]   )rP   rù   ÚgotÚexpectrq  s       @r@   Útest_list_extend_forceobjzATestListExtendInStarArgNonTupleIterable.test_list_extend_forceobjs  s[   ø€ ò	ô 
�dÔ	ó	&ó 
ð	&ñ �%‹jˆØ—‘˜UÓ#ˆØ×Ñ˜Ð3Ô4Ø×Ñ˜˜fÕ%rB   N)r¿   rÀ   rÁ   rÂ   rw  r   rB   r@   rn  rn  h  s   „ ñ	ó&rB   rn  Ú__main__)/r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rÂ   ÚunittestÚnumbar   r   r   r   r   Únumba.extendingr   Ú
numba.corer	   Únumba.core.errorsr
   Únumba.tests.supportr   r   r   rA   rD   rÄ   rn  r¿   Úmainr   rB   r@   Ú<module>r€     s  ðñó ß 7Õ 7Ý $Ý Ý 6÷ñ ð à	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ò_aó ðaôH~ °(ô ~ôBo˜ ?ô oôd&¨o¸xô &ð2 ˆzÒØ€H‡M�M…Oð rB   