a zeP@sbddlZddlmZdaGdddejZGdddejZGdddejZed kr^e dS) N)use_old_parserc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zeed)d*d+Zd,d-Zeed)d.d/Zd0S)1NamedExpressionInvalidTestcCs@d}|tdt|iiWdn1s20YdS)Nzx := 0invalid syntaxassertRaisesRegex SyntaxErrorexecselfcoder O/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_named_expressions.py test_named_expression_invalid_01sz;NamedExpressionInvalidTest.test_named_expression_invalid_01cCs@d}|tdt|iiWdn1s20YdS)Nz x = y := 0rrr r r r test_named_expression_invalid_02sz;NamedExpressionInvalidTest.test_named_expression_invalid_02cCs@d}|tdt|iiWdn1s20YdS)Nz y := f(x)rrr r r r test_named_expression_invalid_03sz;NamedExpressionInvalidTest.test_named_expression_invalid_03cCs@d}|tdt|iiWdn1s20YdS)Nzy0 = y1 := f(x)rrr r r r test_named_expression_invalid_04sz;NamedExpressionInvalidTest.test_named_expression_invalid_04cCs@d}|tdt|iiWdn1s20YdS)Nz((a, b) := (1, 2))z,cannot use assignment expressions with tuplerr r r r test_named_expression_invalid_06 sz;NamedExpressionInvalidTest.test_named_expression_invalid_06cCs@d}|tdt|iiWdn1s20YdS)Nzdef spam(a = b := 42): passrrr r r r test_named_expression_invalid_07&sz;NamedExpressionInvalidTest.test_named_expression_invalid_07cCs@d}|tdt|iiWdn1s20YdS)Nzdef spam(a: b := 42 = 5): passrrr r r r test_named_expression_invalid_08,sz;NamedExpressionInvalidTest.test_named_expression_invalid_08cCs@d}|tdt|iiWdn1s20YdS)Nzspam(a=b := 'c')rrr r r r test_named_expression_invalid_092sz;NamedExpressionInvalidTest.test_named_expression_invalid_09cCs@d}|tdt|iiWdn1s20YdS)Nzspam(x = y := f(x))rrr r r r test_named_expression_invalid_108sz;NamedExpressionInvalidTest.test_named_expression_invalid_10cCs@d}|tdt|iiWdn1s20YdS)Nzspam(a=1, b := 2),positional argument follows keyword argumentrr r r r test_named_expression_invalid_11>s z;NamedExpressionInvalidTest.test_named_expression_invalid_11cCs@d}|tdt|iiWdn1s20YdSNzspam(a=1, (b := 2))rrr r r r test_named_expression_invalid_12Es z;NamedExpressionInvalidTest.test_named_expression_invalid_12cCs@d}|tdt|iiWdn1s20YdSrrr r r r test_named_expression_invalid_13Ls z;NamedExpressionInvalidTest.test_named_expression_invalid_13cCs@d}|tdt|iiWdn1s20YdS)Nz(x := lambda: y := 1)rrr r r r test_named_expression_invalid_14Ssz;NamedExpressionInvalidTest.test_named_expression_invalid_14cCs@d}|tdt|iiWdn1s20YdS)Nz(lambda: x := 1)z-cannot use assignment expressions with lambdarr r r r test_named_expression_invalid_15Ys z;NamedExpressionInvalidTest.test_named_expression_invalid_15cCs@d}|tdt|iiWdn1s20YdS)Nz + 1 for i in i := [1,2]]rrr r r r test_named_expression_invalid_16`sz;NamedExpressionInvalidTest.test_named_expression_invalid_16cCs@d}|tdt|iiWdn1s20YdS)Nz-[i := 0, j := 1 for i, j in [(1, 2), (3, 4)]]rrr r r r test_named_expression_invalid_17fsz;NamedExpressionInvalidTest.test_named_expression_invalid_17cCs@d}|tdt|iiWdn1s20YdS)NzNclass Foo(): [(42, 1 + ((( j := i )))) for i in range(5)] zKassignment expression within a comprehension cannot be used in a class bodyrr r r r +test_named_expression_invalid_in_class_bodyls zFNamedExpressionInvalidTest.test_named_expression_invalid_in_class_bodyc Csgd}|D]z\}}}d|d}|j|dH|t|t|iiWdn1s^0YWdq 1s|0Yq dS)N)) Local reuseiz[i := 0 for i in range(5)]) Nested reusejz0[[(j := 0) for i in range(5)] for j in range(5)])Reuse inner loop targetr$z.[(j := 0) for i in range(5) for j in range(5)])Unpacking reuser"z[i := 0 for i, j in [(0, 1)]])Reuse in loop conditionr"z#[i+1 for i in range(5) if (i := 0)])Unreachable reuser"z#[False or (i:=0) for i in range(5)])Unreachable nested reuser"z?[(i, j) for i in range(5) for j in range(5) if True or (i:=10)]Fassignment expression cannot rebind comprehension iteration variable ''casesubTestrrrr casesr-targetr msgr r r Mtest_named_expression_invalid_rebinding_list_comprehension_iteration_variableus   zhNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_iteration_variablec Csddg}|D]\}}}d|d}|j|d|t|t|iWdn1s\0Y|t|t|iiWdn1s0Y|t| td|iWdn1s0YWdq 1s0Yq dS)N) Inner reuser$z3[i for i in range(5) if (j := 0) for j in range(5)])Inner unpacking reuser$z6[i for i in range(5) if (j := 0) for j, k in [(0, 1)]]Ecomprehension inner loop cannot rebind assignment expression target 'r+r,lambda: r.r0r r r Etest_named_expression_invalid_rebinding_list_comprehension_inner_loops (*z`NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_inner_loopc Csgd}d}|D]\}}|j|d|t|t|iWdn1sR0Y|t|t|iiWdn1s0Y|t| td|iWdn1s0YWdq1s0YqdS)N) ) Top levelz[i for i in (i := range(5))]) Inside tuplez"[i for i in (2, 3, i := range(5))]) Inside listz"[i for i in [2, 3, i := range(5)]])Different namez[i for i in (j := range(5))])Lambda expressionz'[i for i in (lambda:(j := range(5)))()]) Inner loopz.[i for i in range(5) for j in (i := range(5))])Nested comprehensionz)[i for i in [j for j in (k := range(5))]])Nested comprehension conditionz1[i for i in [j for j in range(5) if (j := True)]])Nested comprehension bodyz,[i for i in [(j := True) for j in range(5)]]Kassignment expression cannot be used in a comprehension iterable expressionr,r8r.r r1r3r-r r r r Dtest_named_expression_invalid_list_comprehension_iterable_expressions  (*z_NamedExpressionInvalidTest.test_named_expression_invalid_list_comprehension_iterable_expressionz:Old parser does not support walruses in set comprehensionsc Csgd}|D]z\}}}d|d}|j|dH|t|t|iiWdn1s^0YWdq 1s|0Yq dS)N))r!r"z{i := 0 for i in range(5)})r#r$z0{{(j := 0) for i in range(5)} for j in range(5)})r%r$z.{(j := 0) for i in range(5) for j in range(5)})r&r"z{i := 0 for i, j in {(0, 1)}})r'r"z#{i+1 for i in range(5) if (i := 0)})r(r"z#{False or (i:=0) for i in range(5)})r)r"z?{(i, j) for i in range(5) for j in range(5) if True or (i:=10)}r*r+r,r.r0r r r Ltest_named_expression_invalid_rebinding_set_comprehension_iteration_variables   zgNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_iteration_variablec Csddg}|D]\}}}d|d}|j|d|t|t|iWdn1s\0Y|t|t|iiWdn1s0Y|t| td|iWdn1s0YWdq 1s0Yq dS)N)r5r$z3{i for i in range(5) if (j := 0) for j in range(5)})r6r$z6{i for i in range(5) if (j := 0) for j, k in {(0, 1)}}r7r+r,r8r.r0r r r Dtest_named_expression_invalid_rebinding_set_comprehension_inner_loops (*z_NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_inner_loopc Csgd}d}|D]\}}|j|d|t|t|iWdn1sR0Y|t|t|iiWdn1s0Y|t| td|iWdn1s0YWdq1s0YqdS)N) )r:z{i for i in (i := range(5))})r;z"{i for i in (2, 3, i := range(5))})r<z"{i for i in {2, 3, i := range(5)}})r=z{i for i in (j := range(5))})r>z'{i for i in (lambda:(j := range(5)))()})r?z.{i for i in range(5) for j in (i := range(5))})r@z){i for i in {j for j in (k := range(5))}})rAz1{i for i in {j for j in range(5) if (j := True)}})rBz,{i for i in {(j := True) for j in range(5)}}rCr,r8r.rDr r r Ctest_named_expression_invalid_set_comprehension_iterable_expressions  (*z^NamedExpressionInvalidTest.test_named_expression_invalid_set_comprehension_iterable_expressionN)__name__ __module__ __qualname__rrrrrrrrrrrrrrrrr r4r9rEunittestZskipIfrrFrGrHr r r r rs2    rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"NamedExpressionAssignmentTestcCsd}||ddS)N  assertEqualr ar r r #test_named_expression_assignment_01szANamedExpressionAssignmentTest.test_named_expression_assignment_01cCsd}|}||ddSNrOrQr r r #test_named_expression_assignment_02szANamedExpressionAssignmentTest.test_named_expression_assignment_02cCsdd}||ddS)NrO)r totalr r r #test_named_expression_assignment_03s zANamedExpressionAssignmentTest.test_named_expression_assignment_03cCsd}||ddS)NrWrXrYrO)r infor r r #test_named_expression_assignment_04szANamedExpressionAssignmentTest.test_named_expression_assignment_04cCsd}df||ddSNrWrXrO)r xr r r #test_named_expression_assignment_05s zANamedExpressionAssignmentTest.test_named_expression_assignment_05cCs8d}}}||d||d||ddS)NrrO)r r`yzr r r #test_named_expression_assignment_06s  zANamedExpressionAssignmentTest.test_named_expression_assignment_06cCsd}||ddS)NrWrXrWrX)rWrXrO)r locr r r #test_named_expression_assignment_07szANamedExpressionAssignmentTest.test_named_expression_assignment_07cCs$d}r||dn |ddS)Neggs0variable was not assigned using named expression)rPfailr spamr r r #test_named_expression_assignment_08 szANamedExpressionAssignmentTest.test_named_expression_assignment_08cCs"d}r||n |ddS)NTri) assertTruerjrkr r r #test_named_expression_assignment_09s zANamedExpressionAssignmentTest.test_named_expression_assignment_09cCsd}dkrn |ddS)NrNri)rj)r matchr r r #test_named_expression_assignment_10s zANamedExpressionAssignmentTest.test_named_expression_assignment_10cs8ddgd}fdd|D}||gddS)NcSs|SNr rRr r r rlszONamedExpressionAssignmentTest.test_named_expression_assignment_11..spamr\cs*g|]"}|dkr||fqSrr .0r`rlrbr r zUNamedExpressionAssignmentTest.test_named_expression_assignment_11..)rWrW?)rXrXr{)rYrYr{rOr Z input_dataresr rwr #test_named_expression_assignment_11szANamedExpressionAssignmentTest.test_named_expression_assignment_11csJddfddtddD}||ddgddgd dgd dggdS) NcSs|Srrr rsr r r rl$szONamedExpressionAssignmentTest.test_named_expression_assignment_12..spamcs g|]}||gqSr r rurwr r rx&ryzUNamedExpressionAssignmentTest.test_named_expression_assignment_12..rWr{rXrYrangerPr r}r rwr #test_named_expression_assignment_12#szANamedExpressionAssignmentTest.test_named_expression_assignment_12cCs0tddg}}||d||ddgdSr_lenrP)r lineslengthr r r #test_named_expression_assignment_13*s zANamedExpressionAssignmentTest.test_named_expression_assignment_13cCsJd}d}d}||||d}kr:|d|||}q ||ddS)z Where all variables are positive integers, and a is at least as large as the n'th root of x, this algorithm returns the floor of the n'th root of x (and roughly doubling the number of accurate bits per iteration): rXrYrWNrO)r rRnr`dr r r #test_named_expression_assignment_140s zANamedExpressionAssignmentTest.test_named_expression_assignment_14cCsd}r q||ddS)NFrOrQr r r #test_named_expression_assignment_15@szANamedExpressionAssignmentTest.test_named_expression_assignment_15c s@d\fddtdD}||ddddd d d dS) Nrecs*i|]"}qSr r )rv__rRbcr r HryzUNamedExpressionAssignmentTest.test_named_expression_assignment_16..rXrYr )rWrXrYrrrr)r Zfibr rr #test_named_expression_assignment_16FszANamedExpressionAssignmentTest.test_named_expression_assignment_16N)rIrJrKrSrVr[r^rardrgrmrorqr~rrrrrr r r r rMs rMc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5S)6NamedExpressionScopeTestcCs@d}|tdt|iiWdn1s20YdS)Nz!def spam(): (a := 5) print(a)zname 'a' is not defined)r NameErrorrr r r r test_named_expression_scope_01Nsz7NamedExpressionScopeTest.test_named_expression_scope_01cs:dfddtdD}||gd|ddS)Nrcsg|]}|qSr r )rvvrZr r rxXryzKNamedExpressionScopeTest.test_named_expression_scope_02..rrrWrYrrNrNr)r Z partial_sumsr rr test_named_expression_scope_02Vsz7NamedExpressionScopeTest.test_named_expression_scope_02cs0tfdddD}|||ddS)Nc3s|]}|dkVqdS)rWNr )rvnumZlastNumr r ^ryzJNamedExpressionScopeTest.test_named_expression_scope_03..r\rW)anyrnrP)r Z containsOner rr test_named_expression_scope_03]s z7NamedExpressionScopeTest.test_named_expression_scope_03cs2ddfddtddD}|ddS)NcSs|Srrr rsr r r rldszENamedExpressionScopeTest.test_named_expression_scope_04..spamcs g|]}||gqSr r rurwr r rxfryzKNamedExpressionScopeTest.test_named_expression_scope_04..rWrrrrr rwr test_named_expression_scope_04csz7NamedExpressionScopeTest.test_named_expression_scope_04csDddgd}fdd|D}||gd|ddS)NcSs|Srrr rsr r r rlkszENamedExpressionScopeTest.test_named_expression_scope_05..spamr\cs*g|]"}|dkr||fqSrtr rurwr r rxnryzKNamedExpressionScopeTest.test_named_expression_scope_05..rzrYrOr|r rwr test_named_expression_scope_05js z7NamedExpressionScopeTest.test_named_expression_scope_05cs>fddtdD}||gdgdg|ddS)Ncs"g|]}fddtdDqS)csg|] }|qSr r rvr"rlr r rxtryzVNamedExpressionScopeTest.test_named_expression_scope_06...rYrrvr$rr r rxtryzKNamedExpressionScopeTest.test_named_expression_scope_06..rXrrWrXrrr rr test_named_expression_scope_06ssz7NamedExpressionScopeTest.test_named_expression_scope_06cCs$tddg}||ddgdSr_r)r rr r r test_named_expression_scope_07ysz7NamedExpressionScopeTest.test_named_expression_scope_07csXddddfddtdD}||ddg|d|d dS) NcSs|Srrr rsr r r rlszENamedExpressionScopeTest.test_named_expression_scope_08..spamcSs|dSNrXr rr r r rhszENamedExpressionScopeTest.test_named_expression_scope_08..eggscs g|]}|qSr r rvhrRrrhrlr r rxryzKNamedExpressionScopeTest.test_named_expression_scope_08..rXrrWrrr rr test_named_expression_scope_08~s  z7NamedExpressionScopeTest.test_named_expression_scope_08csJddddfddtdD}||ddg|ddS) NcSs|Srrr rsr r r rlszENamedExpressionScopeTest.test_named_expression_scope_09..spamcSs|dSrr rr r r rhszENamedExpressionScopeTest.test_named_expression_scope_09..eggscs g|]}|qSr r rrRrhrlr r rxryzKNamedExpressionScopeTest.test_named_expression_scope_09..rXrrrr rr test_named_expression_scope_09s z7NamedExpressionScopeTest.test_named_expression_scope_09csPfddtdD}||ddgddgg|d|ddgdS)Ncs&g|]}fddtdDqS)csg|] }dqS)rWr rrsr r rxryzVNamedExpressionScopeTest.test_named_expression_scope_10...rXrrrRrr r rxryzKNamedExpressionScopeTest.test_named_expression_scope_10..rXrWrrr rr test_named_expression_scope_10s z7NamedExpressionScopeTest.test_named_expression_scope_10cs6fddtdD}||gd|ddS)Ncsg|] }|qSr r rr$r r rxryzKNamedExpressionScopeTest.test_named_expression_scope_11..r)rrWrXrYrrrrr rr test_named_expression_scope_11sz7NamedExpressionScopeTest.test_named_expression_scope_11cs:dfddtdD}||gd|ddS)Nrcsg|]}|qSr r rrr r rxryzKNamedExpressionScopeTest.test_named_expression_scope_17..rrrNrrr rr test_named_expression_scope_17sz7NamedExpressionScopeTest.test_named_expression_scope_17cCs0dd}|d}}||d||ddS)NcSs|Srrr rsr r r rlszENamedExpressionScopeTest.test_named_expression_scope_18..spamrXrOr rlrr}r r r test_named_expression_scope_18s  z7NamedExpressionScopeTest.test_named_expression_scope_18cCs0dd}|d}}||d||ddS)NcSs|Srrr rsr r r rlszENamedExpressionScopeTest.test_named_expression_scope_19..spamrXrOrr r r test_named_expression_scope_19s  z7NamedExpressionScopeTest.test_named_expression_scope_19cCs2dd}|d}d}||d||ddS)NcSs|Srrr rsr r r rlszENamedExpressionScopeTest.test_named_expression_scope_20..spamrXrsrOrr r r test_named_expression_scope_20s z7NamedExpressionScopeTest.test_named_expression_scope_20cCs4dd}|d}dd}||d||ddS)NcSs||Srrr rr r r rlszENamedExpressionScopeTest.test_named_expression_scope_21..spamrXrWrrYrOr rlrr}r r r test_named_expression_scope_21s z7NamedExpressionScopeTest.test_named_expression_scope_21cCs4dd}|d}dd}||d||ddS)NcSs||Srrr rr r r rlszENamedExpressionScopeTest.test_named_expression_scope_22..spamrXrWrrYrOrr r r test_named_expression_scope_22s z7NamedExpressionScopeTest.test_named_expression_scope_22cCs4dd}|d}dd}||d||ddS)NcSs||Srrr rr r r rlszENamedExpressionScopeTest.test_named_expression_scope_23..spamrXrW)rrRrYrOrr r r test_named_expression_scope_23s z7NamedExpressionScopeTest.test_named_expression_scope_23cs&dfdd}||ddS)NrNcs ddSrTr r rsr r rlszENamedExpressionScopeTest.test_named_expression_scope_24..spamrUrOrkr rsr test_named_expression_scope_24s z7NamedExpressionScopeTest.test_named_expression_scope_24cCs(i}d}t||i||dddS)Nz4a = 10 def spam(): global a (a := 20) spam()rRrU)rrP)r nsr r r r test_named_expression_scope_25s z7NamedExpressionScopeTest.test_named_expression_scope_25c Csd}d}d}d}dd|fdd|d fd d|fd d|d fd d|fd d|d fdd|fdd|d fg}|D]f\}}|j|dBi}t||||dd||dgdWdq1s0YqdS)Nz/[x := i for i in range(3) if (x := i) or not x]z([x := i for i in range(3) if x or not x]z*[x for i in range(3) if (x := i) or not x]zF[j for i in range(3) if x or not x for j in range(3) if (x := i)][:-3]z Rebind globalzx = 1; result = zRebind nonlocalzresult, x = (lambda x=1: (z, x))()z Filter globalzFilter nonlocalz Body globalz Body nonlocalz Nested globalzNested nonlocalr,r`rXresultr)r/rrP) r Z rebindingZ filter_refZbody_refZ nested_refr1r-r rr r r 6test_named_expression_variable_reuse_in_comprehensionss&      zONamedExpressionScopeTest.test_named_expression_variable_reuse_in_comprehensionscs:tfdd}z|tWdanda0dS)Ncs&fddtdDtdS)Ncsg|] }aqSr  GLOBAL_VARrv_sentinelr r rxryzZNamedExpressionScopeTest.test_named_expression_global_scope..f..rW)rrPrr r rr r fszFNamedExpressionScopeTest.test_named_expression_global_scope..fobjectrPrr rr rr "test_named_expression_global_scopes z;NamedExpressionScopeTest.test_named_expression_global_scopecs*tfdd}|tddS)Ncs,dfddtdDdS)Ncsg|] }qSr r r)rrr r rx#ryzlNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword..f..rWrr rrr r!szXNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword..frrr rr 4test_named_expression_global_scope_no_global_keywordszMNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keywordcstfdd}|dS)Ncs(dfdd}|dS)NcsfddtdDdS)Ncsg|] }qSr r r nonlocal_varrr r rx.ryzgNamedExpressionScopeTest.test_named_expression_nonlocal_scope..f..g..rWrr rr r g,szSNamedExpressionScopeTest.test_named_expression_nonlocal_scope..f..grO)rrrr r*szHNamedExpressionScopeTest.test_named_expression_nonlocal_scope..frrr rr $test_named_expression_nonlocal_scope(sz=NamedExpressionScopeTest.test_named_expression_nonlocal_scopecstfdd}|dS)Ncs&d}fdd}||ddS)NcsfddtdDdS)Ncsg|] }qSr r rrr r rx8ryz{NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword..f..g..rWrr rrr r7szgNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword..f..grO)rrrr r r5s z\NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword..frrr rr 8test_named_expression_nonlocal_scope_no_nonlocal_keyword3szQNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keywordcsXdgd}fdd|D}|dtt|D]\}}||||q6dS)NrW)rWrXrYrc3s|]}|VqdSrrr rrRrr r r@ryzQNamedExpressionScopeTest.test_named_expression_scope_in_genexp..r)Z assertNotInlocals enumeraterP)r rZgenexpidxelemr rr %test_named_expression_scope_in_genexp=s z>NamedExpressionScopeTest.test_named_expression_scope_in_genexpN)rIrJrKrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r rLs4               r__main__) rLZ test.supportrrZTestCaserrMrrImainr r r r s _h|