o
    g                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ G dd dejZG dd dejZG d	d
 d
ejZedkrWe  dS dS )    N)support)script_helper)FakePathc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%krUd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#e$j%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*e$j%dJdK Z+dLdM Z,dNdO Z-e$j%dPdQ Z.e$j%dRdS Z/e$j%dTdU Z0dVdW Z1dXdY Z2dZd[ Z3e$j%d\d] Z4d^d_ Z5d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=dpdq Z>drS )sTestSpecificsc                 C   s   t |dd d S )Nz<single>singlecompileselfsource r   G/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_compile.pycompile_single      zTestSpecifics.compile_singlec                 C   s   |  t| j| d S N)assertRaisesSyntaxErrorr   r	   r   r   r   assertInvalidSingle   s   z!TestSpecifics.assertInvalidSinglec                 C   s   t ddd t ddd d S )Nhi<test>execzhir   r
   r   r   r   test_no_ending_newline   s   z$TestSpecifics.test_no_ending_newlinec                 C   s   t ddd d S )N r   r   r   r   r   r   r   
test_empty   r   zTestSpecifics.test_emptyc                 C   s4   t ddd t ddd t ddd t ddd d S )Nz
r   r   zhi
stuff
def f():
    passz(this_isreally_old_macdef f():
    passr   r   r   r   r   test_other_newlines   s   z!TestSpecifics.test_other_newlinesc                 C   sH   |  ttddd dd l}|j}t|dd | d| t|d| d S )Nz__debug__ = 1?r   r   	__debug__ZsureF)r   r   r   builtinsr   setattrassertEqual)r
   r   prevr   r   r   test_debug_assignment#   s   z#TestSpecifics.test_debug_assignmentc                 C   sX   |  ttd |  ttd |  ttd |  ttd |  ttd |  ttd d S )Nzlambda a,a:0zlambda a,a=1:0zlambda a=1,a=1:0zdef f(a, a): passzdef f(a = 0, a = 1): passdef f(a): global a; a = 1)r   r   evalr   r   r   r   r   test_argument_handling,   s   z$TestSpecifics.test_argument_handlingc                 C      |  ttddd d S )Nz1+*3filenamer   r   r   r   r   r   r   r   test_syntax_error5      zTestSpecifics.test_syntax_errorc                 C   r'   )Nz	f(None=1)<string>r   r)   r   r   r   r   test_none_keyword_arg8   r+   z#TestSpecifics.test_none_keyword_argc                 C      |  ttd d S )Nr$   r   r   r   r   r   r   r   test_duplicate_global_local;      z)TestSpecifics.test_duplicate_global_localc                 C   s,  G dd d}| }t  }td|| | |jd ztd|| W n	 ty+   Y nw | d td|| | |jdtd	f td
|| | |jd|f td|| | |jd|f | ttd| G dd d}| }| ttd|| G dd dt	}| }td|| | |d d d S )Nc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Mz9Test mapping interface versus possible calls from eval().c                 S   s   |dkrdS t Na   )KeyErrorr
   keyr   r   r   __getitem__B   s   zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__getitem__c                 S   s   ||f| _ d S r   )resultsr
   r7   valuer   r   r   __setitem__F      zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__setitem__c                 S   s   t dS )Nxyz)listr   r   r   r   keysH   s   zGTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.keysN)__name__
__module____qualname____doc__r8   r<   r@   r   r   r   r   M@   s
    rE   zz = a)zr4   zz = bzDid not detect a KeyErrorz	z = dir()rF   r>   zz = globals()zz = locals()c                   @   s   e Zd ZdZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.AzNon-mappingN)rA   rB   rC   rD   r   r   r   r   A]   s    rG   c                   @      e Zd Zdd ZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Dc                 S   s   |dkrdS t | |S r2   )dictr8   r6   r   r   r   r8   e   s   zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.D.__getitem__N)rA   rB   rC   r8   r   r   r   r   Dd       rJ   r4   )
globalsr   r!   r9   	NameErrorfailr?   r   	TypeErrorrI   )r
   rE   mgrG   rJ   dr   r   r   )test_exec_with_general_mapping_for_locals>   s2   
z7TestSpecifics.test_exec_with_general_mapping_for_localsc                 C   s@   ddd  }i }d|fd  }t || | |d dd d S )	Nz	x = x or z-xi	  z
def f(x):
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    # the expressions above have no effect, x == argument
    while x:
        x -= 1
        # EXTENDED_ARG/JUMP_ABSOLUTE here
    return x

   f   r   )r   r!   )r
   ZlongexprrQ   coder   r   r   test_extended_argm   s   
zTestSpecifics.test_extended_argc                 C   r.   )Nzdef f(a=1, b): passr/   r   r   r   r   test_argument_order   r1   z!TestSpecifics.test_argument_orderc                 C   s<   |  ttd |  ttd |  ttd |  ttd d S )NZ2ez2.0e+z1e-z3-4e/21)r   r   r%   r   r   r   r   test_float_literals   s   z!TestSpecifics.test_float_literalsc                 C   s   d}t |dd d S )Nz
if 1:
    if 2:
        passr,   r   r   r
   sr   r   r   test_indentation   s   zTestSpecifics.test_indentationc                 C   sJ   d dgd dg }t|dd}| |jd | t| dg d S )	Nr   
   Zspamfnr      )r      i  )joinr   r!   co_firstlinenor?   co_lines)r
   Zs256cor   r   r   test_leading_newlines   s   z#TestSpecifics.test_leading_newlinesc                 C   s  dD ]	}|  tt| q| tdd | tdd | tdd | tdd | tdd	 | td
d | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd  | td!d" | td#d$ | td%d& | td'd( d S ))N)Z077787Z0xjz0x.Z0eZ090000000000000Z080000000000000Z000000000000009Z000000000000008Z0b42Z0BADCAFEZ0o123456789z0b1.1z0o4.2Z0b101jZ0o153jZ0b100e1Z0o777e1Z0777Z000777Z000000000000007Z0xff   z0777.i	  z0777.0Z8000000000000000000000000000000000000000000000000000777e0Z0777e1iZ  Z0e0r   z	0000e-012z09.5g      #@Z0777jy             H@Z000Z00j                z00.0Z0e3z090000000000000.g  聰vBz&090000000000000.0000000000000000000000Z090000000000000e0z090000000000000e-0Z090000000000000jy          聰vBz000000000000008.g       @z000000000000009.g      "@Z0b101010*   z-0b000000000010Z0o777i  z
-0o0000010i)r   r   r%   r!   )r
   argr   r   r   !test_literals_with_leading_zeroes   s4   z/TestSpecifics.test_literals_with_leading_zeroesc                 C   s   t jdkrd}| t|d | td| d nt jdkr4d}| t|d | td| d	 n| d
 | tdt j d  t | tdt j d  t d S )NiZ
0xffffffffl    -l     Z0xffffffffffffffffl    l z)How many bits *does* this machine have???z%sra      )sysmaxsizer!   r%   rN   assertIsInstanceint)r
   Zall_one_bitsr   r   r   test_unary_minus   s   


 zTestSpecifics.test_unary_minusro   c           
      C   sH   d}d}d}d}d}d}d}d}| j jjD ]}	|	d ur!| |	t qd S )	Nl        l     l          l       l            l         ro   l )test_32_63_bit_values__code__	co_constsrs   rt   )
r
   r3   bcrR   erU   rQ   hZvariabler   r   r   rv      s   z#TestSpecifics.test_32_63_bit_valuesc                 C   s$   d\}}|  |d |  |d d S )N)ra   )r}   ra   ra   r}   r!   )r
   ijr   r   r   test_sequence_unpacking_error   s   z+TestSpecifics.test_sequence_unpacking_errorc                 C   sB   g d}|D ]}|d7 }|  tt|dd |  tt|dd qd S )N)zNone = 0z	None += 0z__builtins__.None = 0zdef None(): passzclass None: passz(a, None) = 0, 0zfor None in range(10): passzdef f(None): passzimport Nonezimport x as Nonezfrom x import Nonezfrom x import y as Noner^   tmpr   r   r)   )r
   Zstmtsstmtr   r   r   test_none_assignment   s   z"TestSpecifics.test_none_assignmentc                 C   sF   g d}g d}|D ]}t |dd q
|D ]}| tt |dd qd S )N)z
import syszimport os, syszimport os as barzimport os.path as barz0from __future__ import nested_scopes, generatorsz2from __future__ import (nested_scopes,
generators)z3from __future__ import (nested_scopes,
generators,)z%from sys import stdin, stderr, stdoutz'from sys import (stdin, stderr,
stdout)z(from sys import (stdin, stderr,
stdout,)z(from sys import (stdin
, stderr, stdout)z)from sys import (stdin
, stderr, stdout,)z7from sys import stdin as si, stdout as so, stderr as sez9from sys import (stdin as si, stdout as so, stderr as se)z:from sys import (stdin as si, stdout as so, stderr as se,))zimport (os, sys)zimport (os), (sys)zimport ((os), (sys))zimport (syszimport sys)zimport (os,)zimport os As barzimport os.path a barzfrom sys import stdin As stdoutzfrom sys import stdin a stdoutzfrom (sys) import stdinz%from __future__ import (nested_scopesz%from __future__ import nested_scopes)z0from __future__ import nested_scopes,
generatorszfrom sys import (stdinzfrom sys import stdin)z%from sys import stdin, stdout,
stderrzfrom sys import stdin sizfrom sys import stdin,zfrom sys import (*)z(from sys import (stdin,, stdout, stderr)z from sys import (stdin, stdout),r   r   )r   r   r   )r
   ZsucceedrN   r   r   r   r   test_import   s   zTestSpecifics.test_importc                 C   s.   dd }| \}}|  t|jt|j d S )Nc                  S   s   ddd} ddd}| |fS )Nra   c                 S      | S r   r   xr   r   r   <lambda>0      zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>rp   c                 S   r   r   r   r   r   r   r   r   1  r   )ra   )rp   r   )f1f2r   r   r   rU   /  s   

z7TestSpecifics.test_for_distinct_code_objects.<locals>.f)assertNotEqualidrw   )r
   rU   r   r   r   r   r   test_for_distinct_code_objects-  s   
z,TestSpecifics.test_for_distinct_code_objectsc                 C   s   dd }|  |j d S )Nc                   S      dS )NZfoor   r   r   r   r   r   7  r   z/TestSpecifics.test_lambda_doc.<locals>.<lambda>)ZassertIsNonerD   )r
   lr   r   r   test_lambda_doc6  s   zTestSpecifics.test_lambda_docc                 C   s   d}|  tt|dd d}t|dd | t|d d}| t|d d}| t|d d	}| t|d d
}| t|d d}| t|d d}| t|d d}| t|d d S )Ns#   # -*- coding: badencoding -*-
pass
r   r   u%   # -*- coding: badencoding -*-
"Â¤"
u   Â¤u   "Â¤"
s   "¤"
   ¤s   # -*- coding: latin1 -*-
"¤"
s   # -*- coding: utf-8 -*-
"¤"
s"   # -*- coding: iso8859-15 -*-
"¤"
u   Â€u*   """\
# -*- coding: iso8859-15 -*-
Â¤"""
u!   # -*- coding: iso8859-15 -*-
Â¤s(   """\
# -*- coding: iso8859-15 -*-
¤"""
u   # -*- coding: iso8859-15 -*-
¤)r   r   r   r!   r%   r
   rW   r   r   r   test_encoding:  s&   zTestSpecifics.test_encodingc                 C   s^  G dd dt }| }d|d< | |d d |d  d7  < | |d d |d= | d| d|d< | |d d |d  d7  < | |d d |d= | d| d|dd< | |dd d |dd  d7  < | |dd d |dd= | tdd| d|ddddf< | |ddddf d |ddddf  d7  < | |ddddf d |ddddf= | tddtddf| d|ddd< | |ddd d |ddd  d7  < | |ddd d |ddd= | tddd| d|ddddddf< | |ddddddf d |ddddddf  d7  < | |ddddddf d |ddddddf= | tdddtdddf| d|d< | |d d |d  d7  < | |d d |d= | t| d|d< | |d d |d  d7  < | |d d |d= | ttf| d S )	Nc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z.TestSpecifics.test_subscripts.<locals>.str_mapc                 S   s
   i | _ d S r   )datar   r   r   r   __init__S  s   
z7TestSpecifics.test_subscripts.<locals>.str_map.__init__c                 S   s   | j t| S r   r   strr6   r   r   r   r8   U  r=   z:TestSpecifics.test_subscripts.<locals>.str_map.__getitem__c                 S   s   || j t|< d S r   r   r:   r   r   r   r<   W  r1   z:TestSpecifics.test_subscripts.<locals>.str_map.__setitem__c                 S   s   | j t|= d S r   r   r6   r   r   r   __delitem__Y  r   z:TestSpecifics.test_subscripts.<locals>.str_map.__delitem__c                 S   s   t || jv S r   )r   r   r6   r   r   r   __contains__[  r=   z;TestSpecifics.test_subscripts.<locals>.str_map.__contains__N)rA   rB   rC   r   r8   r<   r   r   r   r   r   r   str_mapR  s    r   ra   rp   )ra   ra      .)..)objectr!   ZassertNotInsliceEllipsis)r
   r   rR   r   r   r   test_subscriptsO  sd   
    zTestSpecifics.test_subscriptsc                 C   s0   d}|d dd tdD ; }t|dd d S )Nzdef f(%s): pass, c                 s   s    | ]	}d ||f V  qdS )za%d:%dNr   .0r   r   r   r   	<genexpr>      z6TestSpecifics.test_annotation_limit.<locals>.<genexpr>,  r   r   )rc   ranger   r[   r   r   r   test_annotation_limit  s   z#TestSpecifics.test_annotation_limitc                 C   sZ   G dd d}|  d|jjj |  d|jjj |  d|jjj |  d|jjj d S )Nc                   @   rH   )z&TestSpecifics.test_mangling.<locals>.Ac                  S   s   d} d}dd l }dd l}d S )Nra   rp   r   )_A__mangled_modZ__package__.module)_A__mangled__not_mangled__r   __package__r   r   r   rU     s   z(TestSpecifics.test_mangling.<locals>.A.fN)rA   rB   rC   rU   r   r   r   r   rG     rK   rG   r   r   r   r   )assertInrU   rw   co_varnames)r
   rG   r   r   r   test_mangling  s
   zTestSpecifics.test_manglingc           	      C   sJ  t }| dr|d d }t|dd}| }W d    n1 s$w   Y  ddgddgd	d
gddg||gg}|D ]7\}}t|d| d}t|d| dtj}| t	|tj
k t|d| d}| || | |jd|  q<tdddtj}| tt|dd | ttt dd t
 }t g|_| tt|dd d S )NZpycr}   zutf-8)encodingz<assign>zx = 5z	<ifblock>zif True:
    pass
z
<forblock>z!for n in [1, 2, 3]:
    print(n)
z	<deffunc>zdef foo():
    pass
foo()
z%s1r   z%s2z%s3zprint(1)r,   z<ast>r%   )__file__lowerendswithopenreadr   _astZPyCF_ONLY_AST
assertTruetypeZModuler!   co_filenamer   rO   ZIfZBoolOpbody)	r
   fnamerU   Z	fcontentsZsample_coderW   Zco1astZco2r   r   r   test_compile_ast  s2   
zTestSpecifics.test_compile_astc                    s:   d  fdd}| | | | i}|  |ddd d S )Nr   c                      s    d7   S Nra   r   r   r   r   r   rU     s   z3TestSpecifics.test_dict_evaluation_order.<locals>.frp      )ra   r   r~   )r
   rU   rR   r   r   r   test_dict_evaluation_order  s   z(TestSpecifics.test_dict_evaluation_orderc              	   C   s   dD ]}t d|d}| |jd qtdtdfD ]$}| t t d|d}W d    n1 s2w   Y  | |jd q| tt dt	dd d S )N)file.py   file.pypassr   r   r   )
r   r!   r   	bytearray
memoryviewZassertWarnsDeprecationWarningr   rO   r?   )r
   r(   rW   r   r   r   test_compile_filename  s   z#TestSpecifics.test_compile_filenamec                 C   s<   d}t |dd}|jD ]}t|tjr| |j|j qd S )Nzdef f(): pass
def g(): passZmyfiler   )r   rx   
isinstancetypesCodeTypeassertIsr   )r
   r\   rz   objr   r   r   test_same_filename_used  s   
z%TestSpecifics.test_same_filename_usedc                 C   s   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 |  d
 |  d |  d |  d |  d d S )Nz1 + 2z
1 + 2z1 + 2
z1 + 2

z1 + 2		
z1 + 2		
        z1 + 2 # one plus twoz1; 2zimport sys; syszdef f():
   passzwhile False:
   passzif x:
   f(x)zif x:
   f(x)
else:
   g(x)zclass T:
   pass)r   r   r   r   r   test_single_statement  s   












z#TestSpecifics.test_single_statementc                 C   sT   |  d |  d |  d |  d |  d |  d |  d |  d d S )	Nz1
2zdef f(): passza = 13
b = 187zdel x
del yzf()
g()zf()
# blah
blah()zf()
xy # blah
blah()zx = 5 # comment
x = 6
)r   r   r   r   r   test_bad_single_statement  s   






z'TestSpecifics.test_bad_single_statementc              	   C      d}t  0}tj|d}t|d}|| W d    n1 s#w   Y  t|d }W d    n1 s9w   Y  | 	d|j
 d S )Ns   0000 
00000000000
 

bad.pywbr   	   Non-UTF-8tempfileTemporaryDirectoryospathrc   r   writer   Zrun_python_until_endr   errr
   srcZtmpdr`   fpresr   r   r   "test_particularly_evil_undecodable     
z0TestSpecifics.test_particularly_evil_undecodablec              	   C   r   )Ns   # 
#
r   r   r   r   r   r   r   r   r   $test_yet_more_evil_still_undecodable  r   z2TestSpecifics.test_yet_more_evil_still_undecodablec                    sd   t  d t  d  td d fdd	}|dd |dd	 |dd
 |dd d S )Nr   r   g      ?r   c              	      s~   | |  }t |d|  fD ],}| ||  }d| ||}jt|d t |d| W d    q1 s7w   Y  qd S )Nr   zCompiling ({!r} + {!r} * {}))msg)r   formatr   RecursionError)prefixZrepeatedmodeZ	expect_okZdepthbrokenZdetailsZcrash_depthZ
fail_depthr
   Zsuccess_depthr   r   check_limit%  s   z@TestSpecifics.test_compiler_recursion_limit.<locals>.check_limitr3   z()z.bz[0]z*a)r   )rq   getrecursionlimitrt   )r
   r   r   r   r   test_compiler_recursion_limit  s   	



z+TestSpecifics.test_compiler_recursion_limitc                 C   s8  |  td tddd W d    n1 sw   Y  |  td ttddd W d    n1 s5w   Y  ttddd dd}| t|d ttd	dd dd}| t|d ttd
dd dd}| t|d | ttd	dd d t }ttddd | | |d d d S )Nzcannot contain nullz123 <dummy>r%   s   123 ra   r}      s   1234s   $23$s   ax = 123r   r4   )ZassertRaisesRegex
ValueErrorr   r   r!   r%   rI   r   )r
   rW   	namespacer   r   r   test_null_terminated7  s    z"TestSpecifics.test_null_terminatedc                 C   s>   |j jD ]}t|t|kr d S q| d||j jf  d S )Nz unable to find constant %r in %r)rw   rx   reprrN   )r
   funcZexpectedconstr   r   r   check_constantK  s   

zTestSpecifics.check_constantc                    s   fdd}|d  |d |d |d |d dd dd }}  |j|j  |t  t| tt d	d d
d }}dd }  |jjd |jjd d    tt|jjd |jjd  dd dd }}  |j|j  |t	dh  
|d d S )Nc                    s`   i }d| | f }t || |d }|d } |j|j  ||   t| t|  d S Nzf1, f2 = lambda: %r, lambda: %rr   r   )r   r   rw   r   r!   r   )r   nsrW   r   r   r   r   r   check_same_constantZ  s   
z?TestSpecifics.test_merge_constants.<locals>.check_same_constantr           s   abcabcc                   S   r   )N.r   r   r   r   r   r   l  r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>c                   S   r   )N
not a namer   r   r   r   r   r   r  r   c                   S   r   )Nr   r   r   r   r   r   r   r  r   c                 S      | dv S )N>   r   r   r   r   r   r   r   s      ra   c                 S   r   N>   r   r   r   r   r   r   r   {  r   )r   rw   r   r   r!   r   rx   nextiter	frozensetr   )r
   r   r   r   Zf3r   r   r   test_merge_constantsU  s,   

z"TestSpecifics.test_merge_constantsc                 C   s<   dd }dd }|  |jj|jj |  |jj|jj d S )Nc                 S      | j jS r   )yrF   r   r   r   r   r     r   z5TestSpecifics.test_merge_code_attrs.<locals>.<lambda>c                 S   r  r   )ry   rz   r3   r   r   r   r     r   )r   rw   co_linetableco_code)r
   r   r   r   r   r   test_merge_code_attrs  s   z#TestSpecifics.test_merge_code_attrsc                 C   s(   dd }|  dtt|d j dS )z9Regression test for issue35193 when run under clang msan.c                   S   r   )Nr   Zunreachable)RuntimeErrorr   r   r   r   unused_code_at_end     zcTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds.<locals>.unused_code_at_endRETURN_VALUEr}   N)r!   r?   disget_instructionsopname)r
   r  r   r   r   9test_peephole_opt_unreachable_code_array_access_in_bounds  s
   zGTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_boundsc                    s
   fdd}|dd |dd |dd |dd	 |d
d dd dd }}  |j|j  |d  |d  t| td  t| td dd dd }}  |j|j  |tdh  |tdh  |d  |d d S )Nc                    s   i }t d| |f | |d }|d } |j|j  |j|j  ||   ||  t| t|   t| t| d S r   )r   assertIsNotrw   r   r   r!   r   )Zconst1Zconst2r   r   r   r   r   r   check_different_constants  s   zJTestSpecifics.test_dont_merge_constants.<locals>.check_different_constantsr   r   g       )r   )r   r3      ar  )r  c                   S   r   )Nri   r   r   r   r   r   r     r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>c                   S   r   )N              r   r   r   r   r   r     r   ri   r  c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   )N>   r   r   r   r   r   r   r     r   )r  rw   r   r!   r   r  r   )r
   r  r   r   r   r   r   test_dont_merge_constants  s$   




z'TestSpecifics.test_dont_merge_constantsc                 C   s   t dtdd d S )NZ42Ztest_compile_pathliker   )r   r   r   r   r   r   test_path_like_objects  s   z$TestSpecifics.test_path_like_objectsc                 C   s   t dd dd d S )Nzif a: b
i@ r   r   r   r   r   r   r   test_stack_overflow  s   z!TestSpecifics.test_stack_overflowc                 C   s   dd }dd }dd }dd }||||g}|D ],}t t|}| t|d	 | d
|d j | d |d j | d|d j qd S )Nc                   S      d S Nr   rj   r   r   r   r   r   unused_block_if  r  zPTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_ifc                   S   r  r  r   r   r   r   r   unused_block_while  r  zSTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_whilec                   S      	 d S Nra   rj   r   r   r   r   r   unused_block_if_else     zUTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_if_elsec                   S   r  r  r   r   r   r   r   unused_block_while_else  r!  zXTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_while_elser   
LOAD_CONSTrk   r  r}   )r?   r  r  assertLessEquallenr!   r  argval)r
   r  r  r   r"  funcsr   opcodesr   r   r   )test_dead_blocks_do_not_generate_bytecode  s   z7TestSpecifics.test_dead_blocks_do_not_generate_bytecodec                 C   sz   dd }dd }||g}|D ],}t t|}| dt| | d|d j | d |d j | d|d	 j qd S )
Nc                   S   r  NFr   r   r   r   r   break_in_while  r  z;TestSpecifics.test_false_while_loop.<locals>.break_in_whilec                   S   r  r*  r   r   r   r   r   continue_in_while  r  z>TestSpecifics.test_false_while_loop.<locals>.continue_in_whilerp   r#  r   r  ra   )r?   r  r  r!   r%  r  r&  )r
   r+  r,  r'  r   r(  r   r   r   test_false_while_loop  s   z#TestSpecifics.test_false_while_loopc              	   C   s   dd }dd }dd }dd }||||g}|D ]9}| j |d	) tt|}| d
t| | d|d j | d|d j W d    q1 sLw   Y  qd S )Nc                 S   r   NTr   r   r   r   r   and_true  r  z;TestSpecifics.test_consts_in_conditionals.<locals>.and_truec                 S   r   r*  r   r   r   r   r   	and_false  r  z<TestSpecifics.test_consts_in_conditionals.<locals>.and_falsec                 S   r   r.  r   r   r   r   r   or_true
  r  z:TestSpecifics.test_consts_in_conditionals.<locals>.or_truec                 S   r   r*  r   r   r   r   r   or_false  r  z;TestSpecifics.test_consts_in_conditionals.<locals>.or_falser   rp   ZLOAD_r   r  ra   )subTestr?   r  r  r!   r%  r   r  )r
   r/  r0  r1  r2  r'  r   r(  r   r   r   test_consts_in_conditionals  s   z)TestSpecifics.test_consts_in_conditionalsc                 C   s   dd }|j jd }d S )Nc                   S   s
   t   d S r   )printr   r   r   r   call  s   
z6TestSpecifics.test_lineno_procedure_call.<locals>.callra   rw   rd   )r
   r7  Zline1r   r   r   test_lineno_procedure_call  s   z(TestSpecifics.test_lineno_procedure_callc           
   	      s   d  fdd} fdd} fdd} fdd	}||||g}g d
}d fdd}t ||ddD ])\}}	| j|d || | jjj |	 W d    q31 sWw   Y  q3d S )NTc                    s   |    r	 d S d S r   r   r   TRUEr   r   if1%     z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if1c                    s   |    rd S 	 d S r   r   r   r:  r   r   if2)  s   z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if2c                    s   |    rd S d S r   r   r   r:  r   r   if3/  s   z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if3c                    s   |    s	 d S d S r   r   r   r:  r   r   if45  r=  z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if4)r   r   r   rp   c                      s   t d d S r   )rq   	_getframer   )framer   r   save_caller_frame<  s   zJTestSpecifics.test_lineno_after_implicit_return.<locals>.save_caller_framestrictr3  )zipr4  r!   f_linenof_coderd   )
r
   r<  r>  r?  r@  r'  Z	lastlinesrC  r   Zlastliner   )r;  rB  r   !test_lineno_after_implicit_return"  s   z/TestSpecifics.test_lineno_after_implicit_returnc           	   	   C   s   dd }dd }||fD ]F}| j |d6 |j}t| }| t|d |d \}}}| |d | |t|j | ||j W d    q1 sMw   Y  qd S )Nc                   S   r   )z
doc stringNr   r   r   r   r   no_code1E  r   z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code1c                   S   r  r   r   r   r   r   r   no_code2H  r   z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code2r3  ra   r   )r4  rw   r?   re   r!   r%  r	  rd   )	r
   rJ  rK  r   rW   linesstartendliner   r   r   test_lineno_after_no_codeD  s   z'TestSpecifics.test_lineno_after_no_codec              	      s   dd }g d}dd }g d}dd }g d	}d
d }g d}||||g}	||||g}
t |	|
ddD ],\ }| j d  fdd j D }| || W d    q31 sZw   Y  q3d S )Nc                   S   s   t jS r   )or3   r   r   r   r   	load_attrV  s   z6TestSpecifics.test_lineno_attribute.<locals>.load_attr)rp   r   ra   c                   S   s
   t dS )Nr   )rQ  rP   r   r   r   r   load_method]  s
   z8TestSpecifics.test_lineno_attribute.<locals>.load_method)rp   r   r   r   ra   c                   S   s
   t t_d S r   )vrQ  r3   r   r   r   r   
store_attrf  s   z7TestSpecifics.test_lineno_attribute.<locals>.store_attr)rV   rp   r   c                   S   s   t  jt7  _d S r   )rQ  r3   rT  r   r   r   r   aug_store_attro  s
   z;TestSpecifics.test_lineno_attribute.<locals>.aug_store_attr)rp   r   rV   ra   r   TrD  r3  c                    s   g | ]\}}}| j j qS r   r8  r   _rO  r3  r   r   
<listcomp>~  s    z7TestSpecifics.test_lineno_attribute.<locals>.<listcomp>)rF  r4  rw   re   r!   )r
   rR  Zload_attr_linesrS  Zload_method_linesrU  Zstore_attr_linesrV  Zaug_store_attr_linesr'  Z
func_linesrL  
code_linesr   r3  r   test_lineno_attributeU  s(   
z#TestSpecifics.test_lineno_attributec                    sB   dd  g d} j jd } fdd| D }| || d S )Nc                   S   s   dd t D S )Nc                 s   s    | ]}d V  qdS )ra   Nr   r   r   r   r   r   r     s    zOTestSpecifics.test_line_number_genexp.<locals>.return_genexp.<locals>.<genexpr>)r  r   r   r   r   return_genexp  s   z<TestSpecifics.test_line_number_genexp.<locals>.return_genexp)Nra   r   ra   ra   c                    *   g | ]\}}}|d u rd n| j j qS r   r8  rW  r]  r   r   rY        z9TestSpecifics.test_line_number_genexp.<locals>.<listcomp>)rw   rx   re   r!   )r
   Zgenexp_linesZgenexp_coderZ  r   r_  r   test_line_number_genexp  s   
z%TestSpecifics.test_line_number_genexpc                    s8   dd  g d} fdd j  D }| || d S )Nc                    s   | 2 z3 d H W }t  q6 d S r   )r   )Zaseqr   r   r   r   test  s   zLTestSpecifics.test_line_number_implicit_return_after_async_for.<locals>.test)Nra   rp   ra   c                    r^  r   r8  rW  rb  r   r   rY    r`  zRTestSpecifics.test_line_number_implicit_return_after_async_for.<locals>.<listcomp>)rw   re   r!   )r
   Zexpected_linesrZ  r   rc  r   0test_line_number_implicit_return_after_async_for  s   
z>TestSpecifics.test_line_number_implicit_return_after_async_forc                 C   s<   d}dd dd t|D  d }| tt|| d S )Ni   {,c                 s   s    | ]
}| d | V  qdS ):Nr   r\  r   r   r   r     s    z6TestSpecifics.test_big_dict_literal.<locals>.<genexpr>})rc   r   r!   r%  r%   )r
   Z	dict_sizeZthe_dictr   r   r   test_big_dict_literal  s    z#TestSpecifics.test_big_dict_literalc                 C   sf   dd }d}d}t t|D ]!\}}|jdkr | |jd q|j|v r0| |j|d |  qd S )Nc                  S   s"   d} 	 | dkr| d8 } nd S d} q)Nra   Tr   r}   r   )valr   r   r   if_else_break  s   
zITestSpecifics.test_redundant_jump_in_if_else_break.<locals>.if_else_breakrp   )ZPOP_JUMP_IF_FALSEZPOP_JUMP_IF_TRUEZJUMP_ABSOLUTEJUMP_FORWARDrl  r   ra   )	enumerater  ZBytecoder  r   rl   )r
   rk  Z
INSTR_SIZEZHANDLED_JUMPSrO  Zinstrr   r   r   $test_redundant_jump_in_if_else_break  s   	

z2TestSpecifics.test_redundant_jump_in_if_else_breakN)?rA   rB   rC   r   r   r   r   r   r#   r&   r*   r-   r0   rS   rX   rY   rZ   r]   rg   rm   ru   rq   rr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   Zcpython_onlyr   r   r   r   r   r   r   r   r  r
  r  r  r  r  r)  r-  r5  r9  rI  rP  r[  ra  rd  ri  rn  r   r   r   r   r      s    		/!
/	H#







,

(
"-
r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestExpressionStackSized   c                 C   s>   t |trt|dd}ttt|j}| |j	| d S )Nz<foo>r   )
r   r   r   mathceillogr%  r	  r$  co_stacksize)r
   rW   max_sizer   r   r   check_stack_size  s   
z(TestExpressionStackSize.check_stack_sizec                 C      |  d| j d  d S )Nzx and r   rv  Nr   r   r   r   test_and     z TestExpressionStackSize.test_andc                 C   rw  )Nzx or r   rx  r   r   r   r   test_or  r{  zTestExpressionStackSize.test_orc                 C   rw  )Nzx and x or r   rx  r   r   r   r   test_and_or  r{  z#TestExpressionStackSize.test_and_orc                 C   rw  )Nzx < r   rx  r   r   r   r   test_chained_comparison  r{  z/TestExpressionStackSize.test_chained_comparisonc                 C   rw  )Nzx if x else r   rx  r   r   r   r   test_if_else  r{  z$TestExpressionStackSize.test_if_elsec                 C   rw  )Nzx + r   rx  r   r   r   r   
test_binop  r{  z"TestExpressionStackSize.test_binopc                 C      |  dd| j  d  d S )N[x, zx]rx  r   r   r   r   	test_list     z!TestExpressionStackSize.test_listc                 C   r  )N(r  zx)rx  r   r   r   r   
test_tuple  r  z"TestExpressionStackSize.test_tuplec                 C   r  )Nre  r  zx}rx  r   r   r   r   test_set  r  z TestExpressionStackSize.test_setc                 C   r  )Nre  zx:x, zx:x}rx  r   r   r   r   	test_dict  r  z!TestExpressionStackSize.test_dictc                 C   r  )Nf(r  )rx  r   r   r   r   test_func_args  r  z&TestExpressionStackSize.test_func_argsc                 C   0   dd t | jD }| dd| d  d S )Nc                 s       | ]	}d | dV  qdS r3   z=xNr   r   r   r   r   r     r   z;TestExpressionStackSize.test_func_kwargs.<locals>.<genexpr>r  r   r  r   ry  rv  rc   r
   kwargsr   r   r   test_func_kwargs     z(TestExpressionStackSize.test_func_kwargsc                 C   r  )No.m(r  r  rx  r   r   r   r   r    r  c                 C   r  )Nc                 s   r  r  r   r   r   r   r   r     r   z;TestExpressionStackSize.test_meth_kwargs.<locals>.<genexpr>r  r   r  r  r  r   r   r   test_meth_kwargs  r  z(TestExpressionStackSize.test_meth_kwargsc                 C   s    d}|d| j  7 }| | d S )Nz
def f(x):
z   x and x
)ry  rv  r   r   r   r   test_func_and  s   z%TestExpressionStackSize.test_func_andN)rA   rB   rC   ry  rv  rz  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r   r   r   r   ro    s$    ro  c                   @   s   e Zd Zd5ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )6TestStackSizeStabilityFc                    s    fddfddt ddD }tt|dkr>dd l}dd l}| }|jd|d	 | d
|| f  d S d S )Nc                    s>   i }d|   } rd| }t |dd}t||| |d jS )Nzdef func():
zasync z<script>r   r   )r   r   rw   )r   r   ZscriptrW   )async_snippetr   r   compile_snippet  s   
z@TestStackSizeStability.check_stack_size.<locals>.compile_snippetc                    s   g | ]} |j qS r   )rt  r   )r  r   r   rY    s    z;TestStackSizeStability.check_stack_size.<locals>.<listcomp>rp   rV   ra   r   )filez<stack sizes diverge with # of consecutive snippets: %s
%s
%s)r   r%  setr  ioStringIOrN   getvalue)r
   r  r  Zsizesr  r  outr   )r  r  r  r   rv    s   	
z'TestStackSizeStability.check_stack_sizec                 C      d}|  | d S )Nz1
            if x:
                a
            rv  r
   r  r   r   r   test_if     zTestStackSizeStability.test_ifc                 C   r  )Nz{
            if x:
                a
            elif y:
                b
            else:
                c
            r  r  r   r   r   r    s   z#TestStackSizeStability.test_if_elsec                 C   r  )NzV
            try:
                a
            except:
                b
            r  r  r   r   r   test_try_except_bare*     z+TestStackSizeStability.test_try_except_barec                 C   r  )Nz
            try:
                a
            except ImportError:
                b
            except:
                c
            else:
                d
            r  r  r   r   r   test_try_except_qualified3     
z0TestStackSizeStability.test_try_except_qualifiedc                 C   r  )Nz
            try:
                a
            except ImportError as e:
                b
            except:
                c
            else:
                d
            r  r  r   r   r   test_try_except_as@  r  z)TestStackSizeStability.test_try_except_asc                 C   r  )Nzg
                try:
                    a
                finally:
                    b
            r  r  r   r   r   test_try_finallyM  r  z'TestStackSizeStability.test_try_finallyc                 C   r  )Nz8
            with x as y:
                a
            r  r  r   r   r   	test_withV  r  z TestStackSizeStability.test_withc                 C   r  )NzX
            while x:
                a
            else:
                b
            r  r  r   r   r   test_while_else]  r  z&TestStackSizeStability.test_while_elsec                 C   r  )Nz7
            for x in y:
                a
            r  r  r   r   r   test_forf  r  zTestStackSizeStability.test_forc                 C   r  )Nz[
            for x in y:
                a
            else:
                b
            r  r  r   r   r   test_for_elsem  r  z$TestStackSizeStability.test_for_elsec                 C   r  )Nz
            for x in y:
                if z:
                    break
                elif u:
                    continue
                else:
                    a
            else:
                b
            r  r  r   r   r   test_for_break_continuev  s   z.TestStackSizeStability.test_for_break_continuec                 C   r  )Na6  
            for x in y:
                try:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
                finally:
                    f
            else:
                b
            r  r  r   r   r   0test_for_break_continue_inside_try_finally_block     zGTestStackSizeStability.test_for_break_continue_inside_try_finally_blockc                 C   r  )Na6  
            for x in y:
                try:
                    t
                finally:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   ,test_for_break_continue_inside_finally_block  r  zCTestStackSizeStability.test_for_break_continue_inside_finally_blockc                 C   r  )Na5  
            for x in y:
                try:
                    t
                except:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   +test_for_break_continue_inside_except_block  r  zBTestStackSizeStability.test_for_break_continue_inside_except_blockc                 C   r  )Na
  
            for x in y:
                with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   )test_for_break_continue_inside_with_block  s   z@TestStackSizeStability.test_for_break_continue_inside_with_blockc                 C   r  )Nz
            try:
                if z:
                    return
                else:
                    a
            finally:
                f
            r  r  r   r   r   $test_return_inside_try_finally_block     	z;TestStackSizeStability.test_return_inside_try_finally_blockc                 C   r  )Nz
            try:
                t
            finally:
                if z:
                    return
                else:
                    a
            r  r  r   r   r    test_return_inside_finally_block  r  z7TestStackSizeStability.test_return_inside_finally_blockc                 C   r  )Nz
            try:
                t
            except:
                if z:
                    return
                else:
                    a
            r  r  r   r   r   test_return_inside_except_block  r  z6TestStackSizeStability.test_return_inside_except_blockc                 C   r  )Nz~
            with c:
                if z:
                    return
                else:
                    a
            r  r  r   r   r   test_return_inside_with_block  s   z4TestStackSizeStability.test_return_inside_with_blockc                 C      d}| j |dd d S )Nz>
            async with x as y:
                a
            Tr  r  r  r   r   r   test_async_with     z&TestStackSizeStability.test_async_withc                 C   r  )Nz=
            async for x in y:
                a
            Tr  r  r  r   r   r   test_async_for  r  z%TestStackSizeStability.test_async_forc                 C   r  )Nza
            async for x in y:
                a
            else:
                b
            Tr  r  r  r   r   r   test_async_for_else  s   z*TestStackSizeStability.test_async_for_elsec                 C   r  )Na  
            for x in y:
                async with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            Tr  r  r  r   r   r   /test_for_break_continue_inside_async_with_block  s   zFTestStackSizeStability.test_for_break_continue_inside_async_with_blockc                 C   r  )Nz
            async with c:
                if z:
                    return
                else:
                    a
            Tr  r  r  r   r   r   #test_return_inside_async_with_block  s   z:TestStackSizeStability.test_return_inside_async_with_blockN)F)rA   rB   rC   rv  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    s4    
				
	r  __main__)r  rq  r   Zunittestrq   r   r   r   rb  r   Ztest.supportr   Ztest.support.os_helperr   ZTestCaser   ro  r  rA   mainr   r   r   r   <module>   s4           ;@  %