
    dafj                         d dl Z d dlmZmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d Zd Z G d de
      Z G d	 d
ej                        Z G d de
      Z G d de      Zedk(  r ej(                          yy)    N)combinationsproduct)support)BytecodeTestCaseCfgOptimizationTestCasec                 n    t        j                  d|  d      }i }t        ||       |d   j                  S )Nz=
        def f(x):
            match x:
                case z#:
                    pass
        f)textwrapdedentexec__code__)patternsource	namespaces      ./root/Python-3.12.4/Lib/test/test_peepholer.py compile_pattern_with_fast_localsr      sG    __ Y 		F IS>"""    c                     d}t        j                  |       D ]  }|j                  |k(  s|dz  } t        | d      r| j                  } | j
                  D ]  }t        |d      s|t        ||      z  }  |S )Nr      r   co_code)disget_instructionsopnamehasattrr   	co_constscount_instr_recursively)r	   r   countinstrcs        r   r   r      s    E%%a( <<6!QJE q*JJ[[ 81i ,Q77E8 Lr   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej@                  d      d        Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(y&)'TestTranformsc           
      2   t        t        j                  |            }|D ci c]  }|j                  | }}|D ]  }d|j                  vr||j
                     }|j                  dv rD| j                  |j                   d|j                   d|j                   d|j                          |j                  dv s|j                  dk(  s| j                  |j                   d|j                   d|j                   d|j                           y c c}w )NJUMP_)JUMP_BACKWARDJUMP_FORWARDz at z
 jumps to RETURN_VALUE)listr   r   offsetr   argvalfail)selfcodeinstructionsr   targetstgts         r   check_jump_targetsz TestTranforms.check_jump_targets(   s	   C00674@A55<<&AA! 	DEell*%,,'Czz>>		U\\N$u||n =&&)jj\cjj\C D  AA

n,		U\\N$u||n =&&)jj\cjj\C D	D Bs   Dc                     t        j                  |      }t        t        j                  |            }t	        d |D              }t        d |D              }| j                  |d       | j                  |t        |j                               y)z0Check that the lnotab byte offsets are sensible.c              3   &   K   | ]	  }|d      ywr   N .0ts     r   	<genexpr>z-TestTranforms.check_lnotab.<locals>.<genexpr>?        0A1Q40   c              3   &   K   | ]	  }|d      ywr3   r4   r5   s     r   r8   z-TestTranforms.check_lnotab.<locals>.<genexpr>@   r9   r:   r   N)
r   _get_code_objectr'   findlinestartsminmaxassertGreaterEqual
assertLesslenr   )r+   r,   lnotabmin_bytecodemax_bytecodes        r   check_lnotabzTestTranforms.check_lnotab9   sp    ##D)c((./ 000000a0c$,,&78r   c                     d }| j                  |d       | j                  |d       | j                  |d       | j                  |       y )Nc                     | dk(  s~ y y )N   r4   xs    r   unotz%TestTranforms.test_unot.<locals>.unotI   s    6 r   	UNARY_NOTPOP_JUMP_IF_FALSEPOP_JUMP_IF_TRUEassertNotInBytecodeassertInBytecoderF   )r+   rL   s     r   	test_unotzTestTranforms.test_unotG   sI    	 	  {3  ':;d$67$r   c                     dD ]R  \  }}}| j                  |      5  t        |dd      }| j                  |||       | j                  |       d d d        T y # 1 sw Y   _xY w)N))z
not a is bIS_OPr   )znot a is not brU   r   )z
not a in bCONTAINS_OPr   )znot a not in brV   r   line single)subTestcompilerR   rF   )r+   rX   cmp_opinvertr,   s        r   test_elim_inversion_of_is_or_inz-TestTranforms.test_elim_inversion_of_is_or_inQ   sr    % 		( D&& 4( (tR2%%dFF;!!$'( (		(( (s   2AA"	c                 h   d }d }d }|d f|df|dffD ]V  \  }}| j                  |      5  | j                  |d       | j                  |d|       | j                  |       d d d        X d	 }| j                  |d       | j                  |d
d        | j                  |       y # 1 sw Y   xY w)Nc                      d } d } | S Nr4   rJ   s    r   r	   z0TestTranforms.test_global_as_constant.<locals>.f_   s    AAHr   c                  
    d} | S )NTr4   rJ   s    r   gz0TestTranforms.test_global_as_constant.<locals>.gc   s    AHr   c                  
    d} | S )NFr4   rJ   s    r   hz0TestTranforms.test_global_as_constant.<locals>.hf   s    AHr   TF)funcLOAD_GLOBAL
LOAD_CONSTc                       y)z1Adding a docstring made this test fail in Py2.5.0Nr4   r4   r   r   r	   z0TestTranforms.test_global_as_constant.<locals>.fp   s    r   RETURN_CONST)r[   rQ   rR   rF   )r+   r	   rd   rf   rg   elems         r   test_global_as_constantz%TestTranforms.test_global_as_constant]   s    			 t9q$i!U< 	(JD$4( (((}=%%dL$?!!$'( (	(	 	  M2a6!( (s   7B((B1	c                     d }dD ]  }| j                  ||        dD ]  }| j                  ||        | j                  |       y )Nc                       	 	 rb   )r'   r4   r   r   r	   z'TestTranforms.test_while_one.<locals>.fz   s     r   )ri   rN   )r$   rP   )r+   r	   rl   s      r   test_while_onezTestTranforms.test_while_onex   sU    	 8 	.D$$Q-	.& 	+D!!!T*	+!r   c                    dD ]t  \  }}| j                  |      5  t        |dd      }| j                  ||       | j                  |d       | j                  |d       | j	                  |       d d d        v y # 1 sw Y   xY w)N))za, = a,rk   )za, b = a, bSWAP)za, b, c = a, b, crr   rW   rY   rZ   BUILD_TUPLEUNPACK_SEQUENCEr[   r\   rR   rQ   rF   r+   rX   rl   r,   s       r   test_pack_unpackzTestTranforms.test_pack_unpack   s     
	(JD$
 4( (tBx0%%dD1((}=((/@A!!$'( (
	(
( (s   AA;;B	c           	      N   dD ]c  \  }}| j                  |      5  t        |dd      }| j                  |d|       | j                  |d       | j	                  |       d d d        e t        t        t        t        d                  dd      }| j                  |d       t        j                  |      D cg c]  }|j                  dk(  r| }}| j                  t        |      d       | j	                  |       d	 }| j	                  |       y # 1 sw Y   xY wc c}w )
N))z	a = 1,2,3r   rI      )z("a","b","c")abr   )za,b,c = 1,2,3ry   )z(None, 1, None)Nr   N)z((1, 2), 3, 4)r   rI   rz      rW   rY   rZ   ri   rs   '  r   c                      g d f y )N)dr   r   rI   rz   r               	   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r   r   rI   rz   r   r   r   r   r   r   r4   r4   r   r   craterzATestTranforms.test_folding_of_tuples_of_constants.<locals>.crater   s      r   )r[   r\   rR   rQ   rF   reprtupleranger   r   r   assertEqualrB   )r+   rX   rl   r,   r   load_constsr   s          r   #test_folding_of_tuples_of_constantsz1TestTranforms.test_folding_of_tuples_of_constants   s    	(JD$ 4( (tBx0%%dL$?((}=!!$'	( (	( tE%,/0H=  }5*-*>*>t*D ?!&!=  ? ?[)1-$
	 	&!?( (?s   AD:D"D	c                     dD ]c  \  }}| j                  |      5  t        |dd      }| j                  |d|       | j                  |d       | j	                  |       d d d        e y # 1 sw Y   pxY w)N))za in [1,2,3]ry   )za not in ["a","b","c"]r{   )za in [None, 1, None]r~   )za not in [(1, 2), 3, 4]r   rW   rY   rZ   ri   
BUILD_LISTru   rv   s       r   "test_folding_of_lists_of_constantsz0TestTranforms.test_folding_of_lists_of_constants   s     	(JD$ 4( (tR2%%dL$?((|<!!$'	( (	(( (s   AA**A3	c           	         dt        h d      fdt        h d      fdt        dd h      fdt        h d      fd	t        h d      ffD ]c  \  }}| j                  |
      5  t        |dd      }| j                  |d       | j	                  |d|       | j                  |       d d d        e d }d }| j                   |d             | j                   |d              | j                  |       | j                   |d              | j                   |d             | j                  |       y # 1 sw Y   xY w)Nza in {1,2,3}   r   rI   rz   za not in {"a","b","c"}>   r|   r}   r   za in {None, 1, None}r   za not in {(1, 2), 3, 4}>   r   rz   r   za in {1, 2, 3, 3, 2, 1}rW   rY   rZ   	BUILD_SETri   c                 
    | dv S Nr   r4   r|   s    r   r	   z:TestTranforms.test_folding_of_sets_of_constants.<locals>.f   s    	>!r   c                 
    | dvS r   r4   r   s    r   rd   z:TestTranforms.test_folding_of_sets_of_constants.<locals>.g   s    I%%r   rz   r   )	frozensetr[   r\   rQ   rR   rF   
assertTrue)r+   rX   rl   r,   r	   rd   s         r   !test_folding_of_sets_of_constantsz/TestTranforms.test_folding_of_sets_of_constants   s2    Yy12%y'AB#Y4y%9:&	.(AB&	)(<= 	(JD$ 4( (tR2(({;%%dL$?!!$'	( (	(	"	& 	!AaD!!AaD!!!'( (s   !AD66D?	c                    dD ]  \  }}| j                  |      5  t        |dd      }| j                  |d|       t        j                  |      D ],  }| j                  |j                  j                  d             . | j                  |       d d d         t        ddd      }| j                  |dd       | j                  |dd	       | j                  |       t        d
dd      }| j                  |dd       | j                  ddz  |j                         | j                  |       t        ddd      }| j                  |dd       | j                  ddz  |j                         | j                  |       t        ddd      }| j                  |dd       | j                  ddz  |j                         | j                  |       y # 1 sw Y   xY w)N))z	a = 2+3+4r   )z"@"*4z@@@@)za="abc" + "def"abcdef)za = 3**4Q   )za = 3*4   )z	a = 13//4rz   )za = 14%4rI   )za = 2+3r   )za = 13-4r   )za = (12,13)[1]   )za = 13 << 24   )za = 13 >> 2rz   )z
a = 13 & 7r   )z
a = 13 ^ 7
   )z
a = 13 | 7   rW   rY   rZ   ri   BINARY_za=2+"b"rI   r}   za="x"*10000r   rK   z	a=1<<1000i  r   z	a=2**1000)r[   r\   rR   r   r   assertFalser   
startswithrF   assertNotInr   )r+   rX   rl   r,   r   s        r   #test_folding_of_binops_on_constantsz1TestTranforms.test_folding_of_binops_on_constants   s    	(JD$" 4( (tR2%%dL$? 11$7 IE$$U\\%<%<Y%GHI!!$'( (#	(2 y"h/dL!4dL#6$ }b(3dL%8UDNN3${B1dL$7D$..1${B1dL$7D$..1$3( (s   A6GG	c                    t        ddd      }| j                  |dd       | j                  |d       | j                  |       t        ddd      }| j                  |dd       | j                  |d       | j                  |       t        d	dd      }| j                  |dd
       | j                  |d       | j                  |       t        ddd      }| j                  |d       | j                  |       y )Nz"foo"[0]rY   rZ   ri   r	   BINARY_SUBSCRu	   "a￿"[1]u   ￿u	   "𒍅"[0]u   𒍅z	"fuu"[10])r\   rR   rQ   rF   )r+   r,   s     r   test_binary_subscr_on_unicodez+TestTranforms.test_binary_subscr_on_unicode  s    z2x0dL#6  7$*B9dL(;  o6$ ("h7dL,?  7$ {B1dO4$r   c                    dD ]  \  }}| j                  |      5  t        |dd      }| j                  |d|       t        j                  |      D ],  }| j                  |j                  j                  d             . | j                  |       d d d         d }t        j                  |      D ],  }| j                  |j                  j                  d             . | j                  |       dD ]d  \  }}}| j                  |      5  t        |dd      }| j                  |d|       | j                  ||       | j                  |       d d d        f y # 1 sw Y   dxY w# 1 sw Y   ~xY w)	N))z-0.5g      )z-0.0       )z
-(1.0-1.0)r   )z-0r   )z~-2r   )z+1r   rW   rY   rZ   ri   UNARY_c                       y)Nr   r4   r4   r   r   negzerozDTestTranforms.test_folding_of_unaryops_on_constants.<locals>.negzero<  s    r   ))z-"abc"abcUNARY_NEGATIVE)z~"abc"r   UNARY_INVERT)	r[   r\   rR   r   r   r   r   r   rF   )r+   rX   rl   r,   r   r   r   s          r   %test_folding_of_unaryops_on_constantsz3TestTranforms.test_folding_of_unaryops_on_constants+  sv   
 	(JD$ 4( (tR2%%dL$? 11$7 HE$$U\\%<%<X%FGH!!$'( (	( 	 ))'2 	@EU\\44X>?	@'"#
 	(D$ 4( (tR2%%dL$?%%dF3!!$'	( (		(!( ((( (s   A6EAE*E'	*E3	c                     d }| j                  |dd        t        j                  |      D cg c]  }|j                  dk(  r| }}| j	                  t        |      d       | j                  |       y c c}w )Nc                     | S rb   r4   rJ   s    r   r	   z/TestTranforms.test_elim_extra_return.<locals>.fP  s    Hr   ri   r&   r   )rQ   r   r   r   r   rB   rF   r+   r	   r   returnss       r   test_elim_extra_returnz$TestTranforms.test_elim_extra_returnN  ss    	  L$7&)&:&:1&= =U"\\^;  = =Wq)!=s   A5c                 8   d }| j                  |       | j                  |d       | j                  |d       t        j                  |      D cg c]  }|j                  dk(  r| }}| j                  t        |      d       | j                  |       y c c}w )Nc                     | r|S |S rb   r4   )cond
true_valuefalse_values      r   r	   z1TestTranforms.test_elim_jump_to_return.<locals>.fZ  s    "&J &$&r   r%   r$   r&   rI   )r0   rQ   r   r   r   r   rB   rF   r   s       r   test_elim_jump_to_returnz&TestTranforms.test_elim_jump_to_returnX  s    	& 	"  N3  O4&)&:&:1&= =U"\\^;  = =Wq)!=s   Bc                 N    d }| j                  |       | j                  |       y )Nc                  T    t         rt        st        rt                y y t	                y rb   )r|   r   dfoobazr4   r   r   r	   z6TestTranforms.test_elim_jump_to_uncond_jump.<locals>.fh  s    E  r   r0   rF   r+   r	   s     r   test_elim_jump_to_uncond_jumpz+TestTranforms.test_elim_jump_to_uncond_jumpf  s%    	 	"!r   c                 N    d }| j                  |       | j                  |       y )Nc                  <     rt         st        r
t               } | ry y rb   )r   r   r   r   s    r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump2.<locals>.fu  s    A	 r   r   r   s     r   test_elim_jump_to_uncond_jump2z,TestTranforms.test_elim_jump_to_uncond_jump2s  s%    	 	"!r   c                 |   d }| j                  |       | j                  |       | j                  t        |d      d       d }| j                  |       | j                  |       | j                  t        |d      d       d }| j                  |       | j                  |       | j                  t        |d      d       | j                  t        |d      d       d }| j                  |       | j                  |       | j                  t        |d      d       | j                  t        |d      d       y )	Nc                     | xr |xr |S rb   r4   r{   s      r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump3.<locals>.f  s    W1 r   rN   rI   c                     | xs |xs |S rb   r4   r{   s      r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump3.<locals>.f  s    V! r   rO   c                     | xr |xs |S rb   r4   r{   s      r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump3.<locals>.f  s    W1 r   r   c                     | xs |xr |S rb   r4   r{   s      r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump3.<locals>.f  s    V! r   )r0   rF   r   r   r   s     r   test_elim_jump_to_uncond_jump3z,TestTranforms.test_elim_jump_to_uncond_jump3~  s$   	 	"!04GH!L	 	"!04FGK	 	"!04GH!L04FGK	 	"!04GH!L04FGKr   c                 ,    d }| j                  |       y )Nc                  F    t        d      D ]  } | dkD  s	t        |         y )Nr   rz   )r   print)is    r   r	   z7TestTranforms.test_elim_jump_to_uncond_jump4.<locals>.f  s#    1X q5!Hr   )r0   r   s     r   test_elim_jump_to_uncond_jump4z,TestTranforms.test_elim_jump_to_uncond_jump4  s    	 	"r   c                    d }| j                  |d       | j                  |d       t        j                  |      D cg c]  }|j                  dk(  r| }}| j	                  t        |      d       | j                  |       y c c}w )Nc                     | ry|ry	 y)Nr   rI   rz   r4   )cond1cond2s     r   r	   z5TestTranforms.test_elim_jump_after_return1.<locals>.f  s    QQr   r%   r$   r&   r   )rQ   r   r   r   assertLessEqualrB   rF   r   s       r   test_elim_jump_after_return1z*TestTranforms.test_elim_jump_after_return1  s    	 	  N3  O4&)&:&:1&= =U"\\^;  = =S\1-!=s   Bc                 P    d }| j                  |d       | j                  |       y )Nc                      dd} | S )Nc                       y rb   r4   r4   r   r   rd   zBTestTranforms.test_make_function_doesnt_bail.<locals>.f.<locals>.g  s    r   )returnrI   r4   )rd   s    r   r	   z7TestTranforms.test_make_function_doesnt_bail.<locals>.f  s    Hr   	BINARY_OP)rQ   rF   r   s     r   test_make_function_doesnt_bailz,TestTranforms.test_make_function_doesnt_bail  s'    	 	  K0!r   c                    g d}|D ]  }| j                  |      5  t        |dd      }t        j                  |      D ]  }| j	                  |j
                  j                  d             | j	                  |j
                  j                  d             | j	                  |j
                  j                  d              | j                  |       d d d         y # 1 sw Y   xY w)N)	z3 * -5z-3 * 5z2 * (3 * 4)z(2 * 3) * 4z
(-1, 2, 3)z
(1, -2, 3)z
(1, 2, -3)z(1, 2, -3) * 6z:lambda x: x in {(3 * -5) + (-1 - 6), (1, -2, 3) * 2, None})erY   rZ   r   r   BUILD_)r[   r\   r   r   r   r   r   rF   )r+   exprsr   r,   r   s        r   test_constant_foldingz#TestTranforms.test_constant_folding  s    

  	(A" (q"h/ 11$7 HE$$U\\%<%<X%FG$$U\\%<%<Y%GH$$U\\%<%<X%FGH !!$'( (	(( (s   B7CC'	c                 d    d }| j                  t        |d      d       | j                  |       y )Nc                  &    t         t        t        fv S rb   )rK   r|   r}   r4   r   r   containtestz7TestTranforms.test_in_literal_list.<locals>.containtest  s    A;r   r   r   r   r   rF   )r+   r   s     r   test_in_literal_listz"TestTranforms.test_in_literal_list  s-    	0lKQO+&r   c                 d    d }| j                  t        |d      d       | j                  |       y )Nc                  &    t         t        fD ]  }  y rb   r|   r}   rJ   s    r   forloopz8TestTranforms.test_iterate_literal_list.<locals>.forloop  s    V r   r   r   r   )r+   r   s     r   test_iterate_literal_listz'TestTranforms.test_iterate_literal_list  s/    	 	0,GK'"r   c                 Z    d }| j                   |       d       | j                  |       y )Nc                       	 yNr   r4   r4   r   r   r	   z=TestTranforms.test_condition_with_binop_with_bools.<locals>.f  s    r   r   )r   rF   r   s     r   $test_condition_with_binop_with_boolsz2TestTranforms.test_condition_with_binop_with_bools  s)    	 	a !r   c                 Z    d }| j                   |d             | j                  |       y )Nc                     | r	 y	 y)NTFr4   rJ   s    r   r	   z3TestTranforms.test_if_with_if_expression.<locals>.f  s      %r   T)r   rF   r   s     r   test_if_with_if_expressionz(TestTranforms.test_if_with_if_expression  s'    	 	$ !r   c                 ,    d }| j                  |       y )Nc                      	 y)Nrz   r4   rJ   s    r   r	   z+TestTranforms.test_trailing_nops.<locals>.f  s    r   )rF   r   s     r   test_trailing_nopsz TestTranforms.test_trailing_nops  s    	 	!r   c                     d }| j                  t        |d      d       d }| j                  t        |d      d       d }| j                  t        |d      d       d }| j                  t        |d      d       y )Nc                  P    t         D  cg c]  } t        |       }| c}} S c c}} w rb   r|   r	   rK   ys     r   listcompzGTestTranforms.test_assignment_idiom_in_comprehensions.<locals>.listcomp       1!1Q4QA111   "FOR_ITERr   c                  P    t         D  ch c]  } t        |       }| c}} S c c}} w rb   r   r   s     r   setcompzFTestTranforms.test_assignment_idiom_in_comprehensions.<locals>.setcomp  r  r  c                  R    t         D  ci c]  } t        |       }|| c}} S c c}} w rb   r   r   s     r   dictcompzGTestTranforms.test_assignment_idiom_in_comprehensions.<locals>.dictcomp  s$    "#4QadAqDA444s   #c                      d t         D        S )Nc              3   6   K   | ]  }t        |      }|  y wrb   )r	   )r6   rK   r   s      r   r8   zYTestTranforms.test_assignment_idiom_in_comprehensions.<locals>.genexpr.<locals>.<genexpr>  s     1!1Q4QA1s   r   r4   r   r   genexprzFTestTranforms.test_assignment_idiom_in_comprehensions.<locals>.genexpr
  s    1q11r   )r   r   )r+   r  r  r  r  s        r   'test_assignment_idiom_in_comprehensionsz5TestTranforms.test_assignment_idiom_in_comprehensions   sv    	20:FJ	20*EqI	50:FJ	20*EqIr   cpuc                    d}g t        dd      t        dd      t        dd      t        t        d      t        d       fd	      }g t        d
d      dd}|D ]  \  }}|D ]  \  }}t        t        |      dz         D ]x  }t	        ||      D ]g  }	ddj                  |	      z   |z   |z   |z   }
| j                  |
|      5  |
|z  }t        |
dd|i      }| j                  ||d|
       d d d        i z   y # 1 sw Y   zxY w)Nz-+ #0)rY   1234u   абвгsra)  i.duioxX)|EJ@g|EJ	duifegFEGinffegFEG)rY   130)rY   .z.0z.2)rY   .40)r  r  r   %rY   )fmtvaluez % (x,)rK   zfmt = )	r   floatr   rB   r   joinr[   evalr   )r+   flags	testcaseswidth_precsr  suffixwidthprecrspecr  s1s2s                r   test_format_combinationsz&TestTranforms.test_format_combinations  sr   
-u5
]H-
 2K@
 eElU5\M2H=	
	
_&;<

 

 ' 	BME6* Bts5zA~. BA ,UA 6 B!BGGDM1E9D@6I!\\c\? B!$uB!%w&7#u!FB ,,Rx[AB BBBB	B
B Bs   -DDc                 0   d }| j                   |d      d       | j                   |dd      d       | j                   |dd      d       | j                   |dd      d       | j                   |d	d      d
       | j                   |dd      d       | j                   |d	d      d       | j                   |dd      d       | j                   |dd      d       | j                   |dd      d       | j                   |ddd      d       y )Nc           	         t        t        |            D cg c]
  }d|dz     }}t        |      dk(  rd|d   z   dz   }nddj                  |      z   dz   }t        | d| t	        t        ||                  S c c}w )	NrK   r   (r   z,)z, )z % )r   rB   r  r   dictzip)r  valuesr   varsargss        r   formatz.TestTranforms.test_format_misc.<locals>.format'  s    ',S['9:!a!uI:D:4yA~T!W}t+TYYt_,s23'TF+T#dF2C-DEE ;s   A=stringzx = %s!r  z	x = 1234!zx = %d!zx = %x!zx = 4d2!zx = %f!zx = 1234.000000!r  zx = 1234.5678901!zx = 1234.567890!zx = %s%% %%%%zx = 1234% %%z%% %sz
x = %% %s!zx = %s, y = %dr   "   zx = 12, y = 34)r   )r+   r5  s     r   test_format_misczTestTranforms.test_format_misc&  s   	F 	)84	40+>	40+>	40*=	402DE	<8:MN	<8:LM	<8+F6G	73\B 0"b9;KLr   c                 p   | j                  t        d      5  t        d       d d d        | j                  t        d      5  t        dddd       d d d        | j                  t        d      5  t        d	d
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        dd
di       d d d        | j                  t        d      5  t        ddg d       d d d        | j                  t        d      5  t        ddddgd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   ^xY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz&not enough arguments for format stringz	'%s' % ()z4not all arguments converted during string formattingz'%s' % (x, y)r   rI   r   zincomplete formatz'%s%' % (x,)rK   r  z'%s%%%' % (x,)z'%s%z' % (x,)zunsupported format characterz'%s%z' % (x, 5)z"a real number is required, not strz'%d' % (x,)r  z!an integer is required, not floatz'%x' % (x,)g
ףp=J@zan integer is required, not strzmust be real number, not strz'%f' % (x,)z'%s, %s' % (x, *y)rz   )assertRaisesRegex	TypeErrorr   
ValueErrorr+   s    r   test_format_errorsz TestTranforms.test_format_errors;  s   ##I<> 		 ##IJL 	4"23	4 ##J0CD 	.#t-	.##J0CD 	0!C;/	0##I<> 	/3+.	/ ##J0NO 	1"S$K0	1##I/ST 	/f.	/##I/RS 	0g/	0##I/PQ 	/f.	/##I/MN 	/f.	/##I<> 	:%QR'89	: ##IJL 	>%QaV'<=	> 	>5	 		4 	4	. 	.	0 	0	/ 	/	1 	1	/ 	/	0 	0	/ 	/	/ 	/	: 	:	> 	>s   H H-/H:I	I6I!#I.I;=J*JJ J, H*-H7:III!I+.I8;JJJ J),J5c                 .    d }| j                  |d       y )Nc                     | |}} | |} }y rb   r4   r   s     r   r	   z5TestTranforms.test_static_swaps_unpack_two.<locals>.f[  s    aqAaqAr   rr   rQ   r   s     r   test_static_swaps_unpack_twoz*TestTranforms.test_static_swaps_unpack_twoZ  s    	 	  F+r   c                 .    d }| j                  |d       y )Nc                 L    | ||}}} | ||}}} | ||}} }| ||} }}| ||}} }| ||} }}y rb   r4   r{   s      r   r	   z7TestTranforms.test_static_swaps_unpack_three.<locals>.fa  sP    A!qAA!qAA!qAA!qAA!qAA!qAr   rr   rA  r   s     r   test_static_swaps_unpack_threez,TestTranforms.test_static_swaps_unpack_three`  s    	 	  F+r   c                     t        ddd      D ]I  \  }}}d| d| d| d}| j                  |      5  t        |      }| j                  |d       d d d        K y # 1 sw Y   VxY w)	N_a_b_cz{'a': z, 'b': z, 'c': }rr   )r   r[   r   rQ   )r+   r|   r}   r   r   r,   s         r   test_static_swaps_match_mappingz-TestTranforms.test_static_swaps_match_mappingj  sz    tT40 	7GAq!s'!GA3b9Gg& 77@((v67 7	77 7s   AA$	c                     g d}t        ddd      D ]W  \  }}}|D ]L  }|j                  |||      }| j                  |      5  t        |      }| j	                  |d       d d d        N Y y # 1 sw Y   [xY w)N)zC({}, {}, {})zC({}, {}, c={})zC({}, b={}, c={})zC(a={}, b={}, c={})rG  rH  rI  rr   )r   r5  r[   r   rQ   )r+   formsr|   r}   r   formr   r,   s           r   test_static_swaps_match_classz+TestTranforms.test_static_swaps_match_classq  s    
 tT40 	;GAq! ;++aA.\\'* ;;GDD,,T6:; ;;	;; ;s   A--A6c                 (   h d}g d}t        ddd      D ]n  \  }}}|D ]c  }|j                  |||      }| j                  |      5  t        |      }||v r| j	                  |d       n| j                  |d       d d d        e p y # 1 sw Y   rxY w)N>   *_, b, ca, *_, ca, b, *_)z
{}, {}, {}z{}, {}, *{}z{}, *{}, {}z*{}, {}, {}rG  rH  rI  rr   )r   r5  r[   r   rR   rQ   )	r+   swapsrM  r|   r}   r   rN  r   r,   s	            r    test_static_swaps_match_sequencez.TestTranforms.test_static_swaps_match_sequence  s    4KtT40 
	?GAq! 	?++aA.\\'* ?;GDD%' --dF;00v>? ?	?
	?? ?s   5BBN))__name__
__module____qualname__r0   rF   rS   r_   rm   rp   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   requires_resourcer+  r8  r>  rB  rE  rK  rO  rU  r4   r   r   r!   r!   &   s    D"	9 
(6
('"R(>+ Z .!(F	LB#$(,'#
J Wu%B &B.M*>>,,7;?r   r!   c                   $    e Zd Zd Zd Zd Zd Zy)TestBugletsc                 l    d }| j                  t              5   |        d d d        y # 1 sw Y   y xY w)Nc                      ddh\  } }| |fS r   r4   r   s     r   r	   z%TestBuglets.test_bug_11510.<locals>.f  s    q6DAqa4Kr   )assertRaisesr<  r   s     r   test_bug_11510zTestBuglets.test_bug_11510  s1    	 z* 	C	 	 	s   *3c                 ^    t        d      D ]  }	 t         y # t        xs t        $ r Y w xY w)Nr   )r   	Exception)r+   r   s     r   test_bpo_42057zTestBuglets.test_bpo_42057  s8    r 	A	 )	 s   ,,c                     t        ddd       y )Nzwhile True or spam: pass<test>r   r\   r=  s    r   test_bpo_45773_pop_jump_if_truez+TestBuglets.test_bpo_45773_pop_jump_if_true  s    *Hf=r   c                     t        ddd       y )Nzwhile True or not spam: passrd  r   re  r=  s    r    test_bpo_45773_pop_jump_if_falsez,TestBuglets.test_bpo_45773_pop_jump_if_false  s    .&Ar   N)rV  rW  rX  r_  rb  rf  rh  r4   r   r   r[  r[    s    >Br   r[  c                   r    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestMarkingVariablesAsUnKnownc                     | j                  t        j                  t        j                                t        j                  d        y rb   )
addCleanupsyssettracegettracer=  s    r   setUpz#TestMarkingVariablesAsUnKnown.setUp  s&    clln5Tr   c                 .    d }| j                  |d       y )Nc                      d} | | z   }y r   r4   r   s     r   r	   zDTestMarkingVariablesAsUnKnown.test_load_fast_known_simple.<locals>.f  s    AAAr   	LOAD_FASTrR   r   s     r   test_load_fast_known_simplez9TestMarkingVariablesAsUnKnown.test_load_fast_known_simple  s    	 	a-r   c                 R    d }| j                  |d       | j                  |d       y )Nc                  2    t               rd} t                y r   	conditionr   rJ   s    r   r	   zFTestMarkingVariablesAsUnKnown.test_load_fast_unknown_simple.<locals>.f  s    {!Hr   LOAD_FAST_CHECKrs  rR   rQ   r   s     r   test_load_fast_unknown_simplez;TestMarkingVariablesAsUnKnown.test_load_fast_unknown_simple  *    	 	a!23  K0r   c                 R    d }| j                  |d       | j                  |d       y )Nc                       d} ~ t                y r   r   rJ   s    r   r	   zKTestMarkingVariablesAsUnKnown.test_load_fast_unknown_because_del.<locals>.f  s    A!Hr   rz  rs  r{  r   s     r   "test_load_fast_unknown_because_delz@TestMarkingVariablesAsUnKnown.test_load_fast_unknown_because_del  r}  r   c                    d }| j                  |d       | j                  |d       d }| j                  |d       | j                  |d       d }| j                  |d       | j                  |d       d }| j                  |d       | j                  |d       dd}| j                  |d       | j                  |d       y )	Nc                     t        |        y rb   r  rJ   s    r   f1zPTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter.<locals>.f1  	    !Hr   rs  rz  c                     t        |        y rb   r  rJ   s    r   f2zPTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter.<locals>.f2  r  r   c                      t        |        y rb   r  )r4  s    r   f3zPTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter.<locals>.f3  s	    $Kr   c                      t        |        y rb   r  )kwargss    r   f4zPTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter.<locals>.f4  s	    &Mr   c                     t        |        y rb   r  rJ   s    r   f5zPTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter.<locals>.f5  r  r   )r   r{  )r+   r  r  r  r  r  s         r   &test_load_fast_known_because_parameterzDTestMarkingVariablesAsUnKnown.test_load_fast_known_because_parameter  s    	b+.  %67	b+.  %67	b+.  %67	b+.  %67	b+.  %67r   c                 R    d }| j                  |d       | j                  |d       y )Nc                  H    t               rd} t                t        |        y r   rx  rJ   s    r   r	   zTTestMarkingVariablesAsUnKnown.test_load_fast_known_because_already_loaded.<locals>.f  s    {!H!Hr   rz  rs  rt  r   s     r   +test_load_fast_known_because_already_loadedzITestMarkingVariablesAsUnKnown.test_load_fast_known_because_already_loaded  s*    	
 	a!23a-r   c                 R    d }| j                  |d       | j                  |d       y )Nc                  8    t               rd} nd} t        |        y )Nr   rI   rx  rJ   s    r   r	   zOTestMarkingVariablesAsUnKnown.test_load_fast_known_multiple_branches.<locals>.f  s    {!Hr   rs  rz  r{  r   s     r   &test_load_fast_known_multiple_brancheszDTestMarkingVariablesAsUnKnown.test_load_fast_known_multiple_branches  s*    	 	a-  $56r   c                 .    d }| j                  |d       y )Nc                  2    	 ddz  } | S # t         $ r Y  S w xY wNr   r   )ZeroDivisionError)ress    r   r	   zKTestMarkingVariablesAsUnKnown.test_load_fast_unknown_after_error.<locals>.f  s0    !e J % Js   	 	rz  rt  r   s     r   "test_load_fast_unknown_after_errorz@TestMarkingVariablesAsUnKnown.test_load_fast_unknown_after_error  s    	 	a!23r   c                 R    d }| j                  |d       | j                  |d       y )Nc            
      \    	 ddz   dx} x}x}x}x}x}}y #  t                Y $xY wr  r  )r|   r}   r   r   r   r	   rd   s          r   r	   zMTestMarkingVariablesAsUnKnown.test_load_fast_unknown_after_error_2.<locals>.f  sN    +A )*)A))A))A)A+aAq!Q*s    +rz  rs  r{  r   s     r   $test_load_fast_unknown_after_error_2zBTestMarkingVariablesAsUnKnown.test_load_fast_unknown_after_error_2  s*    	* 	a!23  K0r   c                    d }dD ]0  }| j                  |dd|d       | j                  |dd|d       2 dD ]0  }| j                  |dd|d       | j                  |dd|d       2 dD ]0  }| j                  |dd|d       | j                  |dd|d       2 | j                  |dd	       | j                  |dd	       | j                  |dd
       | j                  |dd
       y )Nc                     dx} x}x}x}x}x}x}x}x}}	dx}
x}x}x}x}x}x}x}x}}dx}x}x}x}x}x}x}x}x}}dx}x}x} x}!x}"x}#x}$x}%x}&}'dx}(x})x}*x}+x},x}-x}.x}/x}0}1dx}2x}3x}4x}5x}6x}7x}8x}9x}:};dx}<x}=x}>x}?x}@x}Ax}Bx}Cx}D}Edx}Fx}Gx}Hx}Ix}Jx}Kx}Lx}Mx}N}O~H~It        I       t        |F|GH|I       	 t        | ||>|?       t        @ANO       r   r  )Pa00a01a02a03a04a05a06a07a08a09a10a11a12a13a14a15a16a17a18a19a20a21a22a23a24a25a26a27a28a29a30a31a32a33a34a35a36a37a38a39a40a41a42a43a44a45a46a47a48a49a50a51a52a53a54a55a56a57a58a59a60a61a62a63a64a65a66a67a68a69a70a71a72a73a74a75a76a77a78a79sP                                                                                   r   r	   zGTestMarkingVariablesAsUnKnown.test_load_fast_too_many_locals.<locals>.f  s   HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#HIICI#IIcICI#IIcIC#S#J#sC%c3S)c3S) r   )r   r   >   ?   rs  r|   02rz  )@   A   N   O   )F   G   r  r  r{  )r+   r	   r   s      r   test_load_fast_too_many_localsz<TestMarkingVariablesAsUnKnown.test_load_fast_too_many_locals  s+   	*   	GA!!![AaV*=$$Q(9Qqf:F	G   	AA!!!%6!Ab6
C$$Qq2Z@	A  	GA!!![AaV*=$$Q(9Qqf:F	G
 	a!2E:  K7a!2E:ae4r   c                    t        j                  d      }i }t        ||       |d   }| j                  |d       | j	                  |d       |j
                  j                  }fdt        j                          |       }| j                  |       | j                  |d       | j	                  |d       | j                  |j
                  j                  |       y )Na              def f():
                x = y = 2
                if not x:
                    return 4
                for i in range(55):
                    x + 6
                L = 7
                L = 8
                L = 9
                L = 10
        r	   rs  rz  c                 j    |dk(  r,| j                   dk(  rd| _         t        j                  d        y S NrX   r   rz   f_linenorm  rn  frameeventargtraces      r   r  zMTestMarkingVariablesAsUnKnown.test_setting_lineno_no_undefined.<locals>.traceA  0    5>>Q#6!"T"Lr   )r
   r   r   rR   rQ   r   r   rm  rn  assertIsNoner   )r+   r,   nsr	   r   resultr  s         @r    test_setting_lineno_no_undefinedz>TestMarkingVariablesAsUnKnown.test_setting_lineno_no_undefined.  s        T2sGa-  $56**$$	 	U&!a-  $56++W5r   c                    t        j                  d      }i }t        ||       |d   }| j                  |d       | j	                  |d       |j
                  j                  }fdd}| j                  t        |      5  t        j                          |       }d d d        | j                  d       | j                  |d       | j	                  |d       | j                  |j
                  j                  |       y # 1 sw Y   fxY w)Na              def f():
                x = y = 2
                if not x:
                    return 4
                for i in range(55):
                    x + 6
                del x
                L = 8
                L = 9
                L = 10
        r	   rs  rz  c                 j    |dk(  r,| j                   dk(  rd| _         t        j                  d        y S r  r  r   s      r   r  zNTestMarkingVariablesAsUnKnown.test_setting_lineno_one_undefined.<locals>.tracea  r  r   z!assigning None to 1 unbound localr   r
   r   r   rR   rQ   r   r   assertWarnsRegexRuntimeWarningrm  rn  r   r+   r,   r  r	   r   r   r  r  s          @r   !test_setting_lineno_one_undefinedz?TestMarkingVariablesAsUnKnown.test_setting_lineno_one_undefinedN  s        T2sGa-  $56**$$	 1"">15 	LLSF	 	#a-  $56++W5	 	   DDc                    t        j                  d      }i }t        ||       |d   }| j                  |d       | j	                  |d       |j
                  j                  }fdd}| j                  t        |      5  t        j                          |       }d d d        | j                  d       | j                  |d       | j	                  |d       | j                  |j
                  j                  |       y # 1 sw Y   fxY w)Na              def f():
                x = y = 2
                if not x:
                    return 4
                for i in range(55):
                    x + 6
                del x, y
                L = 8
                L = 9
                L = 10
        r	   rs  rz  c                 j    |dk(  r,| j                   dk(  rd| _         t        j                  d        y S r  r  r   s      r   r  zNTestMarkingVariablesAsUnKnown.test_setting_lineno_two_undefined.<locals>.trace  r  r   z"assigning None to 2 unbound localsr   r  r  s          @r   !test_setting_lineno_two_undefinedz?TestMarkingVariablesAsUnKnown.test_setting_lineno_two_undefinedp  s        T2sGa-  $56**$$	 2"">15 	LLSF	 	#a-  $56++W5	 	r  c                     t        j                  d      }i }t        ||       |d   }| j                  |d       | j	                  |d       |S )Nz            def f():
                x = 2
                L = 3
                L = 4
                L = 5
                if not L:
                    x + 7
                    y = 2
        r	   rs  rz  )r
   r   r   rR   rQ   )r+   r,   r  r	   s       r   make_function_with_no_checksz:TestMarkingVariablesAsUnKnown.make_function_with_no_checks  sT     	  	 T2sGa-  $56r   c                    | j                         }|j                  j                  }fdd}| j                  t        |      5  t        j                          |        d d d        | j                  |d       | j                  |d       | j                  |j                  j                  |       y # 1 sw Y   TxY w)Nc                 v    |dk(  r2| j                   dk(  r#| j                  d= t        j                  d        y S )NrX   r   rK   r  f_localsrm  rn  r   s      r   r  zWTestMarkingVariablesAsUnKnown.test_deleting_local_warns_and_assigns_none.<locals>.trace  s5    5>>Q#6NN3'T"Lr   z#assigning None to unbound local 'x'rs  rz  )
r  r   r   r  r  rm  rn  rR   rQ   r   )r+   r	   r   r   r  s       @r   *test_deleting_local_warns_and_assigns_nonezHTestMarkingVariablesAsUnKnown.test_deleting_local_warns_and_assigns_none  s    --/**$$	 3"">15 	LLC	 	a-  $56++W5	 	s   B55B>c                     | j                         }fdt        j                          |        | j                  |d       | j	                  |d       y )Nc                 z    |dk(  r4| j                   dk(  r%d| j                  d<   t        j                  d        y S )NrX   r   *   rK   r  r   s      r   r  zTTestMarkingVariablesAsUnKnown.test_modifying_local_does_not_add_check.<locals>.trace  7    5>>Q#6&(s#T"Lr   rs  rz  r  rm  rn  rR   rQ   r+   r	   r  s     @r   'test_modifying_local_does_not_add_checkzETestMarkingVariablesAsUnKnown.test_modifying_local_does_not_add_check  J    --/	 	U	a-  $56r   c                     | j                         }fdt        j                          |        | j                  |d       | j	                  |d       y )Nc                 z    |dk(  r4| j                   dk(  r%d| j                  d<   t        j                  d        y S )NrX   r   r  r   r  r   s      r   r  zWTestMarkingVariablesAsUnKnown.test_initializing_local_does_not_add_check.<locals>.trace  r  r   rs  rz  r   r!  s     @r   *test_initializing_local_does_not_add_checkzHTestMarkingVariablesAsUnKnown.test_initializing_local_does_not_add_check  r#  r   N)rV  rW  rX  rp  ru  r|  r  r  r  r  r  r  r  r	  r  r  r  r  r"  r&  r4   r   r   rj  rj    s[    .1184.7	41%5N6@ 6D 6D$6"77r   rj  c                   <    e Zd Z	 	 d	dZd Zd Zd Zd Zd Zd Z	y)
DirectCfgOptimizerTestsNc                     ||}| j                  |||      \  }}| j                  |      }| j                  ||       | j                  ||       y rb   )get_optimizednormalize_instsassertInstructionsMatchr   )r+   instsexpected_instsconstsexpected_constsnlocals	opt_insts
opt_constss           r   cfg_optimization_testz-DirectCfgOptimizerTests.cfg_optimization_test  sX     "$O $ 2 25&' J	:--n=$$Y?_5r   c                     dd| j                         x}dfd|ddg}dd| j                         x}dfd|dg}| j                  ||g d	g d
       y )N	LOAD_NAMEr      rO   r   ri   rI   r   ri   rz      r&   r;  )ri   r   r   )rk   rI   r;  r   r   rI   rz   r   )r   rI   rz   r/  r0  Labelr4  r+   lblr-  r.  s       r   1test_conditional_jump_forward_non_const_conditionzIDirectCfgOptimizerTests.test_conditional_jump_forward_non_const_condition  sw     

!4b9!! 
 !

!4b9!#
 	""5#1*93< 	# 	>r   c                 t    dd| j                         x}dfd|ddg}g d}| j                  ||g dd	d
g       y )Nri   rz   r8  rO   r   r9  r:  r<  )NOPr8  )rG  r   )rk   r   r;  r=  r   rz   r>  r?  rA  s       r   -test_conditional_jump_forward_const_conditionzEDirectCfgOptimizerTests.test_conditional_jump_forward_const_condition  sZ    
 "

!4b9!! 


 	""5#1*945q6 	# 	;r   c           	          | j                         x}dd|dfddg}| j                         x}dd|dfddg}| j                  ||t        t        d                   y )Nr6  rO   r   )r7  rI   r   r&   r   r   r/  r@  r4  r'   r   )r+   lbl1r-  rB  expecteds        r   2test_conditional_jump_backward_non_const_conditionzJDirectCfgOptimizerTests.test_conditional_jump_backward_non_const_condition  ss    JJL D r*  
 ::<C b)  
 	""5(4a>"Jr   c           	          | j                         x}dd|dfddg}| j                         x}dd|dfg}| j                  ||t        t        d            	       y )
NrE  rO   r   r9  rJ  rF  JUMPr   rK  rL  )r+   rM  r-  rB  r.  s        r   .test_conditional_jump_backward_const_conditionzFDirectCfgOptimizerTests.test_conditional_jump_backward_const_condition  so     JJL D!r*! 
 ::<CS"

 	""5.eAh"Pr   c           	      Z    g d}| j                  ||t        t        d            d       y )N))ri   r   r   )ri   r   rI   )ri   rI   rz   )rr   rz   r   
STORE_FASTr   r   rT  )POP_TOPr   r   )r&   r   rz   r   )r/  r1  )r4  r'   r   )r+   r-  s     r   test_no_unsafe_static_swapz2DirectCfgOptimizerTests.test_no_unsafe_static_swap(  s+    	
 	""5%U1XPQ"Rr   c                 d    g d}g d}| j                  ||g        | j                  ||g        y )N)	PUSH_NULLr   r   rY  )rh   r   r   CALLr   r   r[  r&   r   r   )rY  )rh   r   r   r[  r[  r]  )r.  r/  )r4  )r+   beforeafters      r   'test_only_one_push_null_per_load_globalz?DirectCfgOptimizerTests.test_only_one_push_null_per_load_global6  s<    

 	""6%"K""5r"Jr   )NNr   )
rV  rW  rX  r4  rC  rH  rO  rR  rW  r`  r4   r   r   r(  r(    s2     <@&'6>*;,K"Q SKr   r(  __main__)r   	itertoolsr   r   rm  r
   unittesttestr   test.support.bytecode_helperr   r   r   r   r!   TestCaser[  rj  r(  rV  mainr4   r   r   <module>rh     s    
 + 
    R#
f	?$ f	?RB(## B4d7$4 d7N	yK5 yKv zHMMO r   