a
    zeP                     @   sb   d dl Z d dlmZ daG dd de jZG dd de jZG dd de jZed	kr^e 	  dS )
    N)use_old_parserc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zee d)d*d+ Zd,d- Zee d)d.d/ Zd0S )1NamedExpressionInvalidTestc                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzx := 0invalid syntaxassertRaisesRegexSyntaxErrorexecselfcode r   1/usr/lib/python3.9/test/test_named_expressions.py test_named_expression_invalid_01   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_01c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz
x = y := 0r   r   r	   r   r   r    test_named_expression_invalid_02   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_02c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz	y := f(x)r   r   r	   r   r   r    test_named_expression_invalid_03   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_03c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzy0 = y1 := f(x)r   r   r	   r   r   r    test_named_expression_invalid_04   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_04c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz((a, b) := (1, 2))z,cannot use assignment expressions with tupler   r	   r   r   r    test_named_expression_invalid_06    s    z;NamedExpressionInvalidTest.test_named_expression_invalid_06c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzdef spam(a = b := 42): passr   r   r	   r   r   r    test_named_expression_invalid_07&   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_07c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzdef spam(a: b := 42 = 5): passr   r   r	   r   r   r    test_named_expression_invalid_08,   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_08c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzspam(a=b := 'c')r   r   r	   r   r   r    test_named_expression_invalid_092   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_09c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzspam(x = y := f(x))r   r   r	   r   r   r    test_named_expression_invalid_108   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_10c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nzspam(a=1, b := 2),positional argument follows keyword argumentr   r	   r   r   r    test_named_expression_invalid_11>   s
    z;NamedExpressionInvalidTest.test_named_expression_invalid_11c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S Nzspam(a=1, (b := 2))r   r   r	   r   r   r    test_named_expression_invalid_12E   s
    z;NamedExpressionInvalidTest.test_named_expression_invalid_12c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S r   r   r	   r   r   r    test_named_expression_invalid_13L   s
    z;NamedExpressionInvalidTest.test_named_expression_invalid_13c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz(x := lambda: y := 1)r   r   r	   r   r   r    test_named_expression_invalid_14S   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_14c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz(lambda: x := 1)z-cannot use assignment expressions with lambdar   r	   r   r   r    test_named_expression_invalid_15Y   s
    z;NamedExpressionInvalidTest.test_named_expression_invalid_15c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz[i + 1 for i in i := [1,2]]r   r   r	   r   r   r    test_named_expression_invalid_16`   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_16c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz-[i := 0, j := 1 for i, j in [(1, 2), (3, 4)]]r   r   r	   r   r   r    test_named_expression_invalid_17f   s    z;NamedExpressionInvalidTest.test_named_expression_invalid_17c                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )NzNclass Foo():
            [(42, 1 + ((( j := i )))) for i in range(5)]
        zKassignment expression within a comprehension cannot be used in a class bodyr   r	   r   r   r   +test_named_expression_invalid_in_class_bodyl   s
    zFNamedExpressionInvalidTest.test_named_expression_invalid_in_class_bodyc              
   C   s   g d}|D ]z\}}}d| d}| j |dH | t| t|i i  W d    n1 s^0    Y  W d    q1 s|0    Y  qd S )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 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 ''casesubTestr   r   r   r
   casesr-   targetr   msgr   r   r   Mtest_named_expression_invalid_rebinding_list_comprehension_iteration_variableu   s    
zhNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_iteration_variablec              
   C   s   ddg}|D ]\}}}d| d}| j |d | t| t|i  W d    n1 s\0    Y  | t| t|i i  W d    n1 s0    Y  | t|  td| i  W d    n1 s0    Y  W d    q1 s0    Y  qd S )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.   r0   r   r   r   Etest_named_expression_invalid_rebinding_list_comprehension_inner_loop   s    (*z`NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_inner_loopc              
   C   s   g d}d}|D ]\}}| j |d | t| t|i  W d    n1 sR0    Y  | t| t|i i  W d    n1 s0    Y  | t|  td| i  W d    n1 s0    Y  W d    q1 s0    Y  qd S )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,   r8   r.   r
   r1   r3   r-   r   r   r   r   Dtest_named_expression_invalid_list_comprehension_iterable_expression   s    (*z_NamedExpressionInvalidTest.test_named_expression_invalid_list_comprehension_iterable_expressionz:Old parser does not support walruses in set comprehensionsc              
   C   s   g d}|D ]z\}}}d| d}| j |dH | t| t|i i  W d    n1 s^0    Y  W d    q1 s|0    Y  qd S )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.   r0   r   r   r   Ltest_named_expression_invalid_rebinding_set_comprehension_iteration_variable   s    
zgNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_iteration_variablec              
   C   s   ddg}|D ]\}}}d| d}| j |d | t| t|i  W d    n1 s\0    Y  | t| t|i i  W d    n1 s0    Y  | t|  td| i  W d    n1 s0    Y  W d    q1 s0    Y  qd S )N)r5   r$   z3{i for i in range(5) if (j := 0) for j in range(5)})r6   r$   z6{i for i in range(5) if (j := 0) for j, k in {(0, 1)}}r7   r+   r,   r8   r.   r0   r   r   r   Dtest_named_expression_invalid_rebinding_set_comprehension_inner_loop   s    (*z_NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_inner_loopc              
   C   s   g d}d}|D ]\}}| j |d | t| t|i  W d    n1 sR0    Y  | t| t|i i  W d    n1 s0    Y  | t|  td| i  W d    n1 s0    Y  W d    q1 s0    Y  qd S )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))}})rA   z1{i for i in {j for j in range(5) if (j := True)}})rB   z,{i for i in {(j := True) for j in range(5)}}rC   r,   r8   r.   rD   r   r   r   Ctest_named_expression_invalid_set_comprehension_iterable_expression   s    (*z^NamedExpressionInvalidTest.test_named_expression_invalid_set_comprehension_iterable_expressionN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r4   r9   rE   unittestZskipIfr   rF   rG   rH   r   r   r   r   r      s2   	
r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"NamedExpressionAssignmentTestc                 C   s   d } |  |d d S )N
   assertEqualr
   ar   r   r   #test_named_expression_assignment_01   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_01c                 C   s   d}| } |  |d d S N   rO   rQ   r   r   r   #test_named_expression_assignment_02   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_02c                 C   s   dd  } |  |d d S )N         rO   )r
   totalr   r   r   #test_named_expression_assignment_03   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_03c                 C   s   d } |  |d d S )NrW   rX   rY   rO   )r
   infor   r   r   #test_named_expression_assignment_04   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_04c                 C   s   d }df |  |d d S NrW   rX   rO   )r
   xr   r   r   #test_named_expression_assignment_05   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_05c                 C   s8   d } } } |  |d |  |d |  |d d S )Nr   rO   )r
   r`   yzr   r   r   #test_named_expression_assignment_06   s    zANamedExpressionAssignmentTest.test_named_expression_assignment_06c                 C   s   d } |  |d d S )NrW   rX   rW   rX   )rW   rX   rO   )r
   locr   r   r   #test_named_expression_assignment_07  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_07c                 C   s$   d }r|  |d n
| d d S )Neggs0variable was not assigned using named expression)rP   failr
   spamr   r   r   #test_named_expression_assignment_08  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_08c                 C   s"   d }r|  | n
| d d S )NTri   )
assertTruerj   rk   r   r   r   #test_named_expression_assignment_09  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_09c                 C   s   d }dkrn
|  d d S )NrN   ri   )rj   )r
   matchr   r   r   #test_named_expression_assignment_10  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_10c                    s8   dd  g d} fdd|D }|  |g d d S )Nc                 S   s   | S Nr   rR   r   r   r   rl     s    zONamedExpressionAssignmentTest.test_named_expression_assignment_11.<locals>.spamr\   c                    s*   g | ]"} | d kr|| fqS r   r   .0r`   rl   rb   r   r   
<listcomp>      zUNamedExpressionAssignmentTest.test_named_expression_assignment_11.<locals>.<listcomp>)rW   rW         ?)rX   rX   r{   )rY   rY   r{   rO   r
   Z
input_dataresr   rw   r   #test_named_expression_assignment_11  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_11c                    sJ   dd   fddt ddD }| |ddgddgd	dgd
dgg d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl   $  s    zONamedExpressionAssignmentTest.test_named_expression_assignment_12.<locals>.spamc                    s    g | ]} | | gqS r   r   ru   rw   r   r   rx   &  ry   zUNamedExpressionAssignmentTest.test_named_expression_assignment_12.<locals>.<listcomp>rW      r{   rX   rY      rangerP   r
   r}   r   rw   r   #test_named_expression_assignment_12#  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_12c                 C   s0   t ddg }}| |d | |ddg d S r_   lenrP   )r
   lineslengthr   r   r   #test_named_expression_assignment_13*  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_13c                 C   sJ   d}d}d}||||d    }kr:|d | | | }q|  |d d S )N	   rX   rY   rW   rO   )r
   rR   nr`   dr   r   r   #test_named_expression_assignment_140  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_14c                 C   s   d }r
q |  |d d S )NFrO   rQ   r   r   r   #test_named_expression_assignment_15@  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_15c              
      s@   d\  fddt dD }| |ddddd	d
d d S )Nre   c                    s*   i | ]"}         qS r   r   )rv   __rR   bcr   r   
<dictcomp>H  ry   zUNamedExpressionAssignmentTest.test_named_expression_assignment_16.<locals>.<dictcomp>   rX   rY   r            )rW   rX   rY   r   r   r   r   )r
   Zfibr   r   r   #test_named_expression_assignment_16F  s    zANamedExpressionAssignmentTest.test_named_expression_assignment_16N)rI   rJ   rK   rS   rV   r[   r^   ra   rd   rg   rm   ro   rq   r~   r   r   r   r   r   r   r   r   r   rM      s    rM   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6NamedExpressionScopeTestc                 C   s@   d}|  td t|i i  W d    n1 s20    Y  d S )Nz!def spam():
    (a := 5)
print(a)zname 'a' is not defined)r   	NameErrorr   r	   r   r   r   test_named_expression_scope_01N  s    z7NamedExpressionScopeTest.test_named_expression_scope_01c                    s:   d  fddt dD }| |g d |  d d S )Nr   c                    s   g | ]} |   qS r   r   )rv   vrZ   r   r   rx   X  ry   zKNamedExpressionScopeTest.test_named_expression_scope_02.<locals>.<listcomp>r   r   rW   rY   r   rN   rN   r   )r
   Zpartial_sumsr   r   r   test_named_expression_scope_02V  s    z7NamedExpressionScopeTest.test_named_expression_scope_02c                    s0   t  fdddD }| | |  d d S )Nc                 3   s   | ]}|  d kV  qdS )rW   Nr   )rv   numZlastNumr   r   	<genexpr>^  ry   zJNamedExpressionScopeTest.test_named_expression_scope_03.<locals>.<genexpr>r\   rW   )anyrn   rP   )r
   ZcontainsOner   r   r   test_named_expression_scope_03]  s    
z7NamedExpressionScopeTest.test_named_expression_scope_03c                    s2   dd   fddt ddD }| d d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl   d  s    zENamedExpressionScopeTest.test_named_expression_scope_04.<locals>.spamc                    s    g | ]} | | gqS r   r   ru   rw   r   r   rx   f  ry   zKNamedExpressionScopeTest.test_named_expression_scope_04.<locals>.<listcomp>rW   r   r   r   r   r   rw   r   test_named_expression_scope_04c  s    z7NamedExpressionScopeTest.test_named_expression_scope_04c                    sD   dd  g d} fdd|D }|  |g d |  d d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl   k  s    zENamedExpressionScopeTest.test_named_expression_scope_05.<locals>.spamr\   c                    s*   g | ]"} | d kr|| fqS rt   r   ru   rw   r   r   rx   n  ry   zKNamedExpressionScopeTest.test_named_expression_scope_05.<locals>.<listcomp>rz   rY   rO   r|   r   rw   r   test_named_expression_scope_05j  s
    z7NamedExpressionScopeTest.test_named_expression_scope_05c                    s>    fddt dD }| |g dg dg |  d d S )Nc                    s"   g | ]} fd dt dD qS )c                    s   g | ]}|  qS r   r   rv   r"   rl   r   r   rx   t  ry   zVNamedExpressionScopeTest.test_named_expression_scope_06.<locals>.<listcomp>.<listcomp>rY   r   rv   r$   r   r   r   rx   t  ry   zKNamedExpressionScopeTest.test_named_expression_scope_06.<locals>.<listcomp>rX   r   rW   rX   r   r   r   r   r   test_named_expression_scope_06s  s    z7NamedExpressionScopeTest.test_named_expression_scope_06c                 C   s$   t ddg } | |ddg d S r_   r   )r
   r   r   r   r   test_named_expression_scope_07y  s    z7NamedExpressionScopeTest.test_named_expression_scope_07c                    sX   dd dd  fddt dD }| |ddg |  d | d	 d S )
Nc                 S   s   | S rr   r   rs   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.spamc                 S   s   | d S NrX   r   r   r   r   r   rh     s    zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.eggsc                    s    g | ]}|   qS r   r   rv   hrR   r   rh   rl   r   r   rx     ry   zKNamedExpressionScopeTest.test_named_expression_scope_08.<locals>.<listcomp>rX   r   rW   r   r   r   r   r   test_named_expression_scope_08~  s    z7NamedExpressionScopeTest.test_named_expression_scope_08c                    sJ   dd dd  fddt dD }| |ddg |  d d S )	Nc                 S   s   | S rr   r   rs   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.spamc                 S   s   | d S r   r   r   r   r   r   rh     s    zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.eggsc                    s    g | ]}|    qS r   r   r   rR   rh   rl   r   r   rx     ry   zKNamedExpressionScopeTest.test_named_expression_scope_09.<locals>.<listcomp>rX   r   r   r   r   r   r   test_named_expression_scope_09  s
    z7NamedExpressionScopeTest.test_named_expression_scope_09c                    sP    fddt dD }| |ddgddgg |  d | ddg d S )Nc                    s&   g | ]} fd dt dD  qS )c                    s   g | ]}d   qS )rW   r   r   rs   r   r   rx     ry   zVNamedExpressionScopeTest.test_named_expression_scope_10.<locals>.<listcomp>.<listcomp>rX   r   r   rR   r   r   r   rx     ry   zKNamedExpressionScopeTest.test_named_expression_scope_10.<locals>.<listcomp>rX   rW   r   r   r   r   r   test_named_expression_scope_10  s    z7NamedExpressionScopeTest.test_named_expression_scope_10c                    s6    fddt dD }| |g d |  d d S )Nc                    s   g | ]}|  qS r   r   r   r$   r   r   rx     ry   zKNamedExpressionScopeTest.test_named_expression_scope_11.<locals>.<listcomp>r   )r   rW   rX   rY   r   r   r   r   r   r   r   test_named_expression_scope_11  s    z7NamedExpressionScopeTest.test_named_expression_scope_11c                    s:   d  fddt dD }| |g d |  d d S )Nr   c                    s   g | ]}|    qS r   r   r   r   r   r   rx     ry   zKNamedExpressionScopeTest.test_named_expression_scope_17.<locals>.<listcomp>r   r   rN   r   r   r   r   r   test_named_expression_scope_17  s    z7NamedExpressionScopeTest.test_named_expression_scope_17c                 C   s0   dd }|d }}|  |d |  |d d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_18.<locals>.spamrX   rO   r
   rl   r   r}   r   r   r   test_named_expression_scope_18  s    z7NamedExpressionScopeTest.test_named_expression_scope_18c                 C   s0   dd }|d }}|  |d |  |d d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_19.<locals>.spamrX   rO   r   r   r   r   test_named_expression_scope_19  s    z7NamedExpressionScopeTest.test_named_expression_scope_19c                 C   s2   dd }|d }d}|  |d |  |d d S )Nc                 S   s   | S rr   r   rs   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_20.<locals>.spamrX   rs   rO   r   r   r   r   test_named_expression_scope_20  s    z7NamedExpressionScopeTest.test_named_expression_scope_20c                 C   s4   dd }|d }dd}|  |d |  |d d S )Nc                 S   s   | | S rr   r   r   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_21.<locals>.spamrX   rW   r   rY   rO   r
   rl   r   r}   r   r   r   test_named_expression_scope_21  s    z7NamedExpressionScopeTest.test_named_expression_scope_21c                 C   s4   dd }|d }dd}|  |d |  |d d S )Nc                 S   s   | | S rr   r   r   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_22.<locals>.spamrX   rW   r   rY   rO   r   r   r   r   test_named_expression_scope_22  s    z7NamedExpressionScopeTest.test_named_expression_scope_22c                 C   s4   dd }|d }dd}|  |d |  |d d S )Nc                 S   s   | | S rr   r   r   r   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_23.<locals>.spamrX   rW   )r   rR   rY   rO   r   r   r   r   test_named_expression_scope_23  s    z7NamedExpressionScopeTest.test_named_expression_scope_23c                    s&   d  fdd}|  |   d d S )NrN   c                      s   d   d S rT   r   r   rs   r   r   rl     s    zENamedExpressionScopeTest.test_named_expression_scope_24.<locals>.spamrU   rO   rk   r   rs   r   test_named_expression_scope_24  s    z7NamedExpressionScopeTest.test_named_expression_scope_24c                 C   s(   i }d}t ||i  | |d d d S )Nz4a = 10
def spam():
    global a
    (a := 20)
spam()rR   rU   )r   rP   )r
   nsr   r   r   r   test_named_expression_scope_25  s    z7NamedExpressionScopeTest.test_named_expression_scope_25c           	      C   s   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 ]f\}}| j |dB i }t|| | |d d | |d g d W d    q1 s0    Y  qd S )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`   rX   resultr   )r/   r   rP   )	r
   Z	rebindingZ
filter_refZbody_refZ
nested_refr1   r-   r   r   r   r   r   6test_named_expression_variable_reuse_in_comprehensions  s&    

zONamedExpressionScopeTest.test_named_expression_variable_reuse_in_comprehensionsc                    s:   t   fdd}z|   t W d and a0 d S )Nc                      s&   fddt dD   t d S )Nc                    s   g | ]}  a qS r   
GLOBAL_VARrv   _sentinelr   r   rx     ry   zZNamedExpressionScopeTest.test_named_expression_global_scope.<locals>.f.<locals>.<listcomp>rW   )r   rP   r   r   r
   r   r   r   f  s    zFNamedExpressionScopeTest.test_named_expression_global_scope.<locals>.fobjectrP   r   r
   r   r   r   r   "test_named_expression_global_scope  s    z;NamedExpressionScopeTest.test_named_expression_global_scopec                    s*   t   fdd}|   td  d S )Nc                      s,   d   fddt dD    d S )Nc                    s   g | ]}  qS r   r   r   )r   r   r   r   rx   #  ry   zlNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword.<locals>.f.<locals>.<listcomp>rW   r   r   r   r   r   r   !  s    zXNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword.<locals>.fr   r   r   r   r   4test_named_expression_global_scope_no_global_keyword  s    zMNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keywordc                    s   t   fdd}|  d S )Nc                     s(   d   fdd} |      d S )Nc                      s    fddt dD  d S )Nc                    s   g | ]}  qS r   r   r   nonlocal_varr   r   r   rx   .  ry   zgNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f.<locals>.g.<locals>.<listcomp>rW   r   r   r   r   r   g,  s    zSNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f.<locals>.grO   )r   r   r   r   r   *  s    zHNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.fr   r   r   r   r   $test_named_expression_nonlocal_scope(  s    z=NamedExpressionScopeTest.test_named_expression_nonlocal_scopec                    s   t   fdd}|  d S )Nc                     s&   d } fdd}|    | d  d S )Nc                      s    fddt dD  d S )Nc                    s   g | ]}  qS r   r   r   r   r   r   rx   8  ry   z{NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f.<locals>.g.<locals>.<listcomp>rW   r   r   r   r   r   r   7  s    zgNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f.<locals>.grO   )r   r   r   r   r   r   5  s    z\NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.fr   r   r   r   r   8test_named_expression_nonlocal_scope_no_nonlocal_keyword3  s    zQNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keywordc                    sX   d g d} fdd|D }|  dt  t|D ]\}}| |||    q6d S )NrW   )rW   rX   rY   r   c                 3   s   | ]}|   V  qd S rr   r   r   rR   r   r   r   r   @  ry   zQNamedExpressionScopeTest.test_named_expression_scope_in_genexp.<locals>.<genexpr>r   )ZassertNotInlocals	enumeraterP   )r
   r   Zgenexpidxelemr   r   r   %test_named_expression_scope_in_genexp=  s    z>NamedExpressionScopeTest.test_named_expression_scope_in_genexpN)rI   rJ   rK   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   L  s4   									
r   __main__)
rL   Ztest.supportr   r   ZTestCaser   rM   r   rI   mainr   r   r   r   <module>   s    _h |