
    ;eW\                     `   d Z ddlmZ ddlmZm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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 dd
lmZ  G d dej                  Z G d dej                  Z G d dej                  Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d d e          Z$ G d! d"e          Z% G d# d$e          Z& G d% d&e          Z' G d' d(e          Z( G d) d*e          Z) G d+ d,ej                  Z* G d- d.e          Z+ G d/ d0e          Z, G d1 d2e          Z- G d3 d4ej                  Z.d5 Z/e0d6k    r ej1                     dS dS )7aF  Test suite for 2to3's parser and grammar files.

This is the place to add tests for changes to 2to3's grammar, such as those
merging the grammars for Python 2 and 3. In addition to specific tests for
parts of the grammar we've changed, we also make sure we can parse the
test_grammar.py files from both Python 2 and Python 3.
   )support)driverdriver_no_print_statement    N)r   )tokenize   )
ParseError)python_symbolsc                       e Zd Zd ZdS )
TestDriverc                    d}t          j        |          }|                     |j        d         j        d         j        t
          j                   |                     |j        d         j        d         j        t
          j                   d S )Nzprint 1
print 2
r   r   )r   parse_stringassertEqualchildrentypesyms
print_stmt)selfsts      0/usr/lib/python3.11/lib2to3/tests/test_parser.pytest_formfeedzTestDriver.test_formfeed#   so    (""A/27IIIA/27IIIII    N)__name__
__module____qualname__r    r   r   r   r   !   s(        J J J J Jr   r   c                       e Zd Zd Zd Z ej        ej        du d           ej        ej	        dv d          d                         Z
d ZdS )	TestPgen2Cachingc                 H    t          j        t          j        dd           d S )NFTsaveforce)pgen2_driverload_grammarr   grammar_pathr   s    r   test_load_grammar_from_txt_filez0TestPgen2Caching.test_load_grammar_from_txt_file+   s#    !'"6U$OOOOOOr   c                 d   t          j                    }	 t          j                            |t          j                            t          j                            }t          j	        t          j        |           t          j        |          }t          j        |dd           |                     t          j                            |                     t          j        |           t          j        |dd           t          j        |           d S # t          j        |           w xY w)NTr!   F)tempfilemkdtempospathjoinbasenamer   r&   shutilcopyr$   _generate_pickle_namer%   
assertTrueexistsunlinkrmtree)r   tmpdirgrammar_copypickle_names       r   test_load_grammar_from_picklez.TestPgen2Caching.test_load_grammar_from_pickle.   s     !##	"7<<BG,,W-ABBD DLK,l;;;&<\JJK%lTJJJJOOBGNN;77888Il###%leLLLLM&!!!!!FM&!!!!s   C.D D/Nzsys.executable required>   wasi
emscriptenzrequires working subprocessc                 \   t          j                    }t          j                            |d          }	 t          j        |           t          j                            t          j                  }t          j                            ||          }t          j                            ||          }t          j
        t          j        |           t          j
        t          j        |           t          j        |          }t          j        |          }|                     ||           t          j        |dd           |                     t          j                            |                     t#          t          j                  }d|d<   d|d}	t&          j        dd	|	g}
t+          j        |
|
           |                     t          j                            |                     t/          |d          5 }t/          |d          5 }|                     |                                |                                d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |           d S # t          j        |           w xY w)NsubdirTr!   randomPYTHONHASHSEEDzL
from lib2to3.pgen2 import driver as pgen2_driver
pgen2_driver.load_grammar(z%, save=True, force=True)
            z#-Wignore:lib2to3:DeprecationWarningz-c)envrbzGGrammar caches generated using different hash seeds were not identical.)msg)r*   r+   r,   r-   r.   mkdirr/   r   r&   r0   r1   r$   r2   assertNotEqualr%   r3   r4   dictenvironsys
executable
subprocess
check_callopenr   readr6   )r   r7   	tmpsubdirgrammar_baser8   grammar_sub_copyr9   pickle_sub_namesub_envcodecmd
pickle_f_1
pickle_f_2s                r   !test_load_grammar_from_subprocessz2TestPgen2Caching.test_load_grammar_from_subprocess@   s   
 !##GLL22	%	"HY7++G,@AAL7<<==L!w||I|DDK,l;;;K,.>???&<\JJK*@%' 'O_=== %lTJJJJOOBGNN;77888 2:&&G(0G$%% $##&D >8C !3G4444OOBGNN?;;<<<k4(( ,J$//,3=  OO%%z'8'8+ ! , , ,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , M&!!!!!FM&!!!!sT   GJ I4=II4I!	!I4$I!	%I4(J 4I88J ;I8<J J+c                 <   t           dz    G d d           G fdd          } |            t          j        <   |                     t          j        t          j                   t          j        d          }|                     |j	        d           d S )Nz
.load_testc                       e Zd Zd ZdS )=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoaderc                 .    t          j        ddi          S )Nelephant   )pickledumps)r   wheres     r   get_datazFTestPgen2Caching.test_load_packaged_grammar.<locals>.MyLoader.get_dataq   s    |Z$4555r   N)r   r   r   ra   r   r   r   MyLoaderrZ   p   s#        6 6 6 6 6r   rb   c                   Z    e Zd ZdZej                                                    ZdS )=TestPgen2Caching.test_load_packaged_grammar.<locals>.MyModuleparsertestmoduleN)r   r   r   __file__	importlibutilspec_from_loader__spec__)rb   modnames   r   MyModulerd   s   s1        )H ~66w

KKHHHr   rl   zGrammar.txtr]   )
r   rH   modules
addCleanupoperatordelitemr$   load_packaged_grammarr   r\   )r   rl   grb   rk   s      @@r   test_load_packaged_grammarz+TestPgen2Caching.test_load_packaged_grammarn   s    \)	6 	6 	6 	6 	6 	6 	6 	6	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L  (xzzG(#+w???.wFFR(((((r   )r   r   r   r(   r:   unittestskipIfrH   rI   platformrW   rs   r   r   r   r   r   *   s        P P P" " "$ X_S^t+-FGGX_..0M (" ("  HG("T) ) ) ) )r   r   c                       e Zd Zd Zd ZdS )GrammarTestc                 .    t          j        |           d S )N)r   r   r   rS   s     r   validatezGrammarTest.validate}   s    T"""""r   c                 n    	 |                      |           t          d          # t          $ r Y d S w xY w)Nz Syntax shouldn't have been valid)r{   AssertionErrorr	   rz   s     r   invalid_syntaxzGrammarTest.invalid_syntax   sO    	EMM$ !!CDDD  	 	 	DD	s   & 
44N)r   r   r   r{   r~   r   r   r   rx   rx   |   s7        # # #E E E E Er   rx   c                       e Zd Zd ZdS )TestMatrixMultiplicationc                 Z    |                      d           |                      d           d S )Nza @ bza @= br{   r'   s    r   #test_matrix_multiplication_operatorz<TestMatrixMultiplication.test_matrix_multiplication_operator   s,    ghr   N)r   r   r   r   r   r   r   r   r      s#                 r   r   c                       e Zd Zd ZdS )TestYieldFromc                     |                      d           |                      d           |                     d           d S )Nzyield from xz(yield from x) + yz
yield fromr{   r~   r'   s    r   test_yield_fromzTestYieldFrom.test_yield_from   sA    n%%%*+++L)))))r   N)r   r   r   r   r   r   r   r   r      s#        * * * * *r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestAsyncAwaitc                    |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                     d	           |                     d
           |                     d           d S )NzLasync def foo():
                             await x
                      zYasync def foo():
                             [i async for i in b]
                      zasync def foo():
                             {i for i in b
                                async for i in a if await i
                                  for b in i}
                      zdasync def foo():
                             [await i for i in b if await c]
                      zYasync def foo():
                             [ i for i in b if c]
                      zhasync def foo():

            def foo(): pass

            def foo(): pass

            await x
        zasync def foo(): return await azTdef foo():
            def foo(): pass
            async def foo(): await x
        zawait xz5def foo():
                                   await xzedef foo():
            def foo(): pass
            async def foo(): pass
            await x
        r   r'   s    r   test_await_exprzTestAsyncAwait.test_await_expr   s:     	 	 	 	  	 	 	 	  	 	 	 	  	 	 	 	  	 	 	 	  	 	 	 	;<<<  	 	 	
 	I&&& . 	/ 	/ 	/ 	  	 	 	 	 	r   c                     |                      d           |                      d           |                      d           d S )Nz	async = 1z	await = 1zdef async(): passr   r'   s    r   test_async_varzTestAsyncAwait.test_async_var   s?    o&&&o&&&-.....r   c                 0    |                      d           d S )NzDasync def foo():
                             async for a in b: passr   r'   s    r   test_async_forzTestAsyncAwait.test_async_for   s'     7 	8 	8 	8 	8 	8r   c                 Z    |                      d           |                     d           d S )Nz@async def foo():
                             async with a: passz@def foo():
                                   async with a: passr   r'   s    r   test_async_withzTestAsyncAwait.test_async_with   sF     3 	4 	4 	4 	 9 	: 	: 	: 	: 	:r   c                 Z    |                      d           |                      d           d S )NzLasync def foo():
                   return (i * 2 async for i in arange(42))zFdef foo():
                   return (i * 2 async for i in arange(42))r   r'   s    r   test_async_generatorz#TestAsyncAwait.test_async_generator   sD    ?	
 	
 	
 	?	
 	
 	
 	
 	
r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s`        / / /b/ / /
8 8 8: : :
 
 
 
 
r   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestRaiseChangesc                 0    |                      d           d S )Nraiser   r'   s    r   test_2x_style_1z TestRaiseChanges.test_2x_style_1   s    gr   c                 0    |                      d           d S )Nz
raise E, Vr   r'   s    r   test_2x_style_2z TestRaiseChanges.test_2x_style_2       l#####r   c                 0    |                      d           d S )Nzraise E, V, Tr   r'   s    r   test_2x_style_3z TestRaiseChanges.test_2x_style_3       o&&&&&r   c                 0    |                      d           d S )Nzraise E, V, T, Zr~   r'   s    r   test_2x_style_invalid_1z(TestRaiseChanges.test_2x_style_invalid_1   s    ./////r   c                 0    |                      d           d S )Nzraise E1 from E2r   r'   s    r   test_3x_stylezTestRaiseChanges.test_3x_style       ()))))r   c                 0    |                      d           d S )Nzraise E, V from E1r   r'   s    r   test_3x_style_invalid_1z(TestRaiseChanges.test_3x_style_invalid_1   s    011111r   c                 0    |                      d           d S )Nzraise E from E1, E2r   r'   s    r   test_3x_style_invalid_2z(TestRaiseChanges.test_3x_style_invalid_2   s    122222r   c                 0    |                      d           d S )Nzraise from E1, E2r   r'   s    r   test_3x_style_invalid_3z(TestRaiseChanges.test_3x_style_invalid_3   s    /00000r   c                 0    |                      d           d S )Nzraise E fromr   r'   s    r   test_3x_style_invalid_4z(TestRaiseChanges.test_3x_style_invalid_4   s    N+++++r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s          $ $ $' ' '0 0 0* * *2 2 23 3 31 1 1, , , , ,r   r   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d Zd Z d Z!d  Z"d!S )"TestUnpackingGeneralizationsc                 0    |                      d           d S )Nzfunc(1, *(2, 3), 4)r   r'   s    r   test_mid_positional_starz5TestUnpackingGeneralizations.test_mid_positional_star      /00000r   c                 0    |                      d           d S )Nz,func(**{'eggs':'scrambled', 'spam':'fried'})r   r'   s    r   test_double_star_dict_literalz:TestUnpackingGeneralizations.test_double_star_dict_literal  s    HIIIIIr   c                 0    |                      d           d S )Nz*func(spam='fried', **{'eggs':'scrambled'})r   r'   s    r   ,test_double_star_dict_literal_after_keywordszITestUnpackingGeneralizations.test_double_star_dict_literal_after_keywords
  s    FGGGGGr   c                 Z    |                      d           |                      d           d S )Nzfunc(**{'a':2} or {})zfunc(**() or {})r   r'   s    r   test_double_star_expressionz8TestUnpackingGeneralizations.test_double_star_expression  s.    1222,-----r   c                 0    |                      d           d S )Nzfunc(*[] or [2])r   r'   s    r   test_star_expressionz1TestUnpackingGeneralizations.test_star_expression  s    ,-----r   c                 0    |                      d           d S )Nz[*{2}, 3, *[4]]r   r'   s    r   test_list_displayz.TestUnpackingGeneralizations.test_list_display      +,,,,,r   c                 0    |                      d           d S )Nz{*{2}, 3, *[4]}r   r'   s    r   test_set_displayz-TestUnpackingGeneralizations.test_set_display  r   r   c                 0    |                      d           d S )Nz{**{}}r   r'   s    r   test_dict_display_1z0TestUnpackingGeneralizations.test_dict_display_1  r   r   c                 0    |                      d           d S )Nz{**{}, 3:4, **{5:6, 7:8}}r   r'   s    r   test_dict_display_2z0TestUnpackingGeneralizations.test_dict_display_2  s    566666r   c                 0    |                      d           d S )Nzfunc(* [] or [1])r   r'   s    r   test_complex_star_expressionz9TestUnpackingGeneralizations.test_complex_star_expression   s    )*****r   c                 0    |                      d           d S )Nz5func(**{1: 3} if False else {x: x for x in range(3)})r   r'   s    r   #test_complex_double_star_expressionz@TestUnpackingGeneralizations.test_complex_double_star_expression#  s    MNNNNNr   c                 0    |                      d           d S )Nzf(a, *b, *c, d)r   r'   s    r   test_argument_unpacking_1z6TestUnpackingGeneralizations.test_argument_unpacking_1&  r   r   c                 0    |                      d           d S )Nzf(**a, **b)r   r'   s    r   test_argument_unpacking_2z6TestUnpackingGeneralizations.test_argument_unpacking_2)      '(((((r   c                 0    |                      d           d S )Nzf(2, *a, *b, **b, **c, **d)r   r'   s    r   test_argument_unpacking_3z6TestUnpackingGeneralizations.test_argument_unpacking_3,      788888r   c                 Z    |                      d           |                      d           d S )Nzdef f(a, b): call(a, b)zdef f(a, b,): call(a, b,)r   r'   s    r   test_trailing_commas_1z3TestUnpackingGeneralizations.test_trailing_commas_1/  .    /000122222r   c                 Z    |                      d           |                      d           d S )Nzdef f(a, *b): call(a, *b)zdef f(a, *b,): call(a, *b,)r   r'   s    r   test_trailing_commas_2z3TestUnpackingGeneralizations.test_trailing_commas_23  s.    1222344444r   c                 Z    |                      d           |                      d           d S )Nzdef f(a, b=1): call(a, b=1)zdef f(a, b=1,): call(a, b=1,)r   r'   s    r   test_trailing_commas_3z3TestUnpackingGeneralizations.test_trailing_commas_37  .    3444566666r   c                 Z    |                      d           |                      d           d S )Nzdef f(a, **b): call(a, **b)zdef f(a, **b,): call(a, **b,)r   r'   s    r   test_trailing_commas_4z3TestUnpackingGeneralizations.test_trailing_commas_4;  r   r   c                 Z    |                      d           |                      d           d S )Nzdef f(*a, b=1): call(*a, b=1)zdef f(*a, b=1,): call(*a, b=1,)r   r'   s    r   test_trailing_commas_5z3TestUnpackingGeneralizations.test_trailing_commas_5?  .    5666788888r   c                 Z    |                      d           |                      d           d S )Nzdef f(*a, **b): call(*a, **b)zdef f(*a, **b,): call(*a, **b,)r   r'   s    r   test_trailing_commas_6z3TestUnpackingGeneralizations.test_trailing_commas_6C  r   r   c                 Z    |                      d           |                      d           d S )Nzdef f(*, b=1): call(*b)zdef f(*, b=1,): call(*b,)r   r'   s    r   test_trailing_commas_7z3TestUnpackingGeneralizations.test_trailing_commas_7G  r   r   c                 Z    |                      d           |                      d           d S )Nzdef f(a=1, b=2): call(a=1, b=2)z!def f(a=1, b=2,): call(a=1, b=2,)r   r'   s    r   test_trailing_commas_8z3TestUnpackingGeneralizations.test_trailing_commas_8K  .    78889:::::r   c                 Z    |                      d           |                      d           d S )Nzdef f(a=1, **b): call(a=1, **b)z!def f(a=1, **b,): call(a=1, **b,)r   r'   s    r   test_trailing_commas_9z3TestUnpackingGeneralizations.test_trailing_commas_9O  r   r   c                 Z    |                      d           |                      d           d S )Nzf = lambda a, b: call(a, b)zf = lambda a, b,: call(a, b,)r   r'   s    r   test_trailing_commas_lambda_1z:TestUnpackingGeneralizations.test_trailing_commas_lambda_1S  r   r   c                 Z    |                      d           |                      d           d S )Nzf = lambda a, *b: call(a, *b)zf = lambda a, *b,: call(a, *b,)r   r'   s    r   test_trailing_commas_lambda_2z:TestUnpackingGeneralizations.test_trailing_commas_lambda_2W  r   r   c                 Z    |                      d           |                      d           d S )Nzf = lambda a, b=1: call(a, b=1)z!f = lambda a, b=1,: call(a, b=1,)r   r'   s    r   test_trailing_commas_lambda_3z:TestUnpackingGeneralizations.test_trailing_commas_lambda_3[  r   r   c                 Z    |                      d           |                      d           d S )Nzf = lambda a, **b: call(a, **b)z!f = lambda a, **b,: call(a, **b,)r   r'   s    r   test_trailing_commas_lambda_4z:TestUnpackingGeneralizations.test_trailing_commas_lambda_4_  r   r   c                 Z    |                      d           |                      d           d S )Nz!f = lambda *a, b=1: call(*a, b=1)z#f = lambda *a, b=1,: call(*a, b=1,)r   r'   s    r   test_trailing_commas_lambda_5z:TestUnpackingGeneralizations.test_trailing_commas_lambda_5c  .    9:::;<<<<<r   c                 Z    |                      d           |                      d           d S )Nz!f = lambda *a, **b: call(*a, **b)z#f = lambda *a, **b,: call(*a, **b,)r   r'   s    r   test_trailing_commas_lambda_6z:TestUnpackingGeneralizations.test_trailing_commas_lambda_6g  r   r   c                 Z    |                      d           |                      d           d S )Nzf = lambda *, b=1: call(*b)zf = lambda *, b=1,: call(*b,)r   r'   s    r   test_trailing_commas_lambda_7z:TestUnpackingGeneralizations.test_trailing_commas_lambda_7k  r   r   c                 Z    |                      d           |                      d           d S )Nz#f = lambda a=1, b=2: call(a=1, b=2)z%f = lambda a=1, b=2,: call(a=1, b=2,)r   r'   s    r   test_trailing_commas_lambda_8z:TestUnpackingGeneralizations.test_trailing_commas_lambda_8o  .    ;<<<=>>>>>r   c                 Z    |                      d           |                      d           d S )Nz#f = lambda a=1, **b: call(a=1, **b)z%f = lambda a=1, **b,: call(a=1, **b,)r   r'   s    r   test_trailing_commas_lambda_9z:TestUnpackingGeneralizations.test_trailing_commas_lambda_9s  r   r   N)#r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s       1 1 1J J JH H H. . .. . .- - -- - -$ $ $7 7 7+ + +O O O- - -) ) )9 9 93 3 35 5 57 7 77 7 79 9 99 9 93 3 3; ; ;; ; ;7 7 79 9 9; ; ;; ; ;= = == = =7 7 7? ? ?? ? ? ? ?r   r   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S )TestFunctionAnnotationsc                 0    |                      d           d S )Nzdef f(x) -> list: passr   r'   s    r   test_1zTestFunctionAnnotations.test_1z      233333r   c                 0    |                      d           d S )Nzdef f(x:int): passr   r'   s    r   test_2zTestFunctionAnnotations.test_2}  s    ./////r   c                 0    |                      d           d S )Nzdef f(*x:str): passr   r'   s    r   test_3zTestFunctionAnnotations.test_3  r   r   c                 0    |                      d           d S )Nzdef f(**x:float): passr   r'   s    r   test_4zTestFunctionAnnotations.test_4  r   r   c                 0    |                      d           d S )Nzdef f(x, y:1+2): passr   r'   s    r   test_5zTestFunctionAnnotations.test_5  s    122222r   c                 0    |                      d           d S )Nzdef f(a, (b:1, c:2, d)): passr   r'   s    r   test_6zTestFunctionAnnotations.test_6  s    9:::::r   c                 0    |                      d           d S )Nz/def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): passr   r'   s    r   test_7zTestFunctionAnnotations.test_7  s    KLLLLLr   c                 4    d}|                      |           d S )Nzgdef f(a, (b:1, c:2, d), e:3=4, f=5,
                        *g:6, h:7, i=8, j:9=10, **k:11) -> 12: passr   r   r   s     r   test_8zTestFunctionAnnotations.test_8  s"    Gar   c                 4    d}|                      |           d S )Nzdef f(
          a: str,
          b: int,
          *,
          c: bool = False,
          **kwargs,
        ) -> None:
            call(c=c, **kwargs,)r   r  s     r   test_9zTestFunctionAnnotations.test_9  s#    $ 	ar   c                 4    d}|                      |           d S )Nz@def f(
          a: str,
        ) -> None:
            call(a,)r   r  s     r   test_10zTestFunctionAnnotations.test_10  s#     	ar   c                 4    d}|                      |           d S )NzGdef f(
          a: str = '',
        ) -> None:
            call(a=a,)r   r  s     r   test_11zTestFunctionAnnotations.test_11  s#     	ar   c                 4    d}|                      |           d S )NzHdef f(
          *args: str,
        ) -> None:
            call(*args,)r   r  s     r   test_12zTestFunctionAnnotations.test_12  s#     	ar   c                 Z    |                      d           |                      d           d S )Nz)def f(a: str, b: int) -> None: call(a, b)z+def f(a: str, b: int,) -> None: call(a, b,)r   r'   s    r   test_13zTestFunctionAnnotations.test_13  s.    ABBBCDDDDDr   c                 Z    |                      d           |                      d           d S )Nz+def f(a: str, *b: int) -> None: call(a, *b)z-def f(a: str, *b: int,) -> None: call(a, *b,)r   r'   s    r   test_14zTestFunctionAnnotations.test_14  s.    CDDDEFFFFFr   c                 Z    |                      d           |                      d           d S )Nz-def f(a: str, b: int=1) -> None: call(a, b=1)z/def f(a: str, b: int=1,) -> None: call(a, b=1,)r   r'   s    r   test_15zTestFunctionAnnotations.test_15  .    EFFFGHHHHHr   c                 Z    |                      d           |                      d           d S )Nz-def f(a: str, **b: int) -> None: call(a, **b)z/def f(a: str, **b: int,) -> None: call(a, **b,)r   r'   s    r   test_16zTestFunctionAnnotations.test_16  r  r   c                 Z    |                      d           |                      d           d S )Nz/def f(*a: str, b: int=1) -> None: call(*a, b=1)z1def f(*a: str, b: int=1,) -> None: call(*a, b=1,)r   r'   s    r   test_17zTestFunctionAnnotations.test_17  .    GHHHIJJJJJr   c                 Z    |                      d           |                      d           d S )Nz/def f(*a: str, **b: int) -> None: call(*a, **b)z1def f(*a: str, **b: int,) -> None: call(*a, **b,)r   r'   s    r   test_18zTestFunctionAnnotations.test_18  r!  r   c                 Z    |                      d           |                      d           d S )Nz$def f(*, b: int=1) -> None: call(*b)z&def f(*, b: int=1,) -> None: call(*b,)r   r'   s    r   test_19zTestFunctionAnnotations.test_19  s.    <===>?????r   c                 Z    |                      d           |                      d           d S )Nz2def f(a: str='', b: int=2) -> None: call(a=a, b=2)z4def f(a: str='', b: int=2,) -> None: call(a=a, b=2,)r   r'   s    r   test_20zTestFunctionAnnotations.test_20  .    JKKKLMMMMMr   c                 Z    |                      d           |                      d           d S )Nz2def f(a: str='', **b: int) -> None: call(a=a, **b)z4def f(a: str='', **b: int,) -> None: call(a=a, **b,)r   r'   s    r   test_21zTestFunctionAnnotations.test_21  r(  r   N)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   y  so       4 4 40 0 01 1 14 4 43 3 3; ; ;M M M  
	 	 	      E E EG G GI I II I IK K KK K K@ @ @N N NN N N N Nr   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestVarAnnotationsc                 0    |                      d           d S )Nzvar1: int = 5r   r'   s    r   r   zTestVarAnnotations.test_1  r   r   c                 0    |                      d           d S )Nzvar2: [int, str]r   r'   s    r   r   zTestVarAnnotations.test_2  r   r   c                 0    |                      d           d S )NzCdef f():
    st: str = 'Hello'
    a.b: int = (1, 2)
    return st
r   r'   s    r   r  zTestVarAnnotations.test_3  s'     ( 	) 	) 	) 	) 	)r   c                 0    |                      d           d S )Nz$def fbad():
    x: int
    print(x)
r   r'   s    r   r  zTestVarAnnotations.test_4  s'     ' 	( 	( 	( 	( 	(r   c                 0    |                      d           d S )Nzeclass C:
    x: int
    s: str = 'attr'
    z = 2
    def __init__(self, x):
        self.x: int = x
r   r'   s    r   r  zTestVarAnnotations.test_5  s'     2 	3 	3 	3 	3 	3r   c                 0    |                      d           d S )Nzlst: List[int] = []r   r'   s    r   r  zTestVarAnnotations.test_6  r   r   N)	r   r   r   r   r   r  r  r  r  r   r   r   r,  r,    sn        ' ' '* * *) ) )( ( (
3 3 3- - - - -r   r,  c                       e Zd Zd Zd ZdS )
TestExceptc                 4    d}|                      |           d S )NzP
            try:
                x
            except E as N:
                yr   r  s     r   test_newzTestExcept.test_new  #    
 	ar   c                 4    d}|                      |           d S )NzN
            try:
                x
            except E, N:
                yr   r  s     r   test_oldzTestExcept.test_old  r7  r   N)r   r   r   r6  r9  r   r   r   r4  r4    s2              r   r4  c                       e Zd ZdZd ZdS )TestStringLiterals)*'"zr'zr"zR'zR"zu'zu"zU'zU"zb'zb"zB'zB"zf'zf"zF'zF"zur'zur"zUr'zUr"zuR'zuR"zUR'zUR"zbr'zbr"zBr'zBr"zbR'zbR"zBR'zBR"zrb'zrb"zRb'zRb"zrB'zrB"zRB'zRB"c                     | j         D ]f}d                    ||d                   }|                     |           d                    ||d                   }|                     |           gd S )Nz{p}spamspamspam{s})pr   z{p}{s}{s}eggs{s}{s}{s})prefixesformatr{   )r   presingletriples       r   test_litzTestStringLiterals.test_lit  s|    = 	" 	"C)003#b'0BBFMM&!!!-44sc"g4FFFMM&!!!!		" 	"r   N)r   r   r   rA  rF  r   r   r   r;  r;  
  s*        
%H" " " " "r   r;  c                   &    e Zd Zd Zd Zd Zd ZdS )TestSetLiteralc                 0    |                      d           d S )Nzx = {'one'}r   r'   s    r   r   zTestSetLiteral.test_1!  r   r   c                 0    |                      d           d S )Nzx = {'one', 1,}r   r'   s    r   r   zTestSetLiteral.test_2$  r   r   c                 0    |                      d           d S )Nzx = {'one', 'two', 'three'}r   r'   s    r   r  zTestSetLiteral.test_3'  r   r   c                 0    |                      d           d S )Nzx = {2, 3, 4,}r   r'   s    r   r  zTestSetLiteral.test_4*  s    *+++++r   N)r   r   r   r   r   r  r  r   r   r   rH  rH     sP        ) ) )- - -9 9 9, , , , ,r   rH  c                       e Zd Zd ZdS )TestIdentifierc                     |                      d           |                      d           |                      d           |                      d           d S )Nu!   Örter = 'places'
grün = 'green'u   蟒 = a蟒 = 锦蛇 = 1u   µ = aµ = µµ = 1uA   𝔘𝔫𝔦𝔠𝔬𝔡𝔢 = a_𝔘𝔫𝔦𝔠𝔬𝔡𝔢 = 1r   r'   s    r   test_non_ascii_identifiersz)TestIdentifier.test_non_ascii_identifiers1  sT    :;;;/000+,,,YZZZZZr   N)r   r   r   rP  r   r   r   rN  rN  0  s(        [ [ [ [ [r   rN  c                       e Zd Zd Zd ZdS )TestNumericLiteralsc                 Z    |                      d           |                     d           d S )N0o77777777777770o7324528887r   r'   s    r   test_new_octal_notationz+TestNumericLiterals.test_new_octal_notation9  s0    +,,,./////r   c                 Z    |                      d           |                     d           d S )N0b101010	0b0101021r   r'   s    r   test_new_binary_notationz,TestNumericLiterals.test_new_binary_notation=  s.    n%%%O,,,,,r   N)r   r   r   rV  rZ  r   r   r   rR  rR  8  s2        0 0 0- - - - -r   rR  c                       e Zd Zd ZdS )TestClassDefc                     |                      d           |                      d           |                      d           |                      d           |                      d           d S )Nzclass B(t=7): passzclass B(t, *args): passzclass B(t, **kwargs): passz!class B(t, *args, **kwargs): passz'class B(t, y=9, *args, **kwargs,): passr   r'   s    r   test_new_syntaxzTestClassDef.test_new_syntaxC  sg    *+++/00023339:::?@@@@@r   N)r   r   r   r^  r   r   r   r\  r\  B  s(        A A A A Ar   r\  c                   $    e Zd ZdZd Zd Zd ZdS )TestParserIdempotencyz,A cut-down version of pytree_idempotency.py.c           	          t           j        j        rt          d|            t	          |d          5 }t          j        |j                  d         }d d d            n# 1 swxY w Y   |                     |d|z             t	          |d|          5 }|	                                }d d d            n# 1 swxY w Y   	 t          j        |          }nY# t          $ rL 	 t          j        |          }n3# t          $ r&}|                     d|d|d	           Y d }~nd }~ww xY wY nw xY wt          |          }||k    r8t          t!          |||                     |                     d
|z             d S d S )NzParse file: rB   r   zcan't detect encoding for %sr)encodingzParseError on file z ()zIdempotency failed: %s)testr   verboseprintrL   r   detect_encodingreadlineassertIsNotNonerM   r   r   r	   r   failstr
diff_texts)r   filepathfprc  sourcetreeerrnews           r   
parse_filez TestParserIdempotency.parse_fileO  sA   < 	-+++,,,(D!! 	@R/<<Q?H	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@X;hF	H 	H 	H(C(333 	rWWYYF	 	 	 	 	 	 	 	 	 	 	 	 	 	 		J&v..DD 	J 	J 	JJ0=fEE J J J			(((CCCHIIIIIIIIJ	J
 $ii&==*VS(33444II.9::::: =s_    A  A$'A$B77B;>B;C 
D.#C87D.8
D(D#D.#D((D.-D.c                     t          j                    D ]E}|                     |          5  |                     |           d d d            n# 1 swxY w Y   Fd S )N)rn  )r   all_project_filessubTestrt  )r   rn  s     r   test_all_project_filesz,TestParserIdempotency.test_all_project_filesd  s    133 	* 	*Hx00 * *)))* * * * * * * * * * * * * * *	* 	*s   AA	A	c                     t          j        d           t          j        d           t          j        d           t          j        d           d S )Nza, *b, c = x
z[*a, b] = x
z(z, *y, w) = m
zfor *z, m in d: pass
r   r   r'   s    r   test_extended_unpackingz-TestParserIdempotency.test_extended_unpackingi  sO    ,---O,,,.///455555r   N)r   r   r   __doc__rt  rx  r{  r   r   r   r`  r`  K  sG        66; ; ;** * *
6 6 6 6 6r   r`  c                   &    e Zd Zd Zd Zd Zd ZdS )TestLiteralsc                 X    t          j        t          j        |          dz              d S )Nz

)r   r   r   dedentr  s     r   r{   zTestLiterals.validater  s(    GN1--677777r   c                 4    d}|                      |           d S )Nu   
            md5test(b"ª" * 80,
                    (b"Test Using Larger Than Block-Size Key "
                     b"and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r   r  s     r   test_multiline_bytes_literalsz*TestLiterals.test_multiline_bytes_literalsu  #     	ar   c                 4    d}|                      |           d S )Nz
            b"""
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN">
            """
            r   r  s     r   'test_multiline_bytes_tripquote_literalsz4TestLiterals.test_multiline_bytes_tripquote_literals~  r  r   c                 4    d}|                      |           d S )Nu   
            md5test("ª" * 80,
                    ("Test Using Larger Than Block-Size Key "
                     "and Larger Than One Block-Size Data"),
                    "6f630fad67cda0ee1fb1f562db3aa53e")
            r   r  s     r   test_multiline_str_literalsz(TestLiterals.test_multiline_str_literals  r  r   N)r   r   r   r{   r  r  r  r   r   r   r~  r~  p  sP        8 8 8        r   r~  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestNamedAssignmentsz"Also known as the walrus operator.c                 .    t          j        d           d S )Nzif f := x(): pass
rz  r'   s    r   test_named_assignment_ifz-TestNamedAssignments.test_named_assignment_if  s    122222r   c                 .    t          j        d           d S )Nzwhile f := x(): pass
rz  r'   s    r   test_named_assignment_whilez0TestNamedAssignments.test_named_assignment_while  s    455555r   c                 .    t          j        d           d S )Nz0any((lastNum := num) == 1 for num in [1, 2, 3])
rz  r'   s    r   test_named_assignment_generatorz4TestNamedAssignments.test_named_assignment_generator  s    OPPPPPr   c                 .    t          j        d           d S )Nz-[(lastNum := num) == 1 for num in [1, 2, 3]]
rz  r'   s    r   test_named_assignment_listcompz3TestNamedAssignments.test_named_assignment_listcomp  s    LMMMMMr   N)r   r   r   r|  r  r  r  r  r   r   r   r  r    s^        ,,3 3 36 6 6Q Q QN N N N Nr   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestPositionalOnlyArgsc                 .    t          j        d           d S )Nz!def one_pos_only_arg(a, /): pass
rz  r'   s    r   test_one_pos_only_argz,TestPositionalOnlyArgs.test_one_pos_only_arg  s    @AAAAAr   c                 .    t          j        d           d S )Nz4def all_markers(a, b=2, /, c, d=4, *, e=5, f): pass
rz  r'   s    r   test_all_markersz'TestPositionalOnlyArgs.test_all_markers  s)    G	I 	I 	I 	I 	Ir   c                 .    t          j        d           d S )Nzdef all_markers_with_args_and_kwargs(
                           aa, b, /, _cc, d, *args, e, f_f, **kwargs,
                   ):
                       pass
rz  r'   s    r   test_all_with_args_and_kwargsz4TestPositionalOnlyArgs.test_all_with_args_and_kwargs  s&    !	" 	" 	" 	" 	"r   c                 .    t          j        d           d S )Nz,lambda a, b, /, c, d, *args, e, f, **kw: kw
rz  r'   s    r   test_lambda_soupz'TestPositionalOnlyArgs.test_lambda_soup  s)    ?	A 	A 	A 	A 	Ar   c                 .    t          j        d           d S )Nzdef func(a,b,/,*,g,e=3): pass
rz  r'   s    r   test_only_positional_or_keywordz6TestPositionalOnlyArgs.test_only_positional_or_keyword  s    =>>>>>r   N)r   r   r   r  r  r  r  r  r   r   r   r  r    sh        B B BI I I" " "A A A? ? ? ? ?r   r  c                       e Zd Zd ZdS )TestPickleableExceptionc                    t          ddd d          }t          t          j        dz             D ]}t          j        t          j        ||                    }|                     |j        |j                   |                     |j        |j                   |                     |j	        |j	                   |                     |j
        |j
                   |                     |j        |j                   d S )NrC   r   )r   contextr   )protocol)r	   ranger^   HIGHEST_PROTOCOLloadsr_   r   argsrC   r   valuer  )r   rr  protoerr2s       r   test_ParseErrorz'TestPickleableException.test_ParseError  s    48862Q677 	8 	8E<S5 A A ABBDSXty111SWdh///SXty111SY
333S[$,7777	8 	8r   N)r   r   r   r  r   r   r   r  r    s#        8 8 8 8 8r   r  c           	          |                                  } |                                 }t          j        | |||ddd          S )Nz
(original)z(reserialized) )lineterm)
splitlinesdifflibunified_diff)abfilenames      r   rm  rm    sG    	A	A1h ,.>)+- - - -r   __main__)2r|  r  r   r   r   r  rg   ro   r,   r^   r0   rJ   rH   r*   test.supportre  rt   lib2to3.pgen2r$   r   pgen2.parser	   lib2to3.pygramr
   r   TestCaser   r   rx   r   r   r   r   r   r   r,  r4  r;  rH  rN  rR  r\  r`  r~  r  r  r  rm  r   mainr   r   r   <module>r     s           6 6 6 6 6 6 6 6       				       



       1 0 0 0 0 0 " " " " " " $ $ $ $ $ $ 1 1 1 1 1 1J J J J J! J J JO) O) O) O) O)w' O) O) O)d
E 
E 
E 
E 
E'" 
E 
E 
E         {      * * * * *K * * *J
 J
 J
 J
 J
[ J
 J
 J
Z, , , , ,{ , , ,@r? r? r? r? r?; r? r? r?l]N ]N ]N ]N ]Nk ]N ]N ]NB- - - - - - - -<       $" " " " " " " ",, , , , ,[ , , , [ [ [ [ [[ [ [ [- - - - -+ - - -A A A A A; A A A"6 "6 "6 "6 "6G, "6 "6 "6J    ;   BN N N N N; N N N ? ? ? ? ?[ ? ? ?0	8 	8 	8 	8 	8h/ 	8 	8 	8- - - zHMOOOOO r   