o
    HXh{R                     @   sZ   d dl 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 dS )	    Nc                   @   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/S )0NamedExpressionInvalidTestc                 C   B   d}|  td t|i i  W d    d S 1 sw   Y  d S )Nzx := 0invalid syntaxassertRaisesRegexSyntaxErrorexecselfcode r   E/opt/python-3.10.19/usr/lib/python3.10/test/test_named_expressions.py test_named_expression_invalid_01      "z;NamedExpressionInvalidTest.test_named_expression_invalid_01c                 C   r   )Nz
x = y := 0r   r   r	   r   r   r    test_named_expression_invalid_02   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_02c                 C   r   )Nz	y := f(x)r   r   r	   r   r   r    test_named_expression_invalid_03   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_03c                 C   r   )Nzy0 = y1 := f(x)r   r   r	   r   r   r    test_named_expression_invalid_04   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_04c                 C   r   )Nz((a, b) := (1, 2))z,cannot use assignment expressions with tupler   r	   r   r   r    test_named_expression_invalid_06   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_06c                 C   r   )Nzdef spam(a = b := 42): passr   r   r	   r   r   r    test_named_expression_invalid_07%   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_07c                 C   r   )Nzdef spam(a: b := 42 = 5): passr   r   r	   r   r   r    test_named_expression_invalid_08+   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_08c                 C   r   )Nzspam(a=b := 'c')r   r   r	   r   r   r    test_named_expression_invalid_091   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_09c                 C   r   )Nzspam(x = y := f(x))r   r   r	   r   r   r    test_named_expression_invalid_107   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_10c                 C   r   )Nzspam(a=1, b := 2),positional argument follows keyword argumentr   r	   r   r   r    test_named_expression_invalid_11=      "z;NamedExpressionInvalidTest.test_named_expression_invalid_11c                 C   r   Nzspam(a=1, (b := 2))r   r   r	   r   r   r    test_named_expression_invalid_12D   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_12c                 C   r   r   r   r	   r   r   r    test_named_expression_invalid_13K   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_13c                 C   r   )Nz(x := lambda: y := 1)r   r   r	   r   r   r    test_named_expression_invalid_14R   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_14c                 C   r   )Nz(lambda: x := 1)z-cannot use assignment expressions with lambdar   r	   r   r   r    test_named_expression_invalid_15X   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_15c                 C   r   )Nz[i + 1 for i in i := [1,2]]r   r   r	   r   r   r    test_named_expression_invalid_16_   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_16c                 C   r   )Nz-[i := 0, j := 1 for i, j in [(1, 2), (3, 4)]]z;did you forget parentheses around the comprehension target?r   r	   r   r   r    test_named_expression_invalid_17e   r   z;NamedExpressionInvalidTest.test_named_expression_invalid_17c                 C   r   )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      g d}|D ]=\}}}d| d}| j |d$ | t| t|i i  W d    n1 s/w   Y  W d    n1 s>w   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
   casesr0   targetr   msgr   r   r   Mtest_named_expression_invalid_rebinding_list_comprehension_iteration_variableu      
zhNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_iteration_variablec              
   C      ddg}|D ]v\}}}d| d}| j |d] | t| t|i  W d    n1 s.w   Y  | t| t|i i  W d    n1 sJw   Y  | t| td| i  W d    n1 shw   Y  W d    n1 sww   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: r1   r3   r   r   r   Etest_named_expression_invalid_rebinding_list_comprehension_inner_loop   &   z`NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_list_comprehension_inner_loopc              
   C      g d}d}|D ]o\}}| j |d] | t| t|i  W d    n1 s)w   Y  | t| t|i i  W d    n1 sEw   Y  | t| td| i  W d    n1 scw   Y  W d    n1 srw   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/   r=   r1   r
   r4   r6   r0   r   r   r   r   Dtest_named_expression_invalid_list_comprehension_iterable_expression   "   z_NamedExpressionInvalidTest.test_named_expression_invalid_list_comprehension_iterable_expressionc              
   C   r#   )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/   r1   r3   r   r   r   Ltest_named_expression_invalid_rebinding_set_comprehension_iteration_variable   r8   zgNamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_iteration_variablec              
   C   r9   )N)r:   r'   z3{i for i in range(5) if (j := 0) for j in range(5)})r;   r'   z6{i for i in range(5) if (j := 0) for j, k in {(0, 1)}}r<   r.   r/   r=   r1   r3   r   r   r   Dtest_named_expression_invalid_rebinding_set_comprehension_inner_loop   r?   z_NamedExpressionInvalidTest.test_named_expression_invalid_rebinding_set_comprehension_inner_loopc              
   C   r@   )N)	)rA   z{i for i in (i := range(5))})rB   z"{i for i in (2, 3, i := range(5))})rC   z"{i for i in {2, 3, i := range(5)}})rD   z{i for i in (j := range(5))})rE   z'{i for i in (lambda:(j := range(5)))()})rF   z.{i for i in range(5) for j in (i := range(5))})rG   z){i for i in {j for j in (k := range(5))}})rH   z1{i for i in {j for j in range(5) if (j := True)}})rI   z,{i for i in {(j := True) for j in range(5)}}rJ   r/   r=   r1   rK   r   r   r   Ctest_named_expression_invalid_set_comprehension_iterable_expression   rM   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"   r7   r>   rL   rN   rO   rP   r   r   r   r   r      s0    	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!d" Zd#d$ Zd%S )&NamedExpressionAssignmentTestc                 C      d } |  |d d S )N
   assertEqualr
   ar   r   r   #test_named_expression_assignment_01      zANamedExpressionAssignmentTest.test_named_expression_assignment_01c                 C   s   d}| } |  |d d S N   rW   rY   r   r   r   #test_named_expression_assignment_02   s   zANamedExpressionAssignmentTest.test_named_expression_assignment_02c                 C   rU   )N   rW   )r
   totalr   r   r   #test_named_expression_assignment_03   r\   zANamedExpressionAssignmentTest.test_named_expression_assignment_03c                 C   rU   )N      r`   rW   )r
   infor   r   r   #test_named_expression_assignment_04   r\   zANamedExpressionAssignmentTest.test_named_expression_assignment_04c                 C   s   d }df |  |d d S Nrd   re   rW   )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   rW   )r
   ri   yzr   r   r   #test_named_expression_assignment_06   s   zANamedExpressionAssignmentTest.test_named_expression_assignment_06c                 C   rU   )Nrd   re   rW   )r
   locr   r   r   #test_named_expression_assignment_07  r\   zANamedExpressionAssignmentTest.test_named_expression_assignment_07c                 C   s&   d }r|  |d d S | d d S )Neggs0variable was not assigned using named expression)rX   failr
   spamr   r   r   #test_named_expression_assignment_08
  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_08c                 C   s$   d }r|  | d S | d d S )NTrr   )
assertTruers   rt   r   r   r   #test_named_expression_assignment_09  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_09c                 C   s   d }dkrd S |  d d S )NrV   rr   )rs   )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 Nr   rZ   r   r   r   ru        zONamedExpressionAssignmentTest.test_named_expression_assignment_11.<locals>.spamrc   c                    *   g | ]} | d kr|| fqS r   r   .0ri   ru   rk   r   r   
<listcomp>     * zUNamedExpressionAssignmentTest.test_named_expression_assignment_11.<locals>.<listcomp>)rd   rd         ?)re   re   r   )r`   r`   r   rW   r
   Z
input_dataresr   r   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   r{   r|   r   r}   r   r   r   ru   "  r~   zONamedExpressionAssignmentTest.test_named_expression_assignment_12.<locals>.spamc                        g | ]} | | gqS r   r   r   r   r   r   r   $       zUNamedExpressionAssignmentTest.test_named_expression_assignment_12.<locals>.<listcomp>rd      r   re   r`      rangerX   r
   r   r   r   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 rh   lenrX   )r
   lineslengthr   r   r   #test_named_expression_assignment_13(  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_13c                 C   s`   d}d}d}||||d    }kr(|d | | | }||||d    }ks|  |d dS )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):
        	   re   r`   rd   NrW   )r
   rZ   nri   dr   r   r   #test_named_expression_assignment_14.  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_14c                 C   s"   d }r		 d }s|  |d d S )NFrW   rY   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 )Nrn   c                    s*   i | ]}         qS r   r   )r   __rZ   bcr   r   
<dictcomp>F  r   zUNamedExpressionAssignmentTest.test_named_expression_assignment_16.<locals>.<dictcomp>   re   r`   r            )rd   re   r`   r   r   r   r   )r
   Zfibr   r   r   #test_named_expression_assignment_16D  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_16c                 C   s2   dg}|d } }|  |d |  ||d  d S )Nrd   r   rW   )r
   rZ   r   elementr   r   r   #test_named_expression_assignment_17I  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_17c                 C   sd   G dd d}|dgdgg}|d }d }f }|  |d |  |d |  ||j| |  d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z]NamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalListc                 S   s
   || _ d S r|   two_dimensional_list)r
   r   r   r   r   __init__Q  s   
zfNamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalList.__init__c                 S   s   | j |d  |d  S )Nr   rd   r   )r
   indexr   r   r   __getitem__T  s   ziNamedExpressionAssignmentTest.test_named_expression_assignment_18.<locals>.TwoDimensionalList.__getitem__N)rQ   rR   rS   r   r   r   r   r   r   TwoDimensionalListP  s    r   rd   re   r   )rX   r   )r
   r   rZ   r   r   r   r   r   r   #test_named_expression_assignment_18O  s   zANamedExpressionAssignmentTest.test_named_expression_assignment_18N)rQ   rR   rS   r[   r_   rb   rg   rj   rm   rp   rv   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   rT      s&    rT   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   r   )Nz!def spam():
    (a := 5)
print(a)zname 'a' is not defined)r   	NameErrorr   r	   r   r   r   test_named_expression_scope_01a  s   "z7NamedExpressionScopeTest.test_named_expression_scope_01c                    :   d  fddt dD }| |g d |  d d S )Nr   c                    s   g | ]} |   qS r   r   )r   vra   r   r   r   k      zKNamedExpressionScopeTest.test_named_expression_scope_02.<locals>.<listcomp>r   r   rd   r`   r   rV   rV   r   )r
   Zpartial_sumsr   r   r   test_named_expression_scope_02i     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 )rd   Nr   )r   numZlastNumr   r   	<genexpr>q      zJNamedExpressionScopeTest.test_named_expression_scope_03.<locals>.<genexpr>rc   rd   )anyrw   rX   )r
   ZcontainsOner   r   r   test_named_expression_scope_03p  s   
z7NamedExpressionScopeTest.test_named_expression_scope_03c                    s2   dd   fddt ddD }| d d S )Nc                 S   r{   r|   r   r}   r   r   r   ru   w  r~   zENamedExpressionScopeTest.test_named_expression_scope_04.<locals>.spamc                    r   r   r   r   r   r   r   r   y  r   zKNamedExpressionScopeTest.test_named_expression_scope_04.<locals>.<listcomp>rd   r   r   r   r   r   r   r   test_named_expression_scope_04v  s   z7NamedExpressionScopeTest.test_named_expression_scope_04c                    sD   dd  g d} fdd|D }|  |g d |  d d S )Nc                 S   r{   r|   r   r}   r   r   r   ru   ~  r~   zENamedExpressionScopeTest.test_named_expression_scope_05.<locals>.spamrc   c                    r   r   r   r   r   r   r   r     r   zKNamedExpressionScopeTest.test_named_expression_scope_05.<locals>.<listcomp>r   r`   rW   r   r   r   r   test_named_expression_scope_05}  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                       g | ]}|  qS r   r   r   r%   ru   r   r   r         zVNamedExpressionScopeTest.test_named_expression_scope_06.<locals>.<listcomp>.<listcomp>r`   r   r   r'   r   r   r   r     s   " zKNamedExpressionScopeTest.test_named_expression_scope_06.<locals>.<listcomp>re   r   rd   re   r   r   r   r   r   test_named_expression_scope_06  s   z7NamedExpressionScopeTest.test_named_expression_scope_06c                 C   s$   t ddg } | |ddg d S rh   r   )r
   r   r   r   r   test_named_expression_scope_07  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   r{   r|   r   r}   r   r   r   ru     r~   zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.spamc                 S      | d S Nre   r   r   r   r   r   rq        zENamedExpressionScopeTest.test_named_expression_scope_08.<locals>.eggsc                    s    g | ]}|   qS r   r   r   hrZ   r   rq   ru   r   r   r     r   zKNamedExpressionScopeTest.test_named_expression_scope_08.<locals>.<listcomp>re   r   rd   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   r{   r|   r   r}   r   r   r   ru     r~   zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.spamc                 S   r   r   r   r   r   r   r   rq     r   zENamedExpressionScopeTest.test_named_expression_scope_09.<locals>.eggsc                    s    g | ]}|    qS r   r   r   rZ   rq   ru   r   r   r     r   zKNamedExpressionScopeTest.test_named_expression_scope_09.<locals>.<listcomp>re   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 )rd   r   r   r}   r   r   r     r   zVNamedExpressionScopeTest.test_named_expression_scope_10.<locals>.<listcomp>.<listcomp>re   r   r   rZ   r   r   r   r     s   & zKNamedExpressionScopeTest.test_named_expression_scope_10.<locals>.<listcomp>re   rd   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                    r   r   r   r   r'   r   r   r     r   zKNamedExpressionScopeTest.test_named_expression_scope_11.<locals>.<listcomp>r   )r   rd   re   r`   r   r   r   r   r   r   r   test_named_expression_scope_11  s   z7NamedExpressionScopeTest.test_named_expression_scope_11c                    r   )Nr   c                    s   g | ]}|    qS r   r   r   r   r   r   r     r   zKNamedExpressionScopeTest.test_named_expression_scope_17.<locals>.<listcomp>r   r   rV   r   r   r   r   r   test_named_expression_scope_17  r   z7NamedExpressionScopeTest.test_named_expression_scope_17c                 C   0   dd }|d }}|  |d |  |d d S )Nc                 S   r{   r|   r   r}   r   r   r   ru     r~   zENamedExpressionScopeTest.test_named_expression_scope_18.<locals>.spamre   rW   r
   ru   r   r   r   r   r   test_named_expression_scope_18     z7NamedExpressionScopeTest.test_named_expression_scope_18c                 C   r   )Nc                 S   r{   r|   r   r}   r   r   r   ru     r~   zENamedExpressionScopeTest.test_named_expression_scope_19.<locals>.spamre   rW   r   r   r   r   test_named_expression_scope_19  r   z7NamedExpressionScopeTest.test_named_expression_scope_19c                 C   s2   dd }|d }d}|  |d |  |d d S )Nc                 S   r{   r|   r   r}   r   r   r   ru     r~   zENamedExpressionScopeTest.test_named_expression_scope_20.<locals>.spamre   r}   rW   r   r   r   r   test_named_expression_scope_20  s   z7NamedExpressionScopeTest.test_named_expression_scope_20c                 C   4   dd }|d }dd}|  |d |  |d d S )Nc                 S      | | S r|   r   r   r   r   r   ru     r   zENamedExpressionScopeTest.test_named_expression_scope_21.<locals>.spamre   rd   r   r`   rW   r
   ru   r   r   r   r   r   test_named_expression_scope_21     z7NamedExpressionScopeTest.test_named_expression_scope_21c                 C   r   )Nc                 S   r   r|   r   r   r   r   r   ru     r   zENamedExpressionScopeTest.test_named_expression_scope_22.<locals>.spamre   rd   r   r`   rW   r   r   r   r   test_named_expression_scope_22  r   z7NamedExpressionScopeTest.test_named_expression_scope_22c                 C   r   )Nc                 S   r   r|   r   r   r   r   r   ru     r   zENamedExpressionScopeTest.test_named_expression_scope_23.<locals>.spamre   rd   )r   rZ   r`   rW   r   r   r   r   test_named_expression_scope_23  r   z7NamedExpressionScopeTest.test_named_expression_scope_23c                    s&   d  fdd}|  |   d d S )NrV   c                      s   d   d S r]   r   r   r}   r   r   ru     s   zENamedExpressionScopeTest.test_named_expression_scope_24.<locals>.spamr^   rW   rt   r   r}   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()rZ   r^   )r   rX   )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 ]3\}}| j |d! i }t|| | |d d | |d g d W d    n1 snw   Y  q@d 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/   ri   re   resultr   )r2   r   rX   )	r
   Z	rebindingZ
filter_refZbody_refZ
nested_refr4   r0   r   r   r   r   r   6test_named_expression_variable_reuse_in_comprehensions	  s,   

zONamedExpressionScopeTest.test_named_expression_variable_reuse_in_comprehensionsc                    s8   t   fdd}z|   t W d ad S d aw )Nc                      s&   fddt dD   t d S )Nc                    s   g | ]}  a qS r   
GLOBAL_VARr   _sentinelr   r   r   *  r   zZNamedExpressionScopeTest.test_named_expression_global_scope.<locals>.f.<locals>.<listcomp>rd   )r   rX   r   r   r
   r   r   r   f(  s   zFNamedExpressionScopeTest.test_named_expression_global_scope.<locals>.fobjectrX   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                       g | ]}  qS r   r   r   )r   r   r   r   r   6  r   zlNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword.<locals>.f.<locals>.<listcomp>rd   r   r   r   r   r   r   4  s   zXNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keyword.<locals>.fr   r   r   r   r   4test_named_expression_global_scope_no_global_keyword2  s   zMNamedExpressionScopeTest.test_named_expression_global_scope_no_global_keywordc                       t   fdd}|  d S )Nc                     s(   d   fdd} |      d S )Nc                          fddt dD  d S )Nc                    r   r   r   r   nonlocal_varr   r   r   r   A  r   zgNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f.<locals>.g.<locals>.<listcomp>rd   r   r   r   r   r   g?  s   zSNamedExpressionScopeTest.test_named_expression_nonlocal_scope.<locals>.f.<locals>.grW   )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                    r   )Nc                     s&   d } fdd}|    | d  d S )Nc                      r   )Nc                    r   r   r   r   r   r   r   r   K  r   z{NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f.<locals>.g.<locals>.<listcomp>rd   r   r   r   r   r   r   J  s   zgNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.f.<locals>.grW   )r   r   r   r   r   r   H  s   z\NamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keyword.<locals>.fr   r   r   r   r   8test_named_expression_nonlocal_scope_no_nonlocal_keywordF  s   
zQNamedExpressionScopeTest.test_named_expression_nonlocal_scope_no_nonlocal_keywordc                    sX   d g d} fdd|D }|  dt  t|D ]\}}| |||    qd S )Nrd   )rd   re   r`   r   c                 3   s    | ]	}|   V  qd S r|   r   r   rZ   r   r   r   r   S  r   zQNamedExpressionScopeTest.test_named_expression_scope_in_genexp.<locals>.<genexpr>r   )ZassertNotInlocals	enumeraterX   )r
   r   Zgenexpidxelemr   r  r   %test_named_expression_scope_in_genexpP  s   z>NamedExpressionScopeTest.test_named_expression_scope_in_genexpN)rQ   rR   rS   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   _  s6    									
r   __main__)Zunittestr   ZTestCaser   rT   r   rQ   mainr   r   r   r   <module>   s     ^} |