a ze<]@s ddlZddlZddlZddlmZmZmZmZddl m Z ddl m Z gdZ gdZgdZgdZd d d d Zgd ZeedddZeeeeeeeffeeeeefdddZee \ZZee\ZZee\ZZee\ZZGdddejZdS)N)AnyUnionIterableTuple)dedent)support()Zannotated_assignmentz x: int = 42)Zannotated_assignment_with_tuplezx: tuple = 1, 2)Z annotated_assignment_with_parensz(paren): int = 3+2)Zannotated_assignment_with_yieldzx: int = yield 42)Zannotated_no_assignmentzx: int)Zannotation_with_multiple_parensz((parens)): int)Zannotation_with_parensz (parens): int)Zannotated_assignment_with_attrza.b: int)Z#annotated_assignment_with_subscriptz a[b]: int)Z)annotated_assignment_with_attr_and_parensz (a.b): int)Z.annotated_assignment_with_subscript_and_parensz (a[b]): int)assertzassert a)Zassert_messagez assert a, b)Zassignment_falsez a = False)Zassignment_noneza = None)Zassignment_trueza = True)Zassignment_parenz(a) = 42)Zassignment_paren_multiplez(a, b) = (0, 1))Zasyncforz1 async for i in a: pass )Zattribute_callza.b())Zattribute_multiple_namesz abcd.efg.hij)Zattribute_simpleza.b)Zattributes_subscriptza.b[0])Zaugmented_assignmentzx += 42)Zaugmented_assignment_attributez a.b.c += 42)Zaugmented_assignment_parenz (x) += 42)Z$augmented_assignment_paren_subscriptz (x[0]) -= 42)Z binop_addz1 + 1)Zbinop_add_multiplez 1 + 1 + 1 + 1)Z binop_allz1 + 2 * 5 + 3 ** 2 - -3)Zbinop_boolop_compz"1 + 1 == 2 or 1 + 1 == 3 and not b)Z boolop_orza or b)Zboolop_or_multiplez a or b or c)Zclass_def_basesz. class C(A, B): pass )Zclass_def_decoratorsz3 @a class C: pass )Z#class_def_decorator_with_expressionz> @lambda x: 42 class C: pass )Z.class_def_decorator_with_expression_and_walruszA @x:=lambda x: 42 class C: pass )Zclass_def_keywordsz: class C(keyword=a+b, **c): pass )Zclass_def_mixedz> class C(A, B, keyword=0, **a): pass )Zclass_def_simplez( class C: pass )Zclass_def_starred_and_kwargz7 class C(A, B, *x, **y): pass )Zclass_def_starred_in_kwargsz> class C(A, x=2, *[B, C], y=3): pass )Zcall_attributezf().b)Z call_genexpzf(i for i in a))Zcall_mixed_argszf(a, b, *c, **d))Zcall_mixed_args_namedzf(a, b, *c, d=4, **v))Z call_one_argzf(a))Zcall_posarg_genexpzf(a, (i for i in a)))Z call_simplezf())Zcall_subscriptzf()[0])compza == b)Z comp_multiplez a == b == c)Zcomp_paren_endz a == (b-1))Zcomp_paren_startz (a-1) == b) decoratorz3 @a def f(): pass )Zdecorator_asyncz9 @a async def d(): pass )Zdecorator_with_expressionz> @lambda x: 42 def f(): pass )Z$decorator_with_expression_and_walruszA @x:=lambda x: 42 def f(): pass )Z del_attributezdel a.b)Zdel_call_attributez del a().c)Zdel_call_genexp_attributezdel a(i for i in b).c)Z del_emptyzdel())Zdel_listz del a, [b, c])Z del_mixedzdel a[0].b().c)Z del_multiplezdel a, b)Zdel_multiple_calls_attributez del a()().b)Z del_parenzdel(a,b))Zdel_paren_single_targetzdel(a))Zdel_subscript_attributez del a[0].b)Z del_tuplez del a, (b, c))deletezdel a)dictzO { a: 1, b: 2, c: 3 } )Z dict_compz{x:1 for x in a})Z dict_comp_ifz{x:1+2 for x in a if b})Z dict_emptyz{})Zempty_line_after_linecontz+ pass \ pass )forz+ for i in a: pass )Zfor_elsezJ for i in a: pass else: pass )Zfor_star_target_in_parenzfor (a) in b: pass)Zfor_star_targets_attributezfor a.b in c: pass)Zfor_star_targets_call_attributezfor a().c in b: pass)Zfor_star_targets_emptyzfor () in a: pass)Zfor_star_targets_mixedzfor a[0].b().c in d: pass)Zfor_star_targets_mixed_starredz7 for a, *b, (c, d) in e: pass )Zfor_star_targets_multiplezfor a, b in c: pass)Zfor_star_targets_nested_starredzfor *[*a] in b: pass)Zfor_star_targets_starredzfor *a in b: pass)Z$for_star_targets_subscript_attributezfor a[0].b in c: pass)Zfor_star_targets_trailing_commaz4 for a, (b, c), in d: pass )Zfor_star_targets_tuplezfor a, (b, c) in d: pass)Zfor_underscorez+ for _ in a: pass )Zfunction_return_typez/ def f() -> Any: pass )zf-string_slicez f'{x[2]}')zf-string_slice_upperz f'{x[2:3]}')zf-string_slice_stepzf'{x[2:3:-2]}')zf-string_constantzf'{42}')zf-string_boolopz f'{x and y}')zf-string_named_exprz f'{(x:=42)}')zf-string_binopzf'{x+y}')zf-string_unaryopz f'{not x}')f-string_lambdaz6f'{(lambda x, /, y, y2=42 , *z, k1, k2=34, **k3: 42)}')zf-string_lambda_callzf'{(lambda: 2)(2)}')zf-string_ifexprzf'{x if y else z}')z f-string_dictzf'{ {2:34, 3:34} }')z f-string_setzf'{ {2,-45} }')z f-string_listzf'{ [2,-45] }')zf-string_tuplezf'{ (2,-45) }')zf-string_listcompzf'{[x for x in y if z]}')zf-string_setcompzf'{ {x for x in y if z} }')zf-string_dictcompzf'{ {x:x for x in y if z} }')zf-string_genexprzf'{ (x for x in y if z) }')zf-string_yieldzf'{ (yield x) }')zf-string_yieldfromzf'{ (yield from x) }')zf-string_awaitzf'{ await x }')zf-string_comparez f'{ x == y }')z f-string_callzf'{ f(x,y,z) }')zf-string_attributezf'{ f.x.y.z }')zf-string_starredz f'{ *x, }')zf-string_doublestarredz f'{ {**x} }')zf-string_escape_bracez f'{{Escape')zf-string_escape_closing_bracez f'Escape}}')zf-string_multilinez/ f''' {hello} ''' )zf-string_multiline_in_exprzA f''' { hello } ''' )zf-string_multiline_in_callzJ f''' {f( a, b, c )} ''' )globalz global a, b)groupz (yield a))Zif_elifzF if a: pass elif b: pass )Z if_elif_elifzg if a: pass elif b: pass elif c: pass )Z if_elif_elsezd if a: pass elif b: pass else: pass )Zif_elsezD if a: pass else: pass )Z if_simplez if a: pass)importzimport a)Z import_aliasz import a as b)Z import_dottedz import a.b)Zimport_dotted_aliaszimport a.b as c)Zimport_dotted_multicharz import ab.cd)Z import_fromzfrom a import b)Zimport_from_aliaszfrom a import b as c)Zimport_from_dottedzfrom a.b import c)Zimport_from_dotted_aliaszfrom a.b import c as d)Zimport_from_multiple_aliaseszfrom a import b as c, d as e)Zimport_from_one_dotzfrom .a import b)Zimport_from_one_dot_aliaszfrom .a import b as c)Zimport_from_starzfrom a import *)Zimport_from_three_dotszfrom ...a import b)Zimport_from_trailing_commazfrom a import (b,))kwargz+ def f(**a): pass )Z kwonly_argsz/ def f(*, a, b): pass )Zkwonly_args_with_defaultz1 def f(*, a=2, b): pass )Z lambda_kwargzlambda **a: 42)Zlambda_kwonly_argszlambda *, a, b: 42)Zlambda_kwonly_args_with_defaultzlambda *, a=2, b: 42)Zlambda_mixed_argszlambda a, /, b, *, c: 42)Zlambda_mixed_args_with_defaultz%lambda a, b=2, /, c=3, *e, f, **g: 42)Zlambda_no_argsz lambda: 42)Zlambda_pos_argszlambda a,b: 42)Zlambda_pos_args_with_defaultzlambda a, b=2: 42)Zlambda_pos_only_argszlambda a, /: 42)Z!lambda_pos_only_args_with_defaultzlambda a=0, /: 42)Zlambda_pos_posonly_argszlambda a, b, /, c, d: 42)Z$lambda_pos_posonly_args_with_defaultzlambda a, b=0, /, c=2: 42)Z lambda_varargz lambda *a: 42)Zlambda_vararg_kwonly_argszlambda *a, b: 42)listz [1, 2, a])Z list_compz[i for i in a])Z list_comp_ifz[i for i in a if b])Zlist_trailing_commaz[1+2, a, 3+4,])Z mixed_argsz5 def f(a, /, b, *, c): pass )Zmixed_args_with_defaultzB def f(a, b=2, /, c=3, *e, f, **g): pass )Zmultipart_string_byteszb"Hola" b"Hello" b"Bye")Zmultipart_string_triplez"""Something here""" "and now")Z#multipart_string_different_prefixesz(u"Something" "Other thing" r"last thing")Zmultiple_assignmentszx = y = z = 42)Zmultiple_assignments_with_yieldzx = y = z = yield 42)Z multiple_passz& pass; pass pass )Z namedexprz(x := [1, 2, 3]))Znamedexpr_falsez (x := False))Znamedexpr_nonez (x := None))Znamedexpr_truez (x := True))nonlocalz nonlocal a, b)Znumber_complexz -2.234+1j)Z number_floatz-34.2333)Znumber_imaginary_literalz1.1234j)Znumber_integerz-234)Znumber_underscoresZ 1_234_567)passr)Zpos_argsz, def f(a, b): pass )Zpos_args_with_defaultz. def f(a, b=2): pass )Z pos_only_argsz, def f(a, /): pass )Zpos_only_args_with_defaultz. def f(a=0, /): pass )Zpos_posonly_argsz5 def f(a, b, /, c, d): pass )Zpos_posonly_args_with_defaultz6 def f(a, b=0, /, c=2): pass )Z primary_mixedz a.b.c().d[0])raiser)Zraise_ellipsisz raise ...)Z raise_exprzraise a)Z raise_fromzraise a from b)returnr)Z return_exprzreturn a)setz {1, 2+4, 3+5})Zset_compz{i for i in a})Zset_trailing_commaz {1, 2, 3,})Zsimple_assignmentzx = 42)Zsimple_assignment_with_yieldz x = yield 42)Z string_byteszb"hello")Zstring_concatenation_byteszb"hello" b"world")Zstring_concatenation_simplez "abcd" "efgh")Zstring_format_simplezf"hello")Z"string_format_with_formatted_valuezf"hello {world}")Z string_simplez"hello")Zstring_unicodezu"hello")Zsubscript_attributeza[0].b)Zsubscript_callza[b]())Zsubscript_multiple_slicesz a[0:a:2, 1])Zsubscript_simpleza[0])Zsubscript_single_element_tupleza[0,])Zsubscript_trailing_commaz a[0, 1, 2,])Zsubscript_tuplez a[0, 1, 2])Zsubscript_whole_slicez a[0+1:b:c])Z try_exceptzE try: pass except: pass )Ztry_except_elsezd try: pass except: pass else: pass )Ztry_except_else_finallyz try: pass except: pass else: pass finally: pass )Ztry_except_exprzG try: pass except a: pass )Ztry_except_expr_targetzL try: pass except a as b: pass )Ztry_except_finallyzg try: pass except: pass finally: pass )Z try_finallyzF try: pass finally: pass )Zunpacking_binopz[*([1, 2, 3] + [3, 4, 5])])Zunpacking_callz[*b()])Zunpacking_comparez [*(x < y)])Zunpacking_constantz[*3])Zunpacking_dictz[*{1: 2, 3: 4}])Zunpacking_dict_comprehensionz[*{x:y for x,y in z}])Zunpacking_ifexprz[*([1, 2, 3] if x else y)])Zunpacking_listz [*[1,2,3]])Zunpacking_list_comprehensionz[*[x for x in y]])Zunpacking_namedexprz[*(x:=[1, 2, 3])])Z unpacking_setz [*{1,2,3}])Zunpacking_set_comprehensionz[*{x for x in y}])Zunpacking_stringz [*"myvalue"])Zunpacking_tuplez [*(1,2,3)])Zunpacking_unaryopz[*(not [1, 2, 3])])Zunpacking_yieldz [*(yield 42)])Zunpacking_yieldfromz[*(yield from x)])tuplez (1, 2, 3))varargz* def f(*a): pass )Zvararg_kwonly_argsz- def f(*a, b): pass )whilez( while a: pass )Z while_elsezG while a: pass else: pass )withz' with a: pass )Zwith_asz, with a as b: pass )Z with_as_parenz. with a as (b): pass )Z with_as_emptyzwith a as (): pass)Zwith_list_recursivez6 with a as [x, [y, z]]: pass )Zwith_tuple_recursivez6 with a as ((x, y), z): pass )Zwith_tuple_targetz1 with a as (x, y): pass )Zwith_list_targetz1 with a as [x, y]: pass )yieldr)Z yield_exprzyield a)Z yield_fromz yield from a)#)Zannotation_multiple_targetsz(a, b): int = 42)Zannotation_nested_tuplez ((a, b)): int)Zannotation_listz[a]: int)Zannotation_lambdazlambda: int = 42)Zannotation_tuplez (a,): int)Zannotation_tuple_without_parenza,: int)Zassignment_keywordza = if)Zaugmented_assignment_listz [a, b] += 1)Zaugmented_assignment_tuplez a, b += 1)Z augmented_assignment_tuple_parenz(a, b) += (1, 2))Zcomprehension_lambdaz(a for a in lambda: b))Zcomprehension_elsez(a for a in b if c else d)Zdel_callzdel a())Zdel_call_genexpzdel a(i for i in b))Zdel_subscript_callz del a[b]())Zdel_attribute_callz del a.b())Zdel_mixed_callzdel a[0].b().c.d())Zfor_star_targets_callzfor a() in b: pass)Zfor_star_targets_subscript_callzfor a[b]() in c: pass)Zfor_star_targets_attribute_callzfor a.b() in c: pass)Zfor_star_targets_mixed_callzfor a[0].b().c.d() in e: pass)Zfor_star_targets_inzfor a, in in b: pass)zf-string_assignmentz f'{x = 42}')zf-string_emptyzf'{}')zf-string_function_defzf'{def f(): pass}')rzf'{lambda x: 42}')zf-string_singe_bracezf'{')zf-string_single_closing_bracezf'}')Zfrom_import_invalidzfrom import import a)Zfrom_import_trailing_commazfrom a import b,)Zimport_non_ascii_syntax_erroru import ä £)zinvalid indentationz. def f(): a a )Znot_terminated_stringz a = 'example)Ztry_except_attribute_targetzJ try: pass except Exception as a.b: pass )Ztry_except_subscript_targetzK try: pass except Exception as a[0]: pass ))zf(x, y, z=1, **b, *az>iterable argument unpacking follows keyword argument unpacking)zf(x, y=1, *z, **a, bz6positional argument follows keyword argument unpacking)zf(x, y, z=1, a=2, bz,positional argument follows keyword argument)zTrue = 1zcannot assign to True)za() = 1zcannot assign to function call)z (a, b): intz/only single target (not tuple) can be annotated)z [a, b]: intz.only single target (not list) can be annotated)za(): intzillegal target for annotation)z1 += 1z;'literal' is an illegal expression for augmented assignment)z pass passzunexpected indent)z def f(): passzexpected an indented block)zdef f(*): pass"named arguments must follow bare *)zdef f(*,): passr)zdef f(*, **a): passr)zlambda *: passr)zlambda *,: passr)zlambda *, **a: passr)zf(g()=2=expression cannot contain assignment, perhaps you meant "=="?)zf(a, b, *c, d.e=2r)zf(*a, **b, c=0, d[1]=3)r))Zstring_concatenation_formatz%f"{hello} world" f"again {and_again}")Zstring_concatenation_multiplez5 f"hello" f"{world} again" f"and_again" )zf-string_multiline_compzI f''' {(i for i in a if b)} ''' )z< f''' {a$b} ''' z(a$b) )z< f''' {a$b }''' z(a$b )z< f''' { a$b}''' za$b) )Z'multiline_fstrings_same_line_with_braceZ$multiline_fstring_brace_on_next_lineZ(multiline_fstring_brace_on_previous_line))Zexpression_addz1+1)Zexpression_add_2za+b)Zexpression_callzf(a, b=2, **kw))Zexpression_tuplez1, 2, 3)Zexpression_tuple_one_valuez1,)sourcercCs@t|trt|}n(t|ttfs.d|}ntd||S)N zInvalid type for test source: ) isinstancestrrrrjoin TypeError)r resultr'H/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_peg_parser.pycleanup_sources    r)) test_casesrcCs>t|\}}t|}t|D]\}}t|}|||<q||fSN)zipr enumerater))r*Ztest_idsZ _test_sourcesZ test_sourcesindexr r&r'r'r(prepare_test_casess   r/c@seZdZddddZddddZddddZejddd d Zddd d Z ddd dZ ddddZ ddddZ dS)ASTGenerationTestN)rcCsTd|_tD]D}t|}tj|dd}|tj|ddtj|ddd|q dSNT oldparserZinclude_attributes!Wrong AST generation for source: )ZmaxDiff TEST_SOURCES peg_parser parse_string assertEqualastdumpselfr Z actual_astZ expected_astr'r'r(+test_correct_ast_generation_on_source_filess   z=ASTGenerationTest.test_correct_ast_generation_on_source_filesc CsNtD]D}|jtd|ddt|Wdq1s>0YqdS)NzParsing z did not raise an exception)msg) FAIL_SOURCES assertRaises SyntaxErrorr7r8)r=r r'r'r(-test_incorrect_ast_generation_on_source_filessz?ASTGenerationTest.test_incorrect_ast_generation_on_source_filesc CsptD]f\}}d|vrtnt}||}t|Wdn1sF0Y|||jjvd|qdS)Nindentz1Actual error message does not match expexted for ) FAIL_SPECIALIZED_MESSAGE_CASESIndentationErrorrBrAr7r8Z assertTrue exceptionr?)r=r error_textexcser'r'r(5test_incorrect_ast_generation_with_specialized_errorss  ( zGASTGenerationTest.test_incorrect_ast_generation_with_specialized_errorscCsNtD]D}t|}tj|dd}|tj|ddtj|ddd|qdSr1GOOD_BUT_FAIL_SOURCESr7r8r9r:r;r<r'r'r(=test_correct_but_known_to_fail_ast_generation_on_source_filess   zOASTGenerationTest.test_correct_but_known_to_fail_ast_generation_on_source_filescCsFtD]<}t|}tj|dd}|t|t|d|qdS)NTr2r5rLr<r'r'r(,test_correct_ast_generation_without_pos_infos z>ASTGenerationTest.test_correct_ast_generation_without_pos_infoc Cs^tD]P\}}|t}tt|Wdn1s>0Y|||jj qdSr+) FSTRINGS_TRACEBACKSvaluesrArBr7r8rr9rGtext)r=r rHrJr'r'r(#test_fstring_parse_error_tracebacks s ,z5ASTGenerationTest.test_fstring_parse_error_tracebackscCsTtD]J}tj|dd}tj|ddd}|tj|ddtj|ddd|qdS)Neval)modeT)rUr3r4r5)EXPRESSIONS_TEST_SOURCESr7r8r9r:r;r<r'r'r(!test_correct_ast_generatrion_evals  z3ASTGenerationTest.test_correct_ast_generatrion_evalcCsJd}|td&t|dd|Wdn1s<0YdS)Nztoo many nested parentheses())ZassertRaisesRegexrBr7r8)r=nr'r'r($test_tokenizer_errors_are_propagatedsz6ASTGenerationTest.test_tokenizer_errors_are_propagated) __name__ __module__ __qualname__r>rCrKunittestZexpectedFailurerNrOrSrWr\r'r'r'r(r0s     r0) r:Z _peg_parserr7r`typingrrrrtextwraprtestrZ TEST_CASESZFAIL_TEST_CASESrEZGOOD_BUT_FAIL_TEST_CASESrPZEXPRESSIONS_TEST_CASESr#r)r/ZTEST_IDSr6ZGOOD_BUT_FAIL_TEST_IDSrMZ FAIL_TEST_IDSr@ZEXPRESSIONS_TEST_IDSrVZTestCaser0r'r'r'r(s>  09