§
    ƒÛg-v  ã                   ód  — 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        ¦   «          dS dS )z0
Test bytecode fixes provided in interpreter.py
é    N)ÚjitÚnjitÚobjmodeÚtypeofÚ	literally)Úoverload)Útypes)ÚUnsupportedError)Ú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/                                                  úR/granary/edev/quantum/lib/python3.11/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dS )Ú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                 óè  — d„ t          ||z   ¦  «        D ¦   «         }g }t          ||z   ¦  «        D ],}|dz  dk    rd|› d�}nd|› �}|                     |¦  «         Œ-d                     |¦  «        }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 )zw
            Generates a function that calls sum_jit_func
            with the desired number of args and kws.
        c                 ó   — g | ]}d |› �‘ŒS )Úargr   ©Ú.0Úis     r@   ú
<listcomp>z7TestCallFunctionExPeepHole.gen_func.<locals>.<listcomp>Š   s   € Ð?Ð?Ð? A�i˜A�i�iÐ?Ð?Ð?rB   é   r   zpow(argz, 2)rI   z, z	def impl(z):
z    return sum_jit_func(
z        z,
ú=z    )
rA   Úimpl)ÚrangeÚappendÚjoinÚexecrA   )
ÚselfÚn_argsÚn_kwsÚ
param_listÚ	args_listrL   Úarg_valÚtotal_paramsÚ	func_textÚ
local_varss
             r@   Úgen_funcz#TestCallFunctionExPeepHole.gen_func…   s\  € ð
 @Ð?­¨v¸©~Ñ)>Ô)>Ð?Ñ?Ô?ˆ
Øˆ	Ý�v ‘~Ñ&Ô&ð 	&ð 	&ˆAð �1‰u˜ŠzˆzØ+ AÐ+Ð+Ð+��à# ˜)˜)�Ø×Ò˜WÑ%Ô%Ð%Ð%Ø—y’y Ñ,Ô,ˆØ2 Ð2Ð2Ð2ˆ	ØÐ1Ñ1ˆ	Ý�v‘”ð 	6ð 	6ˆAØÐ5 I¨a¤LÐ5Ð5Ð5Ñ5ˆIˆIÝ�v˜v¨™~Ñ.Ô.ð 	Fð 	FˆAØÐE J¨q¤MÐEÐE°I¸a´LÐEÐEÐEÑEˆIˆIØ�YÑˆ	Øˆ
ÝˆY˜­Ð6¸
ÑCÔCÐCØ˜&Ô!Ð!rB   c                 óê   — d„ t          | j        ¦  «        D ¦   «         }|                      | j        d¦  «        }|} t          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )z˜
        Tests calling a function when n_args > 30 and
        n_kws = 0. This shouldn't use the peephole, but
        it should still succeed.
        c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   z<TestCallFunctionExPeepHole.test_all_args.<locals>.<listcomp>§   s   € Ð<Ð<Ð<˜A�aÐ<Ð<Ð<rB   r   N)rQ   ÚTHRESHOLD_ARGSr^   r   ÚassertEqual©rU   Ú
total_argsÚfÚpy_funcÚcfuncÚaÚbs          r@   Útest_all_argsz(TestCallFunctionExPeepHole.test_all_args    s‚   € ð =Ð<¥ tÔ':Ñ!;Ô!;Ð<Ñ<Ô<ˆ
Ø�MŠM˜$Ô-¨qÑ1Ô1ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 óê   — d„ t          | j        ¦  «        D ¦   «         }|                      d| j        ¦  «        }|} t          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )zR
        Tests calling a function when n_kws > 15 and
        n_args = 0.
        c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   z;TestCallFunctionExPeepHole.test_all_kws.<locals>.<listcomp>µ   s   € Ð;Ð;Ð;˜A�aÐ;Ð;Ð;rB   r   N)rQ   ÚTHRESHOLD_KWSr^   r   rb   rc   s          r@   Útest_all_kwsz'TestCallFunctionExPeepHole.test_all_kws¯   s‚   € ð <Ð;¥ tÔ'9Ñ!:Ô!:Ð;Ñ;Ô;ˆ
Ø�MŠM˜!˜TÔ/Ñ0Ô0ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó  — | j         dz
  }| j        dz
  }d„ t          ||z   ¦  «        D ¦   «         }|                      ||¦  «        }|} t	          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )zs
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args <= 30 and n_kws <= 15
        é   c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   zHTestCallFunctionExPeepHole.test_small_args_small_kws.<locals>.<listcomp>Å   ó   € ÐAÐAÐA˜A�aÐAÐAÐArB   N©ra   rm   rQ   r^   r   rb   ©	rU   Ú	used_argsÚused_kwsrd   re   rf   rg   rh   ri   s	            r@   Útest_small_args_small_kwsz4TestCallFunctionExPeepHole.test_small_args_small_kws½   s›   € ð Ô'¨!Ñ+ˆ	ØÔ%¨Ñ)ˆØAÐA¥¨	°hÑ'?Ñ!@Ô!@ÐAÑAÔAˆ
Ø�MŠM˜) XÑ.Ô.ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 óþ   — | j         dz
  }| j        }d„ t          ||z   ¦  «        D ¦   «         }|                      ||¦  «        }|} t	          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )zr
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args <= 30 and n_kws > 15
        rp   c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   zHTestCallFunctionExPeepHole.test_small_args_large_kws.<locals>.<listcomp>Õ   rr   rB   Nrs   rt   s	            r@   Útest_small_args_large_kwsz4TestCallFunctionExPeepHole.test_small_args_large_kwsÍ   s–   € ð Ô'¨!Ñ+ˆ	ØÔ%ˆØAÐA¥¨	°hÑ'?Ñ!@Ô!@ÐAÑAÔAˆ
Ø�MŠM˜) XÑ.Ô.ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 óþ   — | j         }| j        dz
  }d„ t          ||z   ¦  «        D ¦   «         }|                      ||¦  «        }|} t	          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )zr
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args > 30 and n_kws <= 15
        rp   c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   zHTestCallFunctionExPeepHole.test_large_args_small_kws.<locals>.<listcomp>å   rr   rB   Nrs   rt   s	            r@   Útest_large_args_small_kwsz4TestCallFunctionExPeepHole.test_large_args_small_kwsÝ   s–   € ð Ô'ˆ	ØÔ%¨Ñ)ˆØAÐA¥¨	°hÑ'?Ñ!@Ô!@ÐAÑAÔAˆ
Ø�MŠM˜) XÑ.Ô.ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 óø   — | j         }| j        }d„ t          ||z   ¦  «        D ¦   «         }|                      ||¦  «        }|} t	          ¦   «         |¦  «        } ||Ž } ||Ž }|                      ||¦  «         dS )zq
        Tests calling a function when (n_args / 2) + n_kws > 15,
        but n_args > 30 and n_kws > 15
        c                 ó   — g | ]}|‘ŒS r   r   rJ   s     r@   rM   zHTestCallFunctionExPeepHole.test_large_args_large_kws.<locals>.<listcomp>õ   rr   rB   Nrs   rt   s	            r@   Útest_large_args_large_kwsz4TestCallFunctionExPeepHole.test_large_args_large_kwsí   s‘   € ð Ô'ˆ	ØÔ%ˆØAÐA¥¨	°hÑ'?Ñ!@Ô!@ÐAÑAÔAˆ
Ø�MŠM˜) XÑ.Ô.ˆØˆØ•‘”�q‘	”	ˆØˆG�ZÐ ˆØˆE�:ÐˆØ×Ò˜˜AÑÔÐÐÐrB   c                 óº   ‡— d„ Št           ˆfd„¦   «         }t          t           ‰¦   «         ¦  «        ¦  «        } |¦   «         }|                      ||¦  «         dS )zO
        Tests calling an objectmode function with > 15 return values.
        c                  ó   — dS )N)r   rp   é   é   é   rN   é   é   é   é	   é
   é   é   é   é   é   r   r   rB   r@   rf   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¦  «         n# 1 swxY w Y   | |z   |z   |z   |z   |z   |z   |z   |z   |	z   |
z   |z   |z   |z   |z   |z   S )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.
            rh   Úint64ri   ÚcÚdÚere   ÚgÚhrL   ÚjÚkÚlÚmÚnÚoÚpNr   )r   )rh   ri   r’   r“   r”   re   r•   r–   rL   r—   r˜   r™   rš   r›   rœ   r�   rf   s                   €r@   Úobjmode_funczGTestCallFunctionExPeepHole.test_large_kws_objmode.<locals>.objmode_func  s
  ø€ õ ð ð ð Ø�'ðà�'ðð �'ðð �'ð	ð
 �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð �'ðð  �'ð!ð #ð #ðF �G‘I”Iñ#ØØØØØØØØØØØØØØØØðE#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ðJ Øñàñð ñð ñ	ð
 ñð ñð ñð ñð ñ	ð ñ
ð ñð ñð ñð ñð ñðs   ¼A$Á$A(Á+A(N)r   ÚsumÚlistrb   )rU   rž   rh   ri   rf   s       @r@   Útest_large_kws_objmodez1TestCallFunctionExPeepHole.test_large_kws_objmodeý   sz   ø€ ð
	ð 	ð 	õ( 
ð;	ð ;	ð ;	ð ;	ñ 
Œð;	õz •�W�W‘Y”Y‘”Ñ Ô ˆØˆL‰NŒNˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó   — d„ }|                       t          ¦  «        5 }  t          ¦   «         |¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         dS )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‘R ddiŽS ©Nrp   rƒ   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©rU   r¨   Úraisess      r@   Ú"test_large_args_inline_controlflowz=TestCallFunctionExPeepHole.test_large_args_inline_controlflowX  sÊ   € ð'	ð '	ð '	ðR ×ÒÕ/Ñ0Ô0ð 	'°FØˆF�D‰FŒF�;ÑÔ Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'à�ŠØGÝ�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
ó   ž!AÁAÁAc                 ó–   — d„ }|} t          ¦   «         |¦  «        } |d¦  «        } |d¦  «        }|                      ||¦  «         dS )úœ
        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‘R ddiŽS r¤   r¥   ©r§   Úa_vals     r@   r¨   zVTestCallFunctionExPeepHole.test_large_args_noninlined_controlflow.<locals>.inline_func•  s¦  € ØÐ$�A�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   rb   ©rU   r¨   rf   rg   rh   ri   s         r@   Ú&test_large_args_noninlined_controlflowzATestCallFunctionExPeepHole.test_large_args_noninlined_controlflowŽ  sb   € ð(	ð (	ð (	ðT ˆØ•‘”�{Ñ#Ô#ˆØˆG�E‰NŒNˆØˆE�%‰LŒLˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó   — d„ }|                       t          ¦  «        5 }  t          ¦   «         |¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         dS )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‘R Ž S ©Nrp   rƒ   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Å  sÊ   € ð&	ð &	ð &	ðP ×ÒÕ/Ñ0Ô0ð 	'°FØˆF�D‰FŒF�;ÑÔ Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'à�ŠØGÝ�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
r²   c                 ó–   — d„ }|} t          ¦   «         |¦  «        } |d¦  «        } |d¦  «        }|                      ||¦  «         dS )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‘R Ž S r½   r¥   r¶   s     r@   r¨   zTTestCallFunctionExPeepHole.test_all_args_noninlined_controlflow.<locals>.inline_func  s•  € ØÐ$�A�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ü  sb   € ð'	ð '	ð '	ðR ˆØ•‘”�{Ñ#Ô#ˆØˆG�E‰NŒNˆØˆE�%‰LŒLˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó   — d„ }|                       t          ¦  «        5 }  t          ¦   «         |¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         dS )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nd“ŽS )Nr   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rƒ   r   r¥   r¦   s    r@   r¨   zQTestCallFunctionExPeepHole.test_large_kws_inline_controlflow.<locals>.inline_func8  sÝ   € Ýð ð ð Ø�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �aðð �aðð �aðð �aðð �aðð   Ð&�a�a Qøð!ð rB   FNr©   rª   r¯   s      r@   Ú!test_large_kws_inline_controlflowz<TestCallFunctionExPeepHole.test_large_kws_inline_controlflow2  sÉ   € ð	ð 	ð 	ð( ×ÒÕ/Ñ0Ô0ð 	'°FØˆF�D‰FŒF�;ÑÔ Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'à�ŠØGÝ�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
r²   c                 ó–   — d„ }|} t          ¦   «         |¦  «        } |d¦  «        } |d¦  «        }|                      ||¦  «         dS )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 )Nrp   rƒ   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�A 1ˆEÝð ð ð Ø�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �aðð �aðð �aðð �aðð �aðð  �eð!ð rB   FNr¸   r¹   s         r@   Ú%test_large_kws_noninlined_controlflowz@TestCallFunctionExPeepHole.test_large_kws_noninlined_controlflowS  sa   € ð	ð 	ð 	ð* ˆØ•‘”�{Ñ#Ô#ˆØˆG�E‰NŒNˆØˆE�%‰LŒLˆØ×Ò˜˜AÑÔÐÐÐrB   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ra   rm   r^   r   rj   rn   rw   rz   r}   r€   r¡   r±   rº   r¾   rÁ   rÄ   rÇ   r   rB   r@   rD   rD   u   s®  € € € € € ðð ð €NØ€Mð"ð "ð "ð6 ðð ñ Ôðð ðð ñ Ôðð ðð ñ Ôðð ðð ñ Ôðð ðð ñ Ôðð ðð ñ Ôðð ðXð Xñ ÔðXðt ð3
ð 3
ñ Ôð3
ðj ð4ð 4ñ Ôð4ðl ð4
ð 4
ñ Ôð4
ðl ð3ð 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d
S )Ú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                 ó’   — d„ }|} t          ¦   «         |¦  «        } |¦   «         } |¦   «         }|                      ||¦  «         dS )ú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ÚArp   ÚBÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQrh   ©Ú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¸   )rU   ræ   rf   rg   rh   ri   s         r@   Ú#test_large_heterogeneous_const_dictz6TestLargeConstDict.test_large_heterogeneous_const_dict†  s]   € ð	ð 	ð 	ð6 ˆØ•‘”�zÑ"Ô"ˆØˆG‰IŒIˆØˆE‰GŒGˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó|   ‡ ‡— d„ Št          ‰¦  «        ˆ fd„¦   «         }t          ˆfd„¦   «         } |¦   «          dS )zvCheck the literal values for a LiteralStrKeyDict requiring
        optimizations because it is heterogeneous.
        c                 ó   — d S r   r   rå   s    r@   ÚbarzYTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.bar³  ó   € ØˆCrB   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„ Šˆfd„|                      ¦   «         D ¦   «         }‰                     t          | t          j        ¦  «        ¦  «         ‰                     | j        |¦  «         ‰                     t          | d¦  «        d¦  «         d„ S )NrÑ   rp   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   rh   râ   c                 óp   — t          j        | ¦  «        rt          j        | ¦  «        n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Ô+AÐP•u”} QÑ'Ô'Ð'ÅvÈaÁyÄyÐPrB   c                 óR   •— i | ]#\  }}t          j        |¦  «         ‰|¦  «        “Œ$S r   )r	   rï   )rK   ÚxÚyrñ   s      €r@   ú
<dictcomp>zpTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.<dictcomp>Ð  s1   ø€ ÐOÐOÐO¹T¸QÀ�œ aÑ(Ô(¨+¨+°a©.¬.ÐOÐOÐOrB   Úinitial_valueFc                 ó   — | S r   r   rå   s    r@   ú<lambda>znTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar.<locals>.<lambda>Ô  ó   € ˜Q€ rB   )ÚitemsÚ
assertTrueÚ
isinstancer	   ÚLiteralStrKeyDictrb   Úliteral_valueÚhasattr)r“   rh   Úexpectedrñ   rU   s      @€r@   Úol_barz\TestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values.<locals>.ol_bar¶  s|  øø€ ðØ�Qðà�Qðð �Qðð �Qð	ð
 �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð �Qðð  �Qð!ð" �Qð#ð$ Øð'ð ð ˆAð,Qð Qð QàOÐOÐOÐOÀQÇWÂWÁYÄYÐOÑOÔOˆHØ�OŠO�J q­%Ô*AÑBÔBÑCÔCÐCØ×Ò˜Qœ_¨hÑ7Ô7Ð7Ø×Ò�W Q¨Ñ8Ô8¸%Ñ@Ô@Ð@Ø�;Ð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 S )NrÑ   rp   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   rh   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ð* ˆC�‰FŒFˆFˆFˆFrB   N©r   r   ©rU   r  r  rê   s   `  @r@   Ú9test_large_heterogeneous_LiteralStrKeyDict_literal_valueszLTestLargeConstDict.test_large_heterogeneous_LiteralStrKeyDict_literal_values­  st   øø€ ð	ð 	ð 	õ 
�#‰Œð	ð 	ð 	ð 	ñ 
Œð	õ> 
ð	ð 	ð 	ð 	ñ 
Œð	ð6 	ˆ‰ŒˆˆˆrB   c                 óš   — d„ }|} t          ¦   «         |¦  «        }d} ||¦  «        } ||¦  «        }|                      ||¦  «         dS )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Ñ   rp   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rä   r   )rh   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¸   )rU   r
  rf   rg   Úvaluerh   ri   s          r@   Ú(test_large_heterogeneous_const_keys_dictz;TestLargeConstDict.test_large_heterogeneous_const_keys_dictô  sf   € ð	ð 	ð 	ð6 "ˆØ•‘”�Ñ'Ô'ˆàˆØˆG�E‰NŒNˆØˆE�%‰LŒLˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó|   ‡ ‡— d„ Št          ‰¦  «        ˆ fd„¦   «         }t          ˆfd„¦   «         } |¦   «          dS )z�Checks that the optimization for large dictionaries
        do not incorrectly update initial values due to other
        mutations.
        c                 ó   — d S 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 ‰                     t          | t          j        ¦  «        ¦  «         ‰                     | j         |¦  «         d„ S )NrÑ   rp   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	   ÚDictTyperb   ©r“   rh   rU   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Ô9Ñ:Ô:Ð:Ø×Ò˜Qœ_¨aÑ0Ô0Ð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<    ‰| ¦  «         d S )NrÑ   rp   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ØˆC�‰FŒFˆFˆFˆFrB   Nr  r  s   `  @r@   Ú$test_large_dict_mutation_not_carriedz7TestLargeConstDict.test_large_dict_mutation_not_carried  st   øø€ ð	ð 	ð 	õ 
�#‰Œð	ð 	ð 	ð 	ñ 
Œð	õ8 
ð	ð 	ð 	ð 	ñ 
Œð	ð6 	ˆ‰ŒˆˆˆrB   c                 ó*  ‡ ‡‡	‡
‡— d„ Š	d„ ŠdŠdŠ
t          ‰	d¬¦  «        ˆˆ fd„¦   «         }t          ‰d¬¦  «        ˆ
ˆ fd„¦   «         }ˆˆ	fd„}|} t          ¦   «         |¦  «        } |¦   «         } |¦   «         }‰                      ||¦  «         d	S )
zf
        Tests an example using a regular update is
        not modified by the optimization.
        c                 ó   — d S r   r   ©ró   s    r@   Úcheck_beforezDTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_beforeh  ó   € ØˆDrB   c                 ó   — d S r   r   r  s    r@   Úcheck_afterzCTestLargeConstDict.test_usercode_update_use_d2.<locals>.check_afterk  r  rB   FT)Úprefer_literalc                 ó®   •— ‰sPdŠddddœ}‰                      t          | t          j        ¦  «        ¦  «         ‰                     | j        |¦  «         d„ S )NTrp   rƒ   r„   ©rh   ri   r’   c                 ó   — d S r   r   rå   s    r@   rø   zYTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_before.<locals>.<lambda>�  ó   € ˜T€ rB   )rû   rü   r	   r  rb   rö   )r“   rh   Úchecked_beforerU   s     €€r@   Úol_check_beforezGTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_beforeq  sg   ø€ ð "ð 5Ø!%�àØØðð �ð
 —’¥
¨1­e¬nÑ =Ô =Ñ>Ô>Ð>Ø× Ò  ¤°!Ñ4Ô4Ð4à!�>Ð!rB   c                 ó¤   •— ‰sKdŠ‰                      t          | t          j        ¦  «        ¦  «         ‰                      | j        d u ¦  «         d„ S )NTc                 ó   — d S 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_afterrU   s    €€r@   Úol_check_afterzFTestLargeConstDict.test_usercode_update_use_d2.<locals>.ol_check_afterƒ  sQ   ø€ ð !ð 9Ø $�Ø—’¥
¨1­e¬nÑ =Ô =Ñ>Ô>Ð>Ø—’ ¤°4Ð 7Ñ8Ô8Ð8à!�>Ð!rB   c                  óž   •— ddddœ} dddœ} ‰| ¦  «         |                       |¦  «          ‰| ¦  «         t          | ¦  «        dk    r|S | S )z˜
            Dictionary update between two constant
            dictionaries. This verifies d2 doesn't
            get incorrectly removed.
            rp   rƒ   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ð ˆL˜ÑÔÐØ�IŠI�b‰MŒMˆMØˆK˜‰OŒOˆOå�2‰wŒw˜Š{ˆ{Ø�	ØˆIrB   N)r   r   rb   )rU   r(  r,  r2  rf   rg   rh   ri   r!  r  r+  r'  s   `       @@@@r@   Útest_usercode_update_use_d2z.TestLargeConstDict.test_usercode_update_use_d2a  s	  øøøøø€ ð	ð 	ð 	ð	ð 	ð 	ð ˆØˆå	�,¨tÐ	4Ñ	4Ô	4ð	"ð 	"ð 	"ð 	"ð 	"ñ 
5Ô	4ð	"õ" 
�+¨dÐ	3Ñ	3Ô	3ð
	"ð 
	"ð 
	"ð 
	"ð 
	"ñ 
4Ô	3ð
	"ð	ð 	ð 	ð 	ð 	ð 	ð. "ˆØ•‘”�Ñ'Ô'ˆØˆG‰IŒIˆØˆE‰GŒGˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó  — d„ }|                       t          ¦  «        5 }  t          ¦   «         |¦  «        dd¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt	          |j        ¦  «        ¦  «         dS )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Ñ   rp   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rƒ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rä   r   )rh   r§   r“   s      r@   r¨   zPTestLargeConstDict.test_large_const_dict_inline_controlflow.<locals>.inline_funcµ  sü   € ðØ�Qðà�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­  sË   € ð	ð 	ð 	ð6 ×ÒÕ/Ñ0Ô0ð 	3°FØˆF�D‰FŒF�;ÑÔ 
¨EÑ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3à�ŠØGÝ�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
s   ž"AÁAÁAc                 óž   — d„ }|} t          ¦   «         |¦  «        }d} ||d¦  «        } ||d¦  «        }|                      ||¦  «         dS )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 )Nrp   rƒ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rä   r   )rh   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¸   )rU   r:  rf   rg   r  rh   ri   s          r@   Ú+test_large_const_dict_noninline_controlflowz>TestLargeConstDict.test_large_const_dict_noninline_controlflow×  sn   € ð	ð 	ð 	ð8 "ˆØ•‘”�Ñ'Ô'ˆØˆØˆG�E˜5Ñ!Ô!ˆØˆE�%˜ÑÔˆØ×Ò˜˜AÑÔÐÐÐrB   c                 ó|   ‡ ‡— d„ Št          ‰¦  «        ˆ fd„¦   «         }t          ˆfd„¦   «         } |¦   «          dS )z®
        Tests that the correct literal values are generated
        for a dictionary that produces two DICT_UPDATE
        bytecode entries for the same dictionary.
        c                 ó   — d S 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 ‰                     t          | t          j        ¦  «        ¦  «         ‰                     | j         |¦  «         dH„ S )INÚa1rp   Úa2rƒ   Úa3r„   Úa4r…   Úa5rN   Ú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Ô9Ñ:Ô:Ð:Ø×Ò˜Qœ_¨aÑ0Ô0Ð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¥}  ‰| ¦  «         d S )GNr?  rp   r@  rƒ   rA  r„   rB  r…   rC  rN   rD  r†   rE  r‡   rF  rˆ   rG  r‰   rH  rŠ   rI  r‹   rJ  rŒ   rK  r�   rL  rŽ   rM  r�   rN  rF   rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rE   rl  rm  rn  ro  rp  rq  rr  rs  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 ˆC�‰FŒFˆFˆFˆFrB   Nr  r  s   `  @r@   Útest_fuse_twice_literal_valuesz1TestLargeConstDict.test_fuse_twice_literal_values  sv   øø€ ð	ð 	ð 	õ 
�#‰Œð+	ð +	ð +	ð +	ñ 
Œð+	õZ 
ð)	ð )	ð )	ð )	ñ 
Œð)	ðV 	ˆ‰ŒˆˆˆrB   N)rÈ   rÉ   rÊ   rË   r   rç   r  r  r  r3  r6  r;  rw  r   rB   r@   rÍ   rÍ   v  s  € € € € € ðð ð ð$ð $ñ Ôð$ðL ðDð Dñ ÔðDðL ð&ð &ñ Ôð&ðP ðAð Añ ÔðAðF ðIð Iñ ÔðIðV ð'
ð '
ñ Ôð'
ðR ð'ð 'ñ Ôð'ðR ðcð cñ Ôðcð cð crB   rÍ   c                   ó   — e Zd ZdZd„ ZdS )Ú'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¦  «        }|                     d¦  «        }|                      |d¦  «         |                      ||¦  «         d S )Nc                  ó   — | S r   r   r  s    r@   ÚconsumerzSTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.consumert  s   € ØˆHrB   T)Úforceobjc                 ó   •—  ‰ddg| ¢R Ž S r½   r   )ró   r|  s    €r@   r  zNTestListExtendInStarArgNonTupleIterable.test_list_extend_forceobj.<locals>.foow  s   ø€ à�8˜A˜qÐ% 1Ð%Ð%Ð%Ð%rB   Úijo)rp   rƒ   rL   r—   rœ   )r   rf   rb   )rU   r  ÚgotÚexpectr|  s       @r@   Útest_list_extend_forceobjzATestListExtendInStarArgNonTupleIterable.test_list_extend_forceobjs  s–   ø€ ð	ð 	ð 	õ 
�dÐ	Ñ	Ô	ð	&ð 	&ð 	&ð 	&ñ 
Ô	ð	&ð ˆc�%‰jŒjˆØ—’˜UÑ#Ô#ˆØ×Ò˜Ð3Ñ4Ô4Ð4Ø×Ò˜˜fÑ%Ô%Ð%Ð%Ð%rB   N)rÈ   rÉ   rÊ   rË   r‚  r   rB   r@   ry  ry  h  s-   € € € € € ð	ð 	ð&ð &ð &ð &ð &rB   ry  Ú__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Í   ry  rÈ   Úmainr   rB   r@   ú<module>r‹     s  ððð ð €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð à	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø	
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ð_að að añ „ðaðH~ð ~ð ~ð ~ð ~ °(ñ ~ô ~ð ~ðBoð oð oð oð o˜ ?ñ oô oð oðd&ð &ð &ð &ð &¨o¸xñ &ô &ð &ð2 ˆzÒÐØ€H„M�O„O€O€O€Oð ÐrB   