ó
    „ñ:iUv  ã                   óN  • S r SSKrSSKJrJrJrJrJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJr  \                                               SS j5       r " S	 S
\\5      r " S S\\5      r " S S\\5      r\S:X  a  \R.                  " 5         gg)z0
Test bytecode fixes provided in interpreter.py
é    N)ÚjitÚnjitÚobjmodeÚtypeofÚ	literally)Úoverload)Útypes)ÚUnsupportedBytecodeError)ÚTestCaseÚMemoryLeakMixinÚskip_unless_py10_or_laterc/                 ó  • U U-   U-   U-   U-   U-   U-   U-   U-   U	-   U
-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U-   U -   U!-   U"-   U#-   U$-   U%-   U&-   U'-   U(-   U)-   U*-   U+-   U,-   U--   U.-   $ ©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/                                                  Ú_/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/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                   óö   • \ rS rSrSrSrSrS r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)ÚTestCallFunctionExPeepHoleéu   az  
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                 ó¾  • [        X-   5       Vs/ s H  nSU 3PM
     nn/ n[        X-   5       H)  nUS-  S:X  a  SU S3nOSU 3nUR                  U5        M+     SR                  U5      nSU S3nUS	-  n[        U5       H  nUS
XS    S3-  nM     [        XU-   5       H  nUS
XC    SXS    S3-  nM     US-  n0 n	[        US[        0U	5        U	S   $ s  snf )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_funcÚ#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¡L >°Ð5Ñ5ŠIñ ä�v¨™~Ö.ˆAØ˜8 J¡M ?°!°I±L°>ÀÐEÑEŠIñ /à�YÑˆ	Øˆ
ÜˆY˜¬Ð6¸
ÔCØ˜&Ñ!Ð!ùò) @s   �Cc                 óè   • [        U R                  5       Vs/ s H  oPM     nnU R                  U R                  S5      nUn[        5       " U5      nU" U6 nU" U6 nU R	                  Xg5        gs  snf )zx
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)rM   ÚTHRESHOLD_ARGSr[   r   ÚassertEqual©rQ   rT   Ú
total_argsÚfÚpy_funcÚcfuncÚaÚbs           r@   Útest_all_argsÚ(TestCallFunctionExPeepHole.test_all_args    sr   € ô "' t×':Ñ':Ô!;Ó<Ò!;˜A’aÑ!;ˆ
Ð<Ø�M‰M˜$×-Ñ-¨qÓ1ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò =ó   ˜A/c                 óè   • [        U R                  5       Vs/ s H  oPM     nnU R                  SU R                  5      nUn[        5       " U5      nU" U6 nU" U6 nU R	                  Xg5        gs  snf )z:
Tests calling a function when n_kws > 15 and
n_args = 0.
r   N)rM   ÚTHRESHOLD_KWSr[   r   r_   r`   s           r@   Útest_all_kwsÚ'TestCallFunctionExPeepHole.test_all_kws¯   sr   € ô "' t×'9Ñ'9Ô!:Ó;Ò!:˜A’aÑ!:ˆ
Ð;Ø�M‰M˜!˜T×/Ñ/Ó0ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò <ri   c                 óþ   • U R                   S-
  nU R                  S-
  n[        X-   5       Vs/ s H  o3PM     nnU R                  X5      nUn[	        5       " U5      nU" U6 nU" U6 n	U R                  X‰5        gs  snf )z[
Tests calling a function when (n_args / 2) + n_kws > 15,
but n_args <= 30 and n_kws <= 15
é   N©r^   rk   rM   r[   r   r_   ©
rQ   Ú	used_argsÚused_kwsrT   ra   rb   rc   rd   re   rf   s
             r@   Útest_small_args_small_kwsÚ4TestCallFunctionExPeepHole.test_small_args_small_kws½   sˆ   € ð ×'Ñ'¨!Ñ+ˆ	Ø×%Ñ%¨Ñ)ˆÜ!&¨	Ñ'?Ô!@ÓAÒ!@˜A’aÑ!@ˆ
ÐAØ�M‰M˜)Ó.ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò Bs   ®A:c                 óø   • U R                   S-
  nU R                  n[        X-   5       Vs/ s H  o3PM     nnU R                  X5      nUn[	        5       " U5      nU" U6 nU" U6 n	U R                  X‰5        gs  snf )zZ
Tests calling a function when (n_args / 2) + n_kws > 15,
but n_args <= 30 and n_kws > 15
ro   Nrp   rq   s
             r@   Útest_small_args_large_kwsÚ4TestCallFunctionExPeepHole.test_small_args_large_kwsÍ   sƒ   € ð ×'Ñ'¨!Ñ+ˆ	Ø×%Ñ%ˆÜ!&¨	Ñ'?Ô!@ÓAÒ!@˜A’aÑ!@ˆ
ÐAØ�M‰M˜)Ó.ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò Bó   «A7c                 óø   • U R                   nU R                  S-
  n[        X-   5       Vs/ s H  o3PM     nnU R                  X5      nUn[	        5       " U5      nU" U6 nU" U6 n	U R                  X‰5        gs  snf )zZ
Tests calling a function when (n_args / 2) + n_kws > 15,
but n_args > 30 and n_kws <= 15
ro   Nrp   rq   s
             r@   Útest_large_args_small_kwsÚ4TestCallFunctionExPeepHole.test_large_args_small_kwsÝ   sƒ   € ð ×'Ñ'ˆ	Ø×%Ñ%¨Ñ)ˆÜ!&¨	Ñ'?Ô!@ÓAÒ!@˜A’aÑ!@ˆ
ÐAØ�M‰M˜)Ó.ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò Bry   c                 óò   • U R                   nU R                  n[        X-   5       Vs/ s H  o3PM     nnU R                  X5      nUn[	        5       " U5      nU" U6 nU" U6 n	U R                  X‰5        gs  snf )zY
Tests calling a function when (n_args / 2) + n_kws > 15,
but n_args > 30 and n_kws > 15
Nrp   rq   s
             r@   Útest_large_args_large_kwsÚ4TestCallFunctionExPeepHole.test_large_args_large_kwsí   s~   € ð ×'Ñ'ˆ	Ø×%Ñ%ˆÜ!&¨	Ñ'?Ô!@ÓAÒ!@˜A’aÑ!@ˆ
ÐAØ�M‰M˜)Ó.ˆØˆÜ”�q“	ˆÙ�ZÐ ˆÙ�:ÐˆØ×Ñ˜Õùò Bs   ¨A4c                 óŒ   ^• S m[         U4S j5       n[        [        T" 5       5      5      nU" 5       nU R                  X#5        g)z?
Tests calling an objectmode function with > 15 return values.
c                  ó   • g)N)r   ro   é   é   é   rJ   é   é   é   é	   é
   é   é   é   é   é   r   r   rB   r@   rc   ÚBTestCallFunctionExPeepHole.test_large_kws_objmode.<locals>.py_func  s   € ðrB   c                  ó8  >• [        S0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_6   T" 5       u  n nnnnnnnnn	n
nnnnnSSS5        W W-   W-   W-   W-   W-   W-   W-   W-   W	-   W
-   W-   W-   W-   W-   W-   $ ! , (       d  f       N== f)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.
re   Úint64rf   ÚcÚdÚerb   ÚgÚhrT   ÚjÚkÚlÚmÚnÚoÚpNr   )r   )re   rf   r’   r“   r”   rb   r•   r–   rT   r—   r˜   r™   rš   r›   rœ   r�   rc   s                   €r@   Úobjmode_funcÚGTestCallFunctionExPeepHole.test_large_kws_objmode.<locals>.objmode_func  s•  ø€ ô ò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ò!ñF “Iñ#ØØØØØØØØØØØØØØØØ÷EðJ Øñàñð ñð ñ	ð
 ñð ñð ñð ñð ñ	ð ñ
ð ñð ñð ñð ñð ñð÷Iõ ús   »BÂ
BN)r   ÚsumÚlistr_   )rQ   rž   re   rf   rc   s       @r@   Útest_large_kws_objmodeÚ1TestCallFunctionExPeepHole.test_large_kws_objmodeý   sD   ø€ ò
	ô( 
ô;	ó 
ð;	ôz ”‘W“Y“Ó ˆÙ‹NˆØ×Ñ˜ÕrB   c                 óÞ   • S nU R                  [        5       n[        5       " U5      " S5        SSS5        U R                  S[	        WR
                  5      5        g! , (       d  f       N4= f)zM
Tests generating large args when one of the inputs
has inlined controlflow.
c                 ó¼   • [        / SPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPU (       a  SOSPSPSPSPSPSPSPSPSPSPSPSPSPSPSP7SS06$ ©Nro   r‚   r:   ©rA   ©Úflags    r@   Úinline_funcÚRTestCallFunctionExPeepHole.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©rQ   rª   Úraisess      r@   Ú"test_large_args_inline_controlflowÚ=TestCallFunctionExPeepHole.test_large_args_inline_controlflowX  sU   € ò'	ðR ×ÑÔ7Ô8¸FÜŒF�;Ô Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Õ8úó   ™AÁ
A,c                 óp   • S nUn[        5       " U5      nU" S5      nU" S5      nU R                  XE5        g)ú|
Tests generating large args when one of the inputs
has the change suggested in the error message
for inlined control flow.
c                 óÀ   • U (       a  SOSn[        / SPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPUPSPSPSPSPSPSPSPSPSPSPSPSPSPSP7SS06$ r¦   r§   ©r©   Úa_vals     r@   rª   ÚVTestCallFunctionExPeepHole.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_   ©rQ   rª   rc   rd   re   rf   s         r@   Ú&test_large_args_noninlined_controlflowÚATestCallFunctionExPeepHole.test_large_args_noninlined_controlflowŽ  s;   € ò(	ðT ˆÜ”�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜ÕrB   c                 óÞ   • S nU R                  [        5       n[        5       " U5      " S5        SSS5        U R                  S[	        WR
                  5      5        g! , (       d  f       N4= f)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                 ó¶   • [        / SPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPU (       a  SOSPSPSPSPSPSPSPSPSPSPSPSPSPSPSP76 $ ©Nro   r‚   r§   r¨   s    r@   rª   ÚPTestCallFunctionExPeepHole.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_controlflowÚ;TestCallFunctionExPeepHole.test_all_args_inline_controlflowÅ  sU   € ò&	ðP ×ÑÔ7Ô8¸FÜŒF�;Ô Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Õ8úr¶   c                 óp   • S nUn[        5       " U5      nU" S5      nU" S5      nU R                  XE5        g)r¸   c                 óº   • U (       a  SOSn[        / SPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPUPSPSPSPSPSPSPSPSPSPSPSPSPSPSP76 $ rÃ   r§   rº   s     r@   rª   ÚTTestCallFunctionExPeepHole.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_controlflowÚ?TestCallFunctionExPeepHole.test_all_args_noninlined_controlflowü  s;   € ò'	ðR ˆÜ”�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜ÕrB   c                 óÞ   • S nU R                  [        5       n[        5       " U5      " S5        SSS5        U R                  S[	        WR
                  5      5        g! , (       d  f       N4= f)zL
Tests generating large kws when one of the inputs
has inlined controlflow.
c                 óŠ   • [        S0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SU (       a  S_6$ S_6$ )Nr   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r‚   r   r§   r¨   s    r@   rª   ÚQTestCallFunctionExPeepHole.test_large_kws_inline_controlflow.<locals>.inline_func8  s¼   € Üò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðö   ‘að!ð ñ  &'ð!ð rB   FNr¬   r­   r²   s      r@   Ú!test_large_kws_inline_controlflowÚ<TestCallFunctionExPeepHole.test_large_kws_inline_controlflow2  sT   € ò	ð( ×ÑÔ7Ô8¸FÜŒF�;Ô Ô&÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Õ8úr¶   c                 óp   • S nUn[        5       " U5      nU" S5      nU" S5      nU R                  XE5        g)z{
Tests generating large kws when one of the inputs
has the change suggested in the error message
for inlined control flow.
c                 óŠ   • U (       a  SOSn[        S0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SU_6$ )Nro   r‚   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r§   rº   s     r@   rª   ÚUTestCallFunctionExPeepHole.test_large_kws_noninlined_controlflow.<locals>.inline_funcZ  s´   € Þ‘A 1ˆEÜò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ð rB   FNr½   r¾   s         r@   Ú%test_large_kws_noninlined_controlflowÚ@TestCallFunctionExPeepHole.test_large_kws_noninlined_controlflowS  s:   € ò	ð* ˆÜ”�{Ó#ˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜ÕrB   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r^   rk   r[   r   rg   rl   rt   rw   r{   r~   r¢   r´   r¿   rÅ   rÊ   rÏ   rÔ   Ú__static_attributes__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                   ó˜   • \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rSrg)ÚTestLargeConstDictiv  aÄ  
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                 ól   • S nUn[        5       " U5      nU" 5       nU" 5       nU R                  XE5        g)úZ
Tests that a function with a large heterogeneous constant
dictionary remains a constant.
c                  ó€   • 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSS.En U S   $ )NÚAro   ÚBÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQre   ©ÚRÚSrô   r   ©r“   s    r@   Ú
const_funcÚJTestLargeConstDict.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½   )rQ   rö   rc   rd   re   rf   s         r@   Ú#test_large_heterogeneous_const_dictÚ6TestLargeConstDict.test_large_heterogeneous_const_dict†  s6   € ò	ð6 ˆÜ”�zÓ"ˆÙ‹IˆÙ‹GˆØ×Ñ˜ÕrB   c                 ób   ^ ^• S m[        T5      U 4S j5       n[        U4S j5       nU" 5         g)zfCheck the literal values for a LiteralStrKeyDict requiring
optimizations because it is heterogeneous.
c                 ó   • g r   r   rõ   s    r@   ÚbarÚYTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.bar³  ó   € ØrB   c                 óÐ  >• 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSS.EnS nUR                  5        VVs0 s H"  u  p4[        R                  " U5      U" U5      _M$     nnnTR                  [	        U [        R
                  5      5        TR                  U R                  U5        TR                  [        U S5      S5        S $ s  snnf )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   re   rò   c                 óz   • [         R                  " U 5      (       a  [         R                  " U 5      $ [        U 5      $ r   )r	   Úmaybe_literalÚliteralr   )Úzs    r@   Úspecific_tyÚqTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.specific_tyÎ  s*   € Ü+0×+>Ò+>¸q×+AÑ+A”u—}’} QÓ'ÐPÄvÈaÃyÐPrB   Úinitial_valueFc                 ó   • U $ r   r   rõ   s    r@   Ú<lambda>ÚnTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.<lambda>Ô  ó   € ™QrB   )	Úitemsr	   r  Ú
assertTrueÚ
isinstanceÚLiteralStrKeyDictr_   Úliteral_valueÚhasattr)r“   re   r  ÚxÚyÚexpectedrQ   s         €r@   Úol_barÚ\TestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar¶  sc  ø€ ðØ�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                  óŠ   >• 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSS.En T" U 5        g )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   re   rò   r   ©r“   rü   s    €r@   ÚfooÚYTestLargeConstDict.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   ©rQ   r  r  rü   s   `  @r@   Ú9test_large_heterogeneous_LiteralStrKeyDict_literal_valuesÚLTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values­  s;   ù€ ò	ô 
�#‹ô	ó 
ð	ô> 
ô	ó 
ð	ñ6 	�rB   c                 ót   • S nUn[        5       " U5      nSnU" U5      nU" U5      nU R                  XV5        g)rß   c                 ó€   • 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SU S.EnUS   $ )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   rô   r   )re   r“   s     r@   Úconst_keys_funcÚTTestLargeConstDict.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½   )rQ   r   rc   rd   Úvaluere   rf   s          r@   Ú(test_large_heterogeneous_const_keys_dictÚ;TestLargeConstDict.test_large_heterogeneous_const_keys_dictô  s?   € ò	ð6 "ˆÜ”�Ó'ˆàˆÙ�E‹NˆÙ�%‹LˆØ×Ñ˜ÕrB   c                 ób   ^ ^• S m[        T5      U 4S j5       n[        U4S j5       nU" 5         g)zuChecks that the optimization for large dictionaries
do not incorrectly update initial values due to other
mutations.
c                 ó   • g r   r   rõ   s    r@   rü   ÚDTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.bar#  rþ   rB   c                 ó(  >• 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSS.EnU R                   c  S $ TR                  [        U [        R                  5      5        TR                  U R                   U5        S $ )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   r†   rò   c                 ó   • [        U 5      $ r   ©r   rõ   s    r@   r  ÚYTestLargeConstDict.test_large_dict_mutation_not_carried.<locals>.ol_bar.<locals>.<lambda>>  ó   € ¤¨1¤rB   c                 ó   • U $ r   r   rõ   s    r@   r  r,  A  r
  rB   ©r  r  r  r	   ÚDictTyper_   ©r“   re   rQ   s     €r@   r  ÚGTestLargeConstDict.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                  ó”   >• 0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSS.En SU S'   T" U 5        g )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   r†   rò   r„   ÚXr   r  s    €r@   r  ÚDTestLargeConstDict.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_carriedÚ7TestLargeConstDict.test_large_dict_mutation_not_carried  s;   ù€ ò	ô 
�#‹ô	ó 
ð	ô8 
ô	ó 
ð	ñ6 	�rB   c                 óâ   ^ ^^	^
^• S m	S mSmSm
[        T	SS9UU 4S j5       n[        TSS9U
U 4S j5       nUU	4S jnUn[        5       " U5      nU" 5       nU" 5       nT R                  Xg5        g	)
zN
Tests an example using a regular update is
not modified by the optimization.
c                 ó   • g r   r   ©r  s    r@   Úcheck_beforeÚDTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_beforeh  ó   € ØrB   c                 ó   • g r   r   r:  s    r@   Úcheck_afterÚCTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_afterk  r=  rB   FT)Úprefer_literalc                 ó²   >• T(       dM  SmSSSS.nTR                  [        U [        R                  5      5        TR	                  U R
                  U5        S $ )NTro   r‚   rƒ   ©re   rf   r’   c                 ó   • g r   r   rõ   s    r@   r  ÚYTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_before.<locals>.<lambda>�  ó   € ˜TrB   )r  r  r	   r0  r_   r  )r“   re   Úchecked_beforerQ   s     €€r@   Úol_check_beforeÚGTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_beforeq  sP   ø€ ö "Ø!%�àØØñ�ð
 —‘¤
¨1¬e¯n©nÓ =Ô>Ø× Ñ  §¡°!Ô4á!Ð!rB   c                 ó¨   >• T(       dH  SmTR                  [        U [        R                  5      5        TR                  U R                  S L 5        S $ )NTc                 ó   • g r   r   rõ   s    r@   r  ÚXTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_after.<locals>.<lambda>Ž  rF  rB   )r  r  r	   r0  r  )r“   Úchecked_afterrQ   s    €€r@   Úol_check_afterÚFTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_afterƒ  s?   ø€ ö !Ø $�Ø—‘¤
¨1¬e¯n©nÓ =Ô>Ø—‘ §¡°4Ð 7Ô8á!Ð!rB   c                  ó‚   >• SSSS.n SSS.nT" U 5        U R                  U5        T" U 5        [        U 5      S:”  a  U$ U $ )zh
Dictionary update between two constant
dictionaries. This verifies d2 doesn't
get incorrectly removed.
ro   r‚   rƒ   rC  r„   )r“   r”   )ÚupdateÚlen)Úd1Úd2r?  r;  s     €€r@   Úconst_dict_funcÚGTestLargeConstDict.test_usercode_update_use_d2.<locals>.const_dict_func�  sU   ø€ ð ØØñˆBð ØñˆBñ ˜ÔØ�I‰I�bŒMÙ˜ŒOä�2‹w˜‹{Ø�	ØˆIrB   N)r   r   r_   )rQ   rH  rN  rU  rc   rd   re   rf   r?  r;  rM  rG  s   `       @@@@r@   Útest_usercode_update_use_d2Ú.TestLargeConstDict.test_usercode_update_use_d2a  s�   ü€ ò	ò	ð ˆØˆä	�,¨tÑ	4õ	"ó 
5ð	"ô" 
�+¨dÑ	3õ
	"ó 
4ð
	"ö	ð. "ˆÜ”�Ó'ˆÙ‹IˆÙ‹GˆØ×Ñ˜ÕrB   c                 óà   • S nU R                  [        5       n[        5       " U5      " SS5        SSS5        U R                  S[	        WR
                  5      5        g! , (       d  f       N4= f)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                 ó’   • 0 SS_SS_SS_SS_SS_SS_SS_S	U(       a  SOS
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SU S.EnUS   $ )Nrá   ro   râ   rã   rä   rå   ræ   rç   rè   r‚   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   rô   r   )re   r©   r“   s      r@   rª   ÚPTestLargeConstDict.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_controlflowÚ;TestLargeConstDict.test_large_const_dict_inline_controlflow­  sV   € ò	ð6 ×ÑÔ7Ô8¸FÜŒF�;Ô 
¨EÔ2÷ 9à�‰ØGÜ�× Ñ Ó!õ	
÷ 9Õ8ús   ™AÁ
A-c                 óx   • S nUn[        5       " U5      nSnU" US5      nU" US5      nU R                  XV5        g)z…
Tests generating large constant dict when one of the
inputs has the change suggested in the error message
for inlined control flow.
c                 ó–   • U(       a  SOSn0 SS_SS_SS_SS_SS_SS_S	S_S
U_SS_SS_SS_SS_SS_SS_SS_SS_SS_SU S.EnUS   $ )Nro   r‚   rá   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   rô   r   )re   r©   Úvalr“   s       r@   Únon_inline_funcÚWTestLargeConstDict.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½   )rQ   ra  rc   rd   r#  re   rf   s          r@   Ú+test_large_const_dict_noninline_controlflowÚ>TestLargeConstDict.test_large_const_dict_noninline_controlflow×  sE   € ò	ð8 "ˆÜ”�Ó'ˆØˆÙ�E˜5Ó!ˆÙ�%˜ÓˆØ×Ñ˜ÕrB   c                 ób   ^ ^• S m[        T5      U 4S j5       n[        U4S j5       nU" 5         g)zŽ
Tests that the correct literal values are generated
for a dictionary that produces two DICT_UPDATE
bytecode entries for the same dictionary.
c                 ó   • g r   r   rõ   s    r@   rü   Ú>TestLargeConstDict.test_fuse_twice_literal_values.<locals>.bar  rþ   rB   c                 ó�  >• 0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_0 S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_ESESF0EnU R                   c  SG $ TR                  [        U [        R                  5      5        TR                  U R                   U5        SH $ )INÚa1ro   Úa2r‚   Úa3rƒ   Úa4r„   Úa5rJ   Úa6r…   Úa7r†   Úa8r‡   Úa9rˆ   Úa10r‰   Úa11rŠ   Úa12r‹   Úa13rŒ   Úa14r�   Úa15rŽ   Úa16rG   Úa17é   Úa18é   Úa19é   Úa20é   Úa21é   Úa22é   Úa23é   Úa24é   Úa25é   Úa26é   Úa27é   Úa28é   Úa29é   Úa30é   Úa31rF   Úa32é    Úa33é!   Úa34é"   Úa35é#   c                 ó   • [        U 5      $ r   r+  rõ   s    r@   r  ÚSTestLargeConstDict.test_fuse_twice_literal_values.<locals>.ol_bar.<locals>.<lambda>4  r-  rB   c                 ó   • U $ r   r   rõ   s    r@   r  rŸ  7  r
  rB   r/  r1  s     €r@   r  ÚATestLargeConstDict.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                  óò   >• 0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_0 S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_ESESF0En T" U 5        g )GNri  ro   rj  r‚   rk  rƒ   rl  r„   rm  rJ   rn  r…   ro  r†   rp  r‡   rq  rˆ   rr  r‰   rs  rŠ   rt  r‹   ru  rŒ   rv  r�   rw  rŽ   rx  rG   ry  rz  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•  rF   r–  r—  r˜  r™  rš  r›  rœ  r�  r   r  s    €r@   r  Ú>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_valuesÚ1TestLargeConstDict.test_fuse_twice_literal_values  s=   ù€ ò	ô 
�#‹ô+	ó 
ð+	ôZ 
ô)	ó 
ð)	ñV 	�rB   r   N)rÖ   r×   rØ   rÙ   rÚ   r   rø   r  r$  r6  rW  r\  rc  r¤  rÛ   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                   ó   • \ rS rSrSrS rSrg)Ú'TestListExtendInStarArgNonTupleIterableih  aF  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                 ó¨   ^• S m[        SS9U4S j5       nU" S5      nUR                  S5      nU R                  US5        U R                  X#5        g )Nc                  ó   • U $ r   r   r:  s    r@   ÚconsumerÚSTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.consumert  s   € ØˆHrB   T)Úforceobjc                 ó   >• T" SS/U Q76 $ rÃ   r   )r  rª  s    €r@   r  ÚNTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.foow  s   ø€ á˜A˜qÐ% 1Ò%Ð%rB   Úijo)ro   r‚   rT   r—   rœ   )r   rc   r_   )rQ   r  ÚgotÚexpectrª  s       @r@   Útest_list_extend_forceobjÚATestListExtendInStarArgNonTupleIterable.test_list_extend_forceobjs  sY   ø€ ò	ô 
�dÑ	ô	&ó 
ð	&ñ �%‹jˆØ—‘˜UÓ#ˆØ×Ñ˜Ð3Ô4Ø×Ñ˜Õ%rB   r   N)rÖ   r×   rØ   rÙ   rÚ   r²  rÛ   r   rB   r@   r§  r§  h  s   † ñ	õ&rB   r§  Ú__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Ý   r§  rÖ   Úmainr   rB   r@   Ú<module>r¼     s  ðñó ß 7Õ 7Ý $Ý Ý 6÷ñ ð à	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ó_aó ðaôH~ °(ô ~ôBo˜ ?ô oôd&¨o¸xô &ð2 ˆzÓØ‡M‚M…Oð rB   