
    daf}v                         d dl Z da G d de j                        Z G d de j                        Z G d de j                        Zedk(  r e j                          yy)	    Nc                       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y)NamedExpressionInvalidTestc                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzx := 0invalid syntaxassertRaisesRegexSyntaxErrorexecselfcodes     6/root/Python-3.12.4/Lib/test/test_named_expressions.py test_named_expression_invalid_01z;NamedExpressionInvalidTest.test_named_expression_invalid_01   s9    ##K1AB 	r2	 	 	   09c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz
x = y := 0r   r   r   s     r    test_named_expression_invalid_02z;NamedExpressionInvalidTest.test_named_expression_invalid_02   s9    ##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz	y := f(x)r   r   r   s     r    test_named_expression_invalid_03z;NamedExpressionInvalidTest.test_named_expression_invalid_03   s9    ##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzy0 = y1 := f(x)r   r   r   s     r    test_named_expression_invalid_04z;NamedExpressionInvalidTest.test_named_expression_invalid_04   s9    $##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz((a, b) := (1, 2))z,cannot use assignment expressions with tupler   r   s     r    test_named_expression_invalid_06z;NamedExpressionInvalidTest.test_named_expression_invalid_06   s9    '##K1_` 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzdef spam(a = b := 42): passr   r   r   s     r    test_named_expression_invalid_07z;NamedExpressionInvalidTest.test_named_expression_invalid_07%   s9    0##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzdef spam(a: b := 42 = 5): passr   r   r   s     r    test_named_expression_invalid_08z;NamedExpressionInvalidTest.test_named_expression_invalid_08+   s9    3##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzspam(a=b := 'c')r   r   r   s     r    test_named_expression_invalid_09z;NamedExpressionInvalidTest.test_named_expression_invalid_091   s9    %##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzspam(x = y := f(x))r   r   r   s     r    test_named_expression_invalid_10z;NamedExpressionInvalidTest.test_named_expression_invalid_107   s9    (##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzspam(a=1, b := 2),positional argument follows keyword argumentr   r   s     r    test_named_expression_invalid_11z;NamedExpressionInvalidTest.test_named_expression_invalid_11=   s;    &##K:< 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY wNzspam(a=1, (b := 2))r"   r   r   s     r    test_named_expression_invalid_12z;NamedExpressionInvalidTest.test_named_expression_invalid_12D   ;    (##K:< 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY wr%   r   r   s     r    test_named_expression_invalid_13z;NamedExpressionInvalidTest.test_named_expression_invalid_13K   r'   r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz(x := lambda: y := 1)r   r   r   s     r    test_named_expression_invalid_14z;NamedExpressionInvalidTest.test_named_expression_invalid_14R   s9    *##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz(lambda: x := 1)z-cannot use assignment expressions with lambdar   r   s     r    test_named_expression_invalid_15z;NamedExpressionInvalidTest.test_named_expression_invalid_15X   s;    %##K;= 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz[i + 1 for i in i := [1,2]]r   r   r   s     r    test_named_expression_invalid_16z;NamedExpressionInvalidTest.test_named_expression_invalid_16_   s9    ,##K1AB 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz-[i := 0, j := 1 for i, j in [(1, 2), (3, 4)]]z;did you forget parentheses around the comprehension target?r   r   s     r    test_named_expression_invalid_17z;NamedExpressionInvalidTest.test_named_expression_invalid_17e   s<    >##KMO 	r2	 	 	r   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)NzNclass Foo():
            [(42, 1 + ((( j := i )))) for i in range(5)]
        zKassignment expression within a comprehension cannot be used in a class bodyr   r   s     r   +test_named_expression_invalid_in_class_bodyzFNamedExpressionInvalidTest.test_named_expression_invalid_in_class_bodyl   s@     ##KY[ 	r2	 	 	r   c           	         g d}|D ]  \  }}dD ]  \  }}|j                  ||      }| j                  |||      5  | j                  t              5  t	        |i        d d d        | j                  t              5  t	        |i i        d d d        t	        d| i        d d d          y # 1 sw Y   PxY w# 1 sw Y   1xY w# 1 sw Y   xY w)N))zComplex expression: cz2{0}(c := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: dz2{0}(d := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: ez2{0}(e := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: fz2{0}(f := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: gz2{0}(g := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: hz2{0}(h := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: iz2{0}(i := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})zComplex expression: jz2{0}(j := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})())[]){}caselparrparlambda: )formatsubTestassertRaises	NameErrorr
   )r   cases	test_caser   r>   r?   s         r   8test_named_expression_valid_rebinding_iteration_variablezSNamedExpressionInvalidTest.test_named_expression_valid_rebinding_iteration_variableu   s    
&  % 	0OItB 0
d{{4.\\yt$\G 	0
 **95 'T2'**95 +T2r*+8D6*B/	0 	00	0' '+ +	0 	0s;   CB-	C;B9		C-B62C9C>CCc           	      
   ddg}|D ]  \  }}}d| d}dD ]  \  }}|j                  ||      }| j                  |||      5  | j                  t        |      5  t	        |i        d d d        | j                  t        |      5  t	        |i i        d d d        | j                  t        |      5  t	        d| i        d d d        d d d          y # 1 sw Y   pxY w# 1 sw Y   PxY w# 1 sw Y   .xY w# 1 sw Y   xY w)N)Complex expression: aaz2{0}(a := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1})Complex expression: bbz2{0}(b := 1) for a, (*b, c[d+e::f(g)], h.i) in j{1}Fassignment expression cannot rebind comprehension iteration variable ''r5   r<   r@   )rA   rB   r   r	   r
   )r   rE   rF   targetr   msgr>   r?   s           r   :test_named_expression_invalid_rebinding_iteration_variablezUNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_iteration_variable   s$   
FF	
 (- 	4#IvtZ[aZbbcdCB 4
d{{4.\\yt$\G 
4
 //SA 'T2'//SA +T2r*+//SA 4xv.34
4 
44	4' '+ +4 4
4 
4sT   C9C	&C9C!	C90C-	 C9CC9!C*&C9-C62C99Dc                    g d}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N))Local reuseiz[i := 0 for i in range(5)])Nested reusejz0[[(j := 0) for i in range(5)] for j in range(5)])Reuse inner loop targetrV   z.[(j := 0) for i in range(5) for j in range(5)])Unpacking reuserT   z[i := 0 for i, j in [(0, 1)]])Reuse in loop conditionrT   z#[i+1 for i in range(5) if (i := 0)])Unreachable reuserT   z#[False or (i:=0) for i in range(5)])Unreachable nested reuserT   z?[(i, j) for i in range(5) for j in range(5) if True or (i:=10)]rM   rN   r=   r@   rB   r   r	   r
   r   rE   r=   rO   r   rP   s         r   Mtest_named_expression_invalid_rebinding_list_comprehension_iteration_variablezhNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_iteration_variable   s    	
 #( 	0D&$Z[aZbbcdC4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0R   CB7
C(C6CC$C7C <CCCCCC$	c                    ddg}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)Inner reuserV   z3[i for i in range(5) if (j := 0) for j in range(5)])Inner unpacking reuserV   z6[i for i in range(5) if (j := 0) for j, k in [(0, 1)]]Ecomprehension inner loop cannot rebind assignment expression target 'rN   r\   r@   r]   r^   s         r   Etest_named_expression_invalid_rebinding_list_comprehension_inner_loopz`NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_inner_loop       Wd
 #( 	0D&$YZ`YaabcC4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0r`   c                    g d}d}|D ]  \  }}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)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\   r@   r]   r   rE   rP   r=   r   s        r   Dtest_named_expression_invalid_list_comprehension_iterable_expressionz_NamedExpressionInvalidTest.test_named_expression_invalid_list_comprehension_iterable_expression       

 \ 	0JD$4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0R   CB2C#B>1CC
C2B;7C>CC
CCC	c                    g d}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)	)rS   rT   z{i := 0 for i in range(5)})rU   rV   z0{{(j := 0) for i in range(5)} for j in range(5)})rW   rV   z.{(j := 0) for i in range(5) for j in range(5)})rX   rT   z{i := 0 for i, j in {(0, 1)}})rY   rT   z#{i+1 for i in range(5) if (i := 0)})rZ   rT   z#{False or (i:=0) for i in range(5)})r[   rT   z?{(i, j) for i in range(5) for j in range(5) if True or (i:=10)})rI   rJ   z.{(a := 1) for a, (*b, c[d+e::f(g)], h.i) in j})rK   rL   z.{(b := 1) for a, (*b, c[d+e::f(g)], h.i) in j}rM   rN   r\   r@   r]   r^   s         r   Ltest_named_expression_invalid_rebinding_set_comprehension_iteration_variablezgNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_iteration_variable   s    
 #( 	0D&$Z[aZbbcdC4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0r`   c                    ddg}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)rb   rV   z3{i for i in range(5) if (j := 0) for j in range(5)})rc   rV   z6{i for i in range(5) if (j := 0) for j, k in {(0, 1)}}rd   rN   r\   r@   r]   r^   s         r   Dtest_named_expression_invalid_rebinding_set_comprehension_inner_loopz_NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_inner_loop  rf   r`   c                    g d}d}|D ]  \  }}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)	)rh   z{i for i in (i := range(5))})ri   z"{i for i in (2, 3, i := range(5))})rj   z"{i for i in {2, 3, i := range(5)}})rk   z{i for i in (j := range(5))})rl   z'{i for i in (lambda:(j := range(5)))()})rm   z.{i for i in range(5) for j in (i := range(5))})rn   z){i for i in {j for j in (k := range(5))}})ro   z1{i for i in {j for j in range(5) if (j := True)}})rp   z,{i for i in {(j := True) for j in range(5)}}rq   r\   r@   r]   rr   s        r   Ctest_named_expression_invalid_set_comprehension_iterable_expressionz^NamedExpressionInvalidTest.test_named_expression_invalid_set_comprehension_iterable_expression  rt   ru   c                    g d}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N))z	Key reuserT   z{(i := 0): 1 for i in range(5)})zValue reuserT   z{1: (i := 0) for i in range(5)})z
Both reuserT   z&{(i := 0): (i := 0) for i in range(5)})rU   rV   z3{{(j := 0): 1 for i in range(5)} for j in range(5)})rW   rV   z1{(j := 0): 1 for i in range(5) for j in range(5)})zUnpacking key reuserT   z"{(i := 0): 1 for i, j in {(0, 1)}})zUnpacking value reuserT   z"{1: (i := 0) for i, j in {(0, 1)}})rY   rT   z&{i+1: 1 for i in range(5) if (i := 0)})rZ   rT   z({(False or (i:=0)): 1 for i in range(5)})r[   rT   z={i: j for i in range(5) for j in range(5) if True or (i:=10)})rI   rJ   z1{(a := 1): 1 for a, (*b, c[d+e::f(g)], h.i) in j})rK   rL   z1{(b := 1): 1 for a, (*b, c[d+e::f(g)], h.i) in j}rM   rN   r\   r@   r]   r^   s         r   Mtest_named_expression_invalid_rebinding_dict_comprehension_iteration_variablezhNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_dict_comprehension_iteration_variable-  s    
$ #( 	0D&$Z[aZbbcdC4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0r`   c                    ddg}|D ]  \  }}}d| d}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)rb   rV   z6{i: 1 for i in range(5) if (j := 0) for j in range(5)})rc   rV   z9{i: 1 for i in range(5) if (j := 0) for j, k in {(0, 1)}}rd   rN   r\   r@   r]   r^   s         r   Etest_named_expression_invalid_rebinding_dict_comprehension_inner_loopz`NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_dict_comprehension_inner_loopJ  s    Zg
 #( 	0D&$YZ`YaabcC4( 0++K= #rN#++K= 'r2&'++K= 08D6*B/00 0	0# #' '0 00 0r`   c                    g d}d}|D ]  \  }}| j                  |      5  | j                  t        |      5  t        |i        d d d        | j                  t        |      5  t        |i i        d d d        | j                  t        |      5  t        d| i        d d d        d d d         y # 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)N)	)rh   z{i: 1 for i in (i := range(5))})ri   z%{i: 1 for i in (2, 3, i := range(5))})rj   z%{i: 1 for i in [2, 3, i := range(5)]})rk   z{i: 1 for i in (j := range(5))})rl   z*{i: 1 for i in (lambda:(j := range(5)))()})rm   z1{i: 1 for i in range(5) for j in (i := range(5))})rn   z/{i: 1 for i in {j: 2 for j in (k := range(5))}})ro   z7{i: 1 for i in {j: 2 for j in range(5) if (j := True)}})rp   z/{i: 1 for i in {(j := True) for j in range(5)}}rq   r\   r@   r]   rr   s        r   Dtest_named_expression_invalid_dict_comprehension_iterable_expressionz_NamedExpressionInvalidTest.test_named_expression_invalid_dict_comprehension_iterable_expressionY  rt   ru   c                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nzqclass Foo:
            def bar(self):
                [[(__x:=2) for _ in range(2)] for __x in range(2)]
        zJassignment expression cannot rebind comprehension iteration variable '__x'r   r   s     r   5test_named_expression_invalid_mangled_class_variableszPNamedExpressionInvalidTest.test_named_expression_invalid_mangled_class_variableso  s@    
 ##KXZ 	r2	 	 	r   N) __name__
__module____qualname__r   r   r   r   r   r   r   r   r    r#   r&   r)   r+   r-   r/   r1   r3   rG   rQ   r_   re   rs   rw   ry   r{   r}   r   r   r        r   r   r      s    #0J440*00,0400,0:00,r   r   c                   x    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y)NamedExpressionAssignmentTestc                 0    dx} | j                  |d       y )N
   assertEqualr   rJ   s     r   #test_named_expression_assignment_01zANamedExpressionAssignmentTest.test_named_expression_assignment_01|  s    Br   c                 4    d}|x} | j                  |d       y N   r   r   s     r   #test_named_expression_assignment_02zANamedExpressionAssignmentTest.test_named_expression_assignment_02  s    Br   c                 0    dx} | j                  |d       y )N   r   )r   totals     r   #test_named_expression_assignment_03zANamedExpressionAssignmentTest.test_named_expression_assignment_03  s    "r   c                 0    dx} | j                  |d       y )N      r   r   )r   infos     r   #test_named_expression_assignment_04zANamedExpressionAssignmentTest.test_named_expression_assignment_04  s    	y)r   c                 4    dx}df | j                  |d       y Nr   r   r   )r   xs     r   #test_named_expression_assignment_05zANamedExpressionAssignmentTest.test_named_expression_assignment_05  s    Ar   c                     dx}x}x} | j                  |d       | j                  |d       | j                  |d       y )Nr   r   )r   r   yzs       r   #test_named_expression_assignment_06zANamedExpressionAssignmentTest.test_named_expression_assignment_06  sB    VQ}q	AAAr   c                 0    dx} | j                  |d       y )Nr   r   r   )r   locs     r   #test_named_expression_assignment_07zANamedExpressionAssignmentTest.test_named_expression_assignment_07  s    f%r   c                 T    dx}r| j                  |d       y | j                  d       y )Neggs0variable was not assigned using named expressionr   failr   spams     r   #test_named_expression_assignment_08zANamedExpressionAssignmentTest.test_named_expression_assignment_08  s(    >4>T6*iiJKr   c                 R    dx}r| j                  |       y | j                  d       y )NTr   )
assertTruer   r   s     r   #test_named_expression_assignment_09zANamedExpressionAssignmentTest.test_named_expression_assignment_09  s$    !\T\OOD!iiJKr   c                 Z    dx}dk(  r| j                  |d       y | j                  d       y )Nr   r   r   )r   matchs     r   #test_named_expression_assignment_10zANamedExpressionAssignmentTest.test_named_expression_assignment_10  s+    KEBUB'iiJKr   c                     d }g d}|D cg c]  } ||      x}dkD  s||||z  f }}| j                  |g d       y c c}w )Nc                     | S Nr   rJ   s    r   r   zONamedExpressionAssignmentTest.test_named_expression_assignment_11.<locals>.spam      Hr   r   r   )r   r         ?)r   r   r   )r   r   r   r   r   r   
input_datar   r   ress         r   #test_named_expression_assignment_11zANamedExpressionAssignmentTest.test_named_expression_assignment_11  sO    	
$.EqQ<112D1ac{EEEF Fs
   A 
A c                     d }t        dd      D cg c]  } ||      x}||z  g }}| j                  |ddgddgddgddgg       y c c}w )Nc                     | S r   r   r   s    r   r   zONamedExpressionAssignmentTest.test_named_expression_assignment_12.<locals>.spam  r   r   r      r   r   r      ranger   r   r   r   r   r   s        r   #test_named_expression_assignment_12zANamedExpressionAssignmentTest.test_named_expression_assignment_12  s_    	,1!QK8qT!Wac"883x!SAs8aXFG 9s   A	c                 n    t        ddgx}      }| j                  |d       | j                  |ddg       y r   lenr   )r   lineslengths      r   #test_named_expression_assignment_13zANamedExpressionAssignmentTest.test_named_expression_assignment_13  s8    q!f_U%#1&r   c                     d}d}d}||||dz
  z  z  x}kD  r|dz
  |z  |z   |z  }||||dz
  z  z  x}kD  r| j                  |d       y)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):
        	   r   r   r   Nr   )r   rJ   nr   ds        r   #test_named_expression_assignment_14zANamedExpressionAssignmentTest.test_named_expression_assignment_14  so     Q1X%1&A#q1"A Q1X%1& 	Ar   c                 \    dx}r| j                  d       dx}r| j                  |d       y )NFzWhile body executed)r   r   r   s     r   #test_named_expression_assignment_15zANamedExpressionAssignmentTest.test_named_expression_assignment_15  s5    jajII+, jaj 	E"r   c           
          d\  }}t        d      D ci c]  }|x}|x}||z   x}z   |z
   }}| j                  |ddddddd	       y c c}w )
Nr      r   r   r            )r   r   r   r   r   r   r   )r   rJ   rL   __cfibs         r   #test_named_expression_assignment_16zANamedExpressionAssignmentTest.test_named_expression_assignment_16  sd    1?DQxHQq&!!a%ZQ0144HH!aA""EF Is   Ac                 f    dg}|dx}   }| j                  |d       | j                  ||d          y )Nr   r   r   )r   rJ   rL   elements       r   #test_named_expression_assignment_17zANamedExpressionAssignmentTest.test_named_expression_assignment_17  s:    CqDA'A!A$'r   c                      G d d      } |dgdgg      }|dx}dx}f   }| j                  |d       | j                  |d       | j                  ||j                  |   |          y )Nc                       e Zd Zd Zd Zy)]NamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalListc                     || _         y r   two_dimensional_list)r   r   s     r   __init__zfNamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalList.__init__  s
    ,@)r   c                 2    | j                   |d      |d      S )Nr   r   r   )r   indexs     r   __getitem__ziNamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalList.__getitem__  s     00q:58DDr   N)r   r   r   r   r   r   r   r   TwoDimensionalListr     s    AEr   r   r   r   r   )r   r   )r   r   rJ   rL   r   r   s         r   #test_named_expression_assignment_18zANamedExpressionAssignmentTest.test_named_expression_assignment_18  sw    	E 	E aSz*qDAQ$!J-AA!"8"8";A">?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   z  sc     
 #
*

&
L
L
L
GH' #G
(@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y)NamedExpressionScopeTestc                 x    d}| j                  t        d      5  t        |i i        d d d        y # 1 sw Y   y xY w)Nz!def spam():
    (a := 5)
print(a)zname 'a' is not defined)r   rD   r
   r   s     r   test_named_expression_scope_01z7NamedExpressionScopeTest.test_named_expression_scope_01  s=     ##I/HI 	r2	 	 	r   c                     d}t        d      D cg c]	  }||z   x} }}| j                  |g d       | j                  |d       y c c}w Nr   r   )r   r   r   r   r   r   r   )r   r   vpartial_sumss       r   test_named_expression_scope_02z7NamedExpressionScopeTest.test_named_expression_scope_02  sP    49!H=q**=='78# >   Ac                 t    t        fddD              }| j                  |       | j                  d       y )Nc              3   ,   K   | ]  }|xd k(    yw)r   Nr   ).0numlastNums     r   	<genexpr>zJNamedExpressionScopeTest.test_named_expression_scope_03.<locals>.<genexpr>	  s     ECc>7a/E   r   r   )anyr   r   )r   containsOner   s     @r   test_named_expression_scope_03z7NamedExpressionScopeTest.test_named_expression_scope_03  s/    E9EE$!$r   c                     d }t        dd      D cg c]  } ||      x}||z  g }}| j                  d       y c c}w )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_04.<locals>.spam  r   r   r   r   r   r   r   s        r   test_named_expression_scope_04z7NamedExpressionScopeTest.test_named_expression_scope_04  sF    	,1!QK8qT!Wac"88A 9s   =c                     d }g d}|D cg c]  } ||      x}dkD  s||||z  f }}| j                  |g d       | j                  d       y c c}w )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_05.<locals>.spam  r   r   r   r   r   r   r   r   s         r   test_named_expression_scope_05z7NamedExpressionScopeTest.test_named_expression_scope_05  s_    	
$.EqQ<112D1ac{EEEFA Fs
   A
Ac           	          t        d      D cg c]  }t        d      D cg c]  }|x} c} }}}| j                  |g dg dg       | j                  d       y c c}w c c}}w )Nr   r   r   r   r   r   )r   rV   rT   r   r   s        r   test_named_expression_scope_06z7NamedExpressionScopeTest.test_named_expression_scope_06  s[    6;Ah?58,a		,??y)45q! -?s   A$AA$A$c                 J    t        ddgx}       | j                  |ddg       y r   r   )r   r   s     r   test_named_expression_scope_07z7NamedExpressionScopeTest.test_named_expression_scope_07$  s&    aVOEA'r   c           	          d }d }t        d      D cg c]  } | ||x}      x}       }}| j                  |ddg       | j                  d       | j                  d       y c c}w )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.spam*  r   r   c                     | dz  S Nr   r   rL   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.eggs-      q5Lr   r   r   r   r   )r   r   r   hrL   rJ   r   s          r   test_named_expression_scope_08z7NamedExpressionScopeTest.test_named_expression_scope_08)  sp    		 16a91t1fa%A&99q!f%AA	 :s   A(c           	          d }d }t        d      D cg c]  } | ||x}      x}       }}| j                  |ddg       | j                  d       y c c}w )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.spam7  r   r   c                     | dz  S r  r   r  s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.eggs:  r  r   r   r   r   )r   r   r   r  rJ   r   s         r   test_named_expression_scope_09z7NamedExpressionScopeTest.test_named_expression_scope_096  s`    		 16a91t1fa%A&99q!f%A :s   Ac           	          t        d      D cg c]  }t        d      D cg c]  }dx} c}x}! }}}| j                  |ddgddgg       | j                  d       | j                  ddg       y c c}w c c}}w )Nr   r   r   )r   rV   rT   rJ   rL   r   s         r   test_named_expression_scope_10z7NamedExpressionScopeTest.test_named_expression_scope_10B  s    8=aA1U1X.!VQV..q.AA1v1v./AQF#	 /As   A:A5A:5A:c                     t        d      D cg c]  }|x} }}| j                  |g d       | j                  d       y c c}w )Nr   )r   r   r   r   r   r   r   )r   rT   rV   r   s       r   test_named_expression_scope_11z7NamedExpressionScopeTest.test_named_expression_scope_11I  sD    $Qx(!Avqv((o.A )s   Ac                     d}t        d      D cg c]	  }||z   x} }}| j                  |g d       | j                  |d       y c c}w r   r   )r   rL   rT   r   s       r   test_named_expression_scope_17z7NamedExpressionScopeTest.test_named_expression_scope_17O  sN    #(8,aAEzqz,,./B -r   c                 f    d } |dx}      }| j                  |d       | j                  |d       y )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_18.<locals>.spamW  r   r   r   r   r   r   rL   r   s       r   test_named_expression_scope_18z7NamedExpressionScopeTest.test_named_expression_scope_18V  s6    	 61la Ar   c                 f    d } |dx}      }| j                  |d       | j                  |d       y )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_19.<locals>.spam`  r   r   r   r   r$  s       r   test_named_expression_scope_19z7NamedExpressionScopeTest.test_named_expression_scope_19_  s6    	 FAna Ar   c                 h    d } |dx}      }| j                  |d       | j                  |d       y )Nc                     | S r   r   r   s    r   r   zENamedExpressionScopeTest.test_named_expression_scope_20.<locals>.spami  r   r   r   r   r   r$  s       r   test_named_expression_scope_20z7NamedExpressionScopeTest.test_named_expression_scope_20h  s7    	 1faa Ar   c                 j    d } |dx}d      }| j                  |d       | j                  |d       y )Nc                     | |z   S r   r   rJ   rL   s     r   r   zENamedExpressionScopeTest.test_named_expression_scope_21.<locals>.spamr  r  r   r   r   r  r   r   r   r   r   r   s       r   test_named_expression_scope_21z7NamedExpressionScopeTest.test_named_expression_scope_21q  s9    	 61Qa Ar   c                 j    d } |dx}d      }| j                  |d       | j                  |d       y )Nc                     | |z   S r   r   r.  s     r   r   zENamedExpressionScopeTest.test_named_expression_scope_22.<locals>.spam{  r  r   r   r   r  r   r   r/  s       r   test_named_expression_scope_22z7NamedExpressionScopeTest.test_named_expression_scope_22z  s9    	 FAq!a Ar   c                 j    d } |dx}d      }| j                  |d       | j                  |d       y )Nc                     | |z   S r   r   r.  s     r   r   zENamedExpressionScopeTest.test_named_expression_scope_23.<locals>.spam  r  r   r   r   )rL   rJ   r   r   r/  s       r   test_named_expression_scope_23z7NamedExpressionScopeTest.test_named_expression_scope_23  s9    	 1fa#a Ar   c                 F    dfd} |        | j                  d       y )Nr   c                      dx  y r   r   r   s   r   r   zENamedExpressionScopeTest.test_named_expression_scope_24.<locals>.spam  s
    WQr   r   r   )r   r   rJ   s     @r   test_named_expression_scope_24z7NamedExpressionScopeTest.test_named_expression_scope_24  s$    	 	Br   c                 P    i }d}t        ||i        | j                  |d   d       y )Nz4a = 10
def spam():
    global a
    (a := 20)
spam()rJ   r   )r
   r   )r   nsr   s      r   test_named_expression_scope_25z7NamedExpressionScopeTest.test_named_expression_scope_25  s0    
 	T2rC"%r   c                 V   d}d}d}d}dd| fdd| d	fd
d| fdd| d	fdd| fdd| d	fdd| fdd| d	fg}|D ]Z  \  }}| j                  |      5  i }t        ||       | j                  |d   d       | j                  |d   g d       d d d        \ y # 1 sw Y   gxY w)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 globalzx = 1; result = zRebind nonlocalzresult, x = (lambda x=1: (z, x))()zFilter globalzFilter nonlocalzBody globalzBody nonlocalzNested globalzNested nonlocalr\   r   r   resultr  )rB   r
   r   )	r   	rebinding
filter_refbody_ref
nested_refrE   r=   r   r;  s	            r   6test_named_expression_variable_reuse_in_comprehensionszONamedExpressionScopeTest.test_named_expression_variable_reuse_in_comprehensions  s    F	?
?]
 0<="<YKw OP 0=>"<ZL PQ.xj9: :8*GLM 0=>"<ZL PQ	
   	:JD$4( :T2  C!,  Hy9	: :	:: :s   ;BB(	c                 v     t                fd}	  |         j                  t               d ay # d aw xY w)Nc                  x    t        d      D  cg c]  } xa c}}  j                  t               y c c}} w Nr   )r   
GLOBAL_VARr   )_rG  r   sentinels     r   fzFNamedExpressionScopeTest.test_named_expression_global_scope.<locals>.f  s2    -21X68#Z#6Z2 7s   6objectr   rG  r   rJ  rI  s   ` @r   "test_named_expression_global_scopez;NamedExpressionScopeTest.test_named_expression_global_scope  s4    8	3	CZ2JJs   4 8c                 b     t                fd} |         j                  t        d        y )Nc                  n    d } t        d      D cg c]  }x}  c} j                  |        y c c}w rF  r   )rG  rH  r   rI  s     r   rJ  zXNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword.<locals>.f  s7    J-21X68#Z#6Z2 7s   2rK  rM  s   ` @r   4test_named_expression_global_scope_no_global_keywordzMNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword  s&    8	3 	
T*r   c                 6     t                fd} |        y )Nc                  J    d fd}  |         j                         y )Nc                  F    t        d      D  cg c]  } x c}  y c c} w rF  r   rH  nonlocal_varrI  s    r   gzSNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f.<locals>.g  s     388<a))<<   r   )rX  rW  r   rI  s    @r   rJ  zHNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f  s$    L= C\84r   rL  rM  s   ` @r   $test_named_expression_nonlocal_scopez=NamedExpressionScopeTest.test_named_expression_nonlocal_scope  s    8	5 	
r   c                 6     t                fd} |        y )Nc                  F    d } fd} |        j                  | d        y )Nc                  F    t        d      D  cg c]  } x} c}  y c c} w rF  rU  rV  s     r   rX  zgNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f.<locals>.g  s     388<a))<<rY  r   )rW  rX  r   rI  s     r   rJ  z\NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f  s"    L=C\40r   rZ  rM  s   ` @r   8test_named_expression_nonlocal_scope_no_nonlocal_keywordzQNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword  s    8	1 	
r   c                     dg d}fd|D        }| j                  dt                      t        |      D ]  \  }}| j                  |||   z           y )Nr   )r   r   r   r   c              3   ,   K   | ]  }|z   x  y wr   r   )r   rT   rJ   r   s     r   r   zQNamedExpressionScopeTest.test_named_expression_scope_in_genexp.<locals>.<genexpr>  s     (q1u*!*(r  r   )assertNotInlocals	enumerater   )r   rL   genexpidxelemrJ   r   s        @@r   %test_named_expression_scope_in_genexpz>NamedExpressionScopeTest.test_named_expression_scope_in_genexp  sY    (a(fh'"6* 	/ICT1S6A:.	/r   c                 t      G  fdd      } |       j                           j                  t        d       y )Nc                       e Zd Z fdZy)ONamedExpressionScopeTest.test_named_expression_scope_mangled_names.<locals>.Fooc                     da dD cg c]  }dxa  c}} j                  t         d       dD cg c]  }dxa  c}} j                  t         d       y c c}}w c c}}w )Nr   )r   r   )r   r   )_Foo__x1r   )self_rJ   rm  r   s      r   rJ  zQNamedExpressionScopeTest.test_named_expression_scope_mangled_names.<locals>.Foo.f  sX    (+,1Q,  q)$'(q(  q) -(s
   AAN)r   r   r   rJ  )r   s   r   Foork    s    *r   ro  r   )rJ  r   rm  )r   ro  s   ` r   )test_named_expression_scope_mangled_nameszBNamedExpressionScopeTest.test_named_expression_scope_mangled_names  s*    	* 	* 		1%r   N)r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r!  r%  r(  r+  r0  r3  r6  r9  r<  rC  rN  rQ  r[  r_  rh  rp  r   r   r   r   r     s    $%"(

$  
&:8+	/&r   r   __main__)unittestrG  TestCaser   r   r   r   mainr   r   r   <module>ru     sh    
r!2!2 rjy@H$5$5 y@zE&x00 E&N zHMMO r   