
    dafT                         d dl Z d dlZd dlmZmZ d dlmZ  G d de j                        Zedk(  r e j                          yy)    N)check_syntax_errorcpython_only)
gc_collectc                      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ed        Zd Ze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*ed(        Z+y))*
ScopeTestsc                     d } |d      } |d      }| j                   |d      d       | j                   |d      d       y )Nc                       fd}|S )Nc                     | z   S N yxs    */root/Python-3.12.4/Lib/test/test_scope.pyadderz?ScopeTests.testSimpleNesting.<locals>.make_adder.<locals>.adder       1u    r   r   r   s   ` r   
make_adderz0ScopeTests.testSimpleNesting.<locals>.make_adder   s    Lr      
         assertEqual)selfr   incplus10s       r   testSimpleNestingzScopeTests.testSimpleNesting
   sC    	
 mBQ#Q'r   c                     d } |d      } |d      }| j                   |d      d       | j                   |d      d       y )Nc                       fd} |       S )Nc                      fd} | S )Nc                     | z   S r   r   r   s    r   r   zNScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extra.<locals>.adder       q5Lr   r   )r   r   s    r   extraz?ScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extra   s    !r   r   )r   r&   s   ` r   make_adder2z0ScopeTests.testExtraNesting.<locals>.make_adder2   s     7Nr   r   r   r   r   r   r   )r   r'   r   r   s       r   testExtraNestingzScopeTests.testExtraNesting   sC    	 !nRQ#Q'r   c                     d } |d      } |d      }| j                   |d      d       | j                   |d      d       y )Nc                       fd} dz    |S )Nc                     | z   S r   r   r   s    r   r   zEScopeTests.testSimpleAndRebinding.<locals>.make_adder3.<locals>.adder)   r   r   r   r   r   s   ` r   make_adder3z6ScopeTests.testSimpleAndRebinding.<locals>.make_adder3(   s    AALr   r   	   r   r   r   r   r   )r   r,   r   r   s       r   testSimpleAndRebindingz!ScopeTests.testSimpleAndRebinding&   sC    	 !nQQ#Q'r   c                     fd}d |       }| j                   |d      d       d| j                   |d      d       y )Nc                      fd}  |        S )Nc                      fd}  |        S )Nc                      fd} | S )Nc                     | z   S r   r   r   global_xs    r   r   zbScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest.<locals>.adder9   s    '!|+r   r   )r   r5   s    r   nestzSScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest8   s    , Lr   r   r6   r5   s    r   r6   zEScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest7   s    ! vr   r   r7   s    r   make_adder4z7ScopeTests.testNestingGlobalNoFree.<locals>.make_adder46   s     6Mr   r   r   r   r   r   r   )r   r8   r   r5   s      @r   testNestingGlobalNoFreez"ScopeTests.testNestingGlobalNoFree4   sC    	 q1%rA&r   c                     d } |d      } |d      }| j                   |d      d       | j                   |d      d       y )Nc                 *      G  fdd      } |       S )Nc                       e Zd Z fdZy)FScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adderc                     |z   S r   r   )r   r   r   s     r   __call__zOScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adder.__call__J   r%   r   N)__name__
__module____qualname__r?   r   s   r   Adderr=   I   s    !r   rD   r   )r   rD   s   ` r   make_adder5z7ScopeTests.testNestingThroughClass.<locals>.make_adder5H   s    ! ! 7Nr   r   r   r   r   r   r   )r   rE   r   r   s       r   testNestingThroughClassz"ScopeTests.testNestingThroughClassF   sC    	 !nRQ#Q'r   c                     d } |d      } |d      }| j                   |d      d       | j                   |d      d       y )Nc                     d }| a |S )Nc                     t         | z   S r   global_nest_xr   s    r   r   zMScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6.<locals>.adderX   s    $q((r   rJ   r   s     r   make_adder6z>ScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6V   s    )MLr   r   r      r   r   r   )r   rM   r   r   s       r   testNestingPlusFreeRefToGlobalz)ScopeTests.testNestingPlusFreeRefToGlobalT   sC    	 !nRQ$Q'r   c                 J    d } |d      }| j                   |d      d       y )Nc                     d } |d      S )Nc                     dfd}|S )N*   c                     | z   S r   r   )zr   s    r   hzEScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.g.<locals>.hh   r%   r   r   )r   rV   r   s     @r   gz:ScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.gf   s    !r   r   r   r   rW   s     r   fz/ScopeTests.testNearestEnclosingScope.<locals>.fe   s    
 Q4Kr   r      /   r   )r   rY   	test_funcs      r   testNearestEnclosingScopez$ScopeTests.testNearestEnclosingScopec   s&    	 bE	1r*r   c                 l    d fd} |ddd      } |ddd      }| j                   |       d       y )	Nc                     | S r   r   rC   s    r   identityz9ScopeTests.testMixedFreevarsAndCellvars.<locals>.identityr   s    Hr   c                       fd}|S )Nc                 0    | z   } fd}|z   |S )Nc                         z   z        S r   r   )br`   r   rU   s   r   rV   zHScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.g.<locals>.hx   s     $AQK00r   r   )ard   crV   r   r`   r   rU   s    `  @r   rW   z=ScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.gv   s!    E1 Er   r   )r   r   rU   rW   r`   s   ` ` r   rY   z2ScopeTests.testMixedFreevarsAndCellvars.<locals>.fu   s     Hr   r   r            '   r   )r   rY   rW   rV   r`   s       @r   testMixedFreevarsAndCellvarsz'ScopeTests.testMixedFreevarsAndCellvarsp   s;    			 aAJaAJb!r   c                    d } |       }| j                  |j                         d       | j                  |j                         d       | j                  |j                         d       d G fdd      } |       }| j                  |j                         d       | j                  |j                         d       | j                  |j                         d       y )Nc                  .    d G fdd      }  |        S )Nvarc                   *    e Zd Zd Z fdZd Zd Zy):ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Testc                      yNmethodr   r   s    r   method_and_varzIScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.method_and_var   s    #r   c                     S r   r   r   ru   s    r   testz?ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.test   s	    ))r   c                     t        d      S Nglobalstrrt   s    r   actual_globalzHScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.actual_global   s    x=(r   c                     t        |       S r   r|   rt   s    r   r}   z>ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.str   s    t9$r   Nr@   rA   rB   ru   rx   r~   r}   ru   s   r   Testrp      s    $*)%r   r   r   )r   ru   s    @r   rx   z,ScopeTests.testFreeVarInMethod.<locals>.test   s    "N% % 6Mr   rn   rs   r{   c                   *    e Zd Zd Z fdZd Zd Zy),ScopeTests.testFreeVarInMethod.<locals>.Testc                      yrr   r   rt   s    r   ru   z;ScopeTests.testFreeVarInMethod.<locals>.Test.method_and_var   s    r   c                     S r   r   rw   s    r   rx   z1ScopeTests.testFreeVarInMethod.<locals>.Test.test   s	    %%r   c                     t        d      S rz   r|   rt   s    r   r~   z:ScopeTests.testFreeVarInMethod.<locals>.Test.actual_global   s    8}$r   c                     t        |       S r   r|   rt   s    r   r}   z0ScopeTests.testFreeVarInMethod.<locals>.Test.str   s    4y r   Nr   r   s   r   r   r      s     &%!r   r   )r   rx   ru   r~   )r   rx   tr   ru   s       @r   testFreeVarInMethodzScopeTests.testFreeVarInMethod   s    	 F5)))+X6*H5		! 		! F5)))+X6*H5r   c                 p    ddd}| j                   |d      d       | j                   |       d       y )N   re   c                 "      fd} |       dz   S )Nc                       dz   S )NrZ   r   r   s   r   barz8ScopeTests.testCellIsKwonlyArg.<locals>.foo.<locals>.bar   r   r   rg   r   )re   r   s   ` r   fooz+ScopeTests.testCellIsKwonlyArg.<locals>.foo   s    519r   rS   2      r   )r   r   s     r   testCellIsKwonlyArgzScopeTests.testCellIsKwonlyArg   s4      	
 	rB'#r   c                     d } |       }d } ||      }|j                   \  } |       }| j                  ||       | j                  ||       y )Nc                  2    dfd} | j                   \  }|S )NrS   c                       S r   r   values   r   innerzCScopeTests.testCellIsArgAndEscapes.<locals>.external.<locals>.inner       r   __closure__r   cellr   s     @r   externalz4ScopeTests.testCellIsArgAndEscapes.<locals>.external       E%%EDKr   c                       fd}|S )Nc                       S r   r   )args   r   eggsz>ScopeTests.testCellIsArgAndEscapes.<locals>.spam.<locals>.eggs       
r   r   )r   r   s   ` r   spamz0ScopeTests.testCellIsArgAndEscapes.<locals>.spam   s    Kr   r   assertIsassertIsNotr   r   cell_extr   r   cell_closure	cell_eggss          r   testCellIsArgAndEscapesz"ScopeTests.testCellIsArgAndEscapes   sR    
	 :	
 H~((F	i*L1r   c                     d } |       }d } ||      }|j                   \  } |       }| j                  ||       | j                  ||       y )Nc                  2    dfd} | j                   \  }|S )NrS   c                       S r   r   r   s   r   r   zEScopeTests.testCellIsLocalAndEscapes.<locals>.external.<locals>.inner   r   r   r   r   s     @r   r   z6ScopeTests.testCellIsLocalAndEscapes.<locals>.external   r   r   c                     | fd}|S )Nc                       S r   r   )r   s   r   r   z@ScopeTests.testCellIsLocalAndEscapes.<locals>.spam.<locals>.eggs   s    r   r   )r   r   r   s     @r   r   z2ScopeTests.testCellIsLocalAndEscapes.<locals>.spam   s    DKr   r   r   s          r   testCellIsLocalAndEscapesz$ScopeTests.testCellIsLocalAndEscapes   sR    
	 :	 H~((F	i*L1r   c                 :    d }| j                   |d      d       y )Nc                 >    fd| dk\  r |       S t        d      )Nc                 ,    | dk(  ry|  | dz
        z  S Nr   r   r   )nfacts    r   r   z1ScopeTests.testRecursion.<locals>.f.<locals>.fact   s    6tAE{?*r   r   zx must be >= 0)
ValueError)r   r   s    @r   rY   z#ScopeTests.testRecursion.<locals>.f   s&    +
 AvAw !122r   ri   i  r   r   rY   s     r   testRecursionzScopeTests.testRecursion   s    		3 	1s#r   c                 d    t        | d       t        | d       t        | d       t        | d       y )Nzif 1:
            def unoptimized_clash1(strip):
                def f(s):
                    from sys import *
                    return getrefcount(s) # ambiguity: free or local
                return f
            zif 1:
            def unoptimized_clash2():
                from sys import *
                def f(s):
                    return getrefcount(s) # ambiguity: global or local
                return f
            zif 1:
            def unoptimized_clash2():
                from sys import *
                def g():
                    def f(s):
                        return getrefcount(s) # ambiguity: global or local
                    return f
            zif 1:
            def f():
                def g():
                    from sys import *
                    return getrefcount # global or local?
            )r   rt   s    r   testUnoptimizedNamespacesz$ScopeTests.testUnoptimizedNamespaces   sD    4 " 	 	4 " 	 	4 " 	 	4 " 	r   c                   	 d } |d      } |d      }| j                   |d      d       | j                   |d      d       d } |d      } |d      }| j                   |d      d       | j                   |d      d       	fd}d	 |d       }| j                   |d      d	       d
 } |ddd	      } |ddd      }| j                   |       d       y )Nc                       fdS )Nc                     | z   S r   r   r   s    r   <lambda>z:ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>  s    Q r   r   rC   s   `r   r   z(ScopeTests.testLambdas.<locals>.<lambda>  s     r   r   r   r   rZ      c                        fd       S )Nc                       fdS )Nc                     | z   S r   r   r   s    r   r   zLScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>!  s    1q5 r   r   rC   s   r   r   z:ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>!  s     r   r   rC   s   `r   r   z(ScopeTests.testLambdas.<locals>.<lambda>!  s    03 r   c                     fdS )Nc                     | z   S r   r   r4   s    r   r   z:ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>'  s    A r   r   )r   r5   s    r   r   z(ScopeTests.testLambdas.<locals>.<lambda>'  s    - r   rg   c                     fdS )Nc                     fdS )Nc                       z   z  S r   r   )rd   r   rU   s   r   r   zLScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>,  s    a1q5k r   r   )re   rd   rf   r   rU   s    ` r   r   z:ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>,  s    -A r   r   )r   r   rU   s    ``r   r   z(ScopeTests.testLambdas.<locals>.<lambda>,  s    A r   rh   ri      r   )
r   f1r   r   f2f3f8rW   rV   r5   s
            @r   testLambdaszScopeTests.testLambdas  s    &eBQ#B'3eBQ#B'-hQ#Aq!QKaAJb!r   c                 h    d }d }| j                  t        |       | j                  t        |       y )Nc                  *    t               fd} dy )Nc                       S r   r   rL   s   r   r   z@ScopeTests.testUnboundLocal.<locals>.errorInOuter.<locals>.inner5      r   r   printr   r   s    @r   errorInOuterz1ScopeTests.testUnboundLocal.<locals>.errorInOuter3  s    !HAr   c                  "    fd}  |         dy )Nc                       S r   r   rL   s   r   r   z@ScopeTests.testUnboundLocal.<locals>.errorInInner.<locals>.inner:  r   r   r   r   r   s    @r   errorInInnerz1ScopeTests.testUnboundLocal.<locals>.errorInInner9  s    GAr   assertRaisesUnboundLocalError	NameErrorr   r   r   s      r   testUnboundLocalzScopeTests.testUnboundLocal1  s/    		 	+\:)\2r   c                 h    d }d }| j                  t        |       | j                  t        |       y )Nc                  ,    dt               fd} y )Nr   c                       S r   r   rL   s   r   r   zIScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuter.<locals>.innerJ  r   r   r   r   s    @r   r   z:ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuterF  s    A!Hr   c                  $    fd} d |         y )Nc                       S r   r   rL   s   r   r   zIScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInner.<locals>.innerN  r   r   r   r   r   s    @r   r   z:ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInnerM  s    AGr   r   r   s      r   testUnboundLocal_AfterDelz$ScopeTests.testUnboundLocal_AfterDelB  s/    		 	+\:)\2r   c                 4    t        dd| j                  i       y )Na  if 1:
            global_x = 1
            def f():
                global_x += 1
            try:
                f()
            except UnboundLocalError:
                pass
            else:
                fail('scope of global_x not correctly determined')
            fail)execr   rt   s    r   testUnboundLocal_AugAssignz%ScopeTests.testUnboundLocal_AugAssignW  s     
 $))$
	&r   c                     d }| j                    |ddd             d       d }| j                    |d             d	   d       y )
Nc                        fd}|S )Nc                       S r   r   )lsts   r   returnerzIScopeTests.testComplexDefinitions.<locals>.makeReturner.<locals>.returnerh  r   r   r   )r   r   s   ` r   makeReturnerz7ScopeTests.testComplexDefinitions.<locals>.makeReturnerg  s    Or   r   r   rg   )r   r   rg   c                        fd}|S )Nc                       S r   r   )kwargss   r   r   zJScopeTests.testComplexDefinitions.<locals>.makeReturner2.<locals>.returnero  s    r   r   )r   r   s   ` r   makeReturner2z8ScopeTests.testComplexDefinitions.<locals>.makeReturner2n  s    Or   rN   r   re   r   )r   r   r   s      r   testComplexDefinitionsz!ScopeTests.testComplexDefinitionse  sO    	
 	,a!,.8	
 	,,.s3R8r   c                     t        d       y )Na;  if 1:
            # I
            x = 7
            def f():
                x = 1
                def g():
                    global x
                    def i():
                        def h():
                            return x
                        return h()
                    return i()
                return g()
            self.assertEqual(f(), 7)
            self.assertEqual(x, 7)

            # II
            x = 7
            def f():
                x = 1
                def g():
                    x = 2
                    def i():
                        def h():
                            return x
                        return h()
                    return i()
                return g()
            self.assertEqual(f(), 2)
            self.assertEqual(x, 7)

            # III
            x = 7
            def f():
                x = 1
                def g():
                    global x
                    x = 2
                    def i():
                        def h():
                            return x
                        return h()
                    return i()
                return g()
            self.assertEqual(f(), 2)
            self.assertEqual(x, 2)

            # IV
            x = 7
            def f():
                x = 3
                def g():
                    global x
                    x = 2
                    def i():
                        def h():
                            return x
                        return h()
                    return i()
                return g()
            self.assertEqual(f(), 2)
            self.assertEqual(x, 2)

            # XXX what about global statements in class blocks?
            # do they affect methods?

            x = 12
            class Global:
                global x
                x = 13
                def set(self, val):
                    x = val
                def get(self):
                    return x

            g = Global()
            self.assertEqual(g.get(), 13)
            g.set(15)
            self.assertEqual(g.get(), 13)
            r   rt   s    r   testScopeOfGlobalStmtz ScopeTests.testScopeOfGlobalStmtu  s     	 O O	r   c                      G fdd      fd}t        d      D ]	  } |         t                | j                  j                  d       y )Nc                   &    e Zd ZdZ fdZ fdZy)!ScopeTests.testLeaks.<locals>.Foor   c                 0    xj                   dz  c_         y Nr   countr   Foos    r   __init__z*ScopeTests.testLeaks.<locals>.Foo.__init__      		Q	r   c                 0    xj                   dz  c_         y r  r  r  s    r   __del__z)ScopeTests.testLeaks.<locals>.Foo.__del__  r  r   N)r@   rA   rB   r  r  r	  )r  s   r   r  r     s    Er   r  c                  .            fd}  |         y )Nc                       S r   r   rC   s   r   r   z,ScopeTests.testLeaks.<locals>.f1.<locals>.f2  r   r   r   )r   r   r  s    @r   r   z ScopeTests.testLeaks.<locals>.f1  s    ADr   d   r   )ranger   r   r  )r   r   ir  s      @r   	testLeakszScopeTests.testLeaks  sG    	 		 s 	AD	 	A&r   c                     t        d       y )Na  if 1:
            def test(x):
                class Foo:
                    global x
                    def __call__(self, y):
                        return x + y
                return Foo()

            x = 0
            self.assertEqual(test(6)(2), 8)
            x = -1
            self.assertEqual(test(3)(2), 5)

            looked_up_by_load_name = False
            class X:
                # Implicit globals inside classes are be looked up by LOAD_NAME, not
                # LOAD_GLOBAL.
                locals()['looked_up_by_load_name'] = True
                passed = looked_up_by_load_name

            self.assertTrue(X.passed)
            r   rt   s    r   testClassAndGlobalzScopeTests.testClassAndGlobal  s      	r   c                 |    d }  |d      d      }| j                  d|       |d= | j                  |dddd       y )Nc                       fd}|S )Nc                 8      fd} z   } dz   t               S )Nc                     | z   S r   r   )rU   r   s    r   rV   z>ScopeTests.testLocalsFunction.<locals>.f.<locals>.g.<locals>.h  r%   r   rg   )locals)r   rV   wr   s   `  r   rW   z3ScopeTests.testLocalsFunction.<locals>.f.<locals>.g  s!    !EQxr   r   rX   s   ` r   rY   z(ScopeTests.testLocalsFunction.<locals>.f  s      Hr   r   rh   rV      ri   )r   r   r  )assertInr   )r   rY   ds      r   testLocalsFunctionzScopeTests.testLocalsFunction  sD    	 AaDGc1cF!!!45r   c                     d }| j                   |d      j                  d       d } |d      j                  }| j                  d|       | j	                  d|       y )Nc                        G  fdd      }|S )Nc                   *    e Zd ZdZ fdZ e        y)0ScopeTests.testLocalsClass.<locals>.f.<locals>.C   c                     S r   r   r   r   s    r   mz2ScopeTests.testLocalsClass.<locals>.f.<locals>.C.m      Hr   N)r@   rA   rB   r   r#  r  rC   s   r   Cr    s    r   r%  r   r   r%  s   ` r   rY   z%ScopeTests.testLocalsClass.<locals>.f  s     
 Hr   r   r   c                        G  fdd      }|S )Nc                   8    e Zd ZW  Z fdZ e e             Zy)r  c                     S r   r   r"  s    r   r#  z2ScopeTests.testLocalsClass.<locals>.f.<locals>.C.m!  r$  r   N)r@   rA   rB   r   r#  listr  rU   rC   s   r   r%  z0ScopeTests.testLocalsClass.<locals>.f.<locals>.C  s    Nr   r%  r   r&  s   ` r   rY   z%ScopeTests.testLocalsClass.<locals>.f  s    # #
 Hr   r   r   )r   r   rU   assertNotInr  )r   rY   varnamess      r   testLocalsClasszScopeTests.testLocalsClass	  sS    	 	1$	 Q466h'c8$r   c                     dd l }| j                  |j                  |j                                |j                  d        d G fdd      }| j	                  d       y )Nr   c                      y r   r   )re   rd   rf   s      r   r   z6ScopeTests.testLocalsClass_WithTrace.<locals>.<lambda>2      r   r   c                       e Zd Z fdZy)/ScopeTests.testLocalsClass_WithTrace.<locals>.Cc                     S r   r   r"  s    r   rY   z1ScopeTests.testLocalsClass_WithTrace.<locals>.C.f6  r   r   N)r@   rA   rB   rY   rC   s   r   r%  r2  5  s    r   r%  )sys
addCleanupsettracegettracer   )r   r4  r%  r   s      @r   testLocalsClass_WithTracez$ScopeTests.testLocalsClass_WithTrace*  sN     	clln5&'	 	 	Br   c                 x    d }  |d             }| j                  |j                  |j                                y )Nc                        G  fdd      }|S )Nc                       e Zd Z fdZW  Zy)1ScopeTests.testBoundAndFree.<locals>.f.<locals>.Cc                     S r   r   r"  s    r   r#  z3ScopeTests.testBoundAndFree.<locals>.f.<locals>.C.m@  r$  r   N)r@   rA   rB   r#  re   rC   s   r   r%  r<  ?  s    r   r%  r   r&  s   ` r   rY   z&ScopeTests.testBoundAndFree.<locals>.f>  s      Hr   rg   )r   re   r#  )r   rY   insts      r   testBoundAndFreezScopeTests.testBoundAndFree;  s0    	 qtv*r   c                    dd l }fdd } G d d      }| j                  |j                  |j                                |j                          |d|d       |j                  d        | j	                  t
        |j                         y )Nr   c                     S r   r   )re   rd   rf   tracers      r   rB  z7ScopeTests.testInteractionWithTraceFunc.<locals>.tracerL  s    Mr   c                 R    |\  }|dk(  rdk(  rd|j                   d| fdS y )Nr    ___c                     t        |       S r   )getattr)objdess    r   r   zNScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetter.<locals>.<lambda>T  s    73#4 r   )r@   )nameklassgetterkindrJ  s       @r   adaptgetterz<ScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetterO  s3    ID#qy"9',~~t<C44 r   c                       e Zd Zy):ScopeTests.testInteractionWithTraceFunc.<locals>.TestClassN)r@   rA   rB   r   r   r   	TestClassrQ  V  s    r   rR  r   )r   rD  )r4  r5  r6  r7  r   	TypeError)r   r4  rO  rR  rB  s       @r   testInteractionWithTraceFuncz'ScopeTests.testInteractionWithTraceFuncH  sn     			5	 	 	clln5VE9g.T)S\\2r   c                     d } |d      }| j                  t        t        |j                         	 t	        |j                  i        | j                  d       y # t        $ r Y y w xY w)Nc                       fdS )Nc                       dz   S r  r   rC   s   r   r   z<ScopeTests.testEvalExecFreeVars.<locals>.f.<locals>.<lambda>c  s    1q5 r   r   rC   s   `r   rY   z*ScopeTests.testEvalExecFreeVars.<locals>.fb  s	      r   rg   z9exec should have failed, because code contained free vars)r   rS  eval__code__r   r   r   rY   rW   s      r   testEvalExecFreeVarszScopeTests.testEvalExecFreeVars`  s_    	! aD)T1::6	SR  IIQR  		s   A 	A&%A&c                     	 t        t               t        d       d } |        	 t        t               y # t        $ r Y &w xY w# t        $ r Y y w xY w)Nzbad should not be definedc                  ^    dD  cg c]  } | j                         D ]  }|  c}}  y c c}} w )Nza b)split)sbads     r   r   z+ScopeTests.testListCompLocalVars.<locals>.xx  s%    5Q17795CS5S55s   ))r   r`  r   r"  s     r   testListCompLocalVarsz ScopeTests.testListCompLocalVarso  sX    	/#J -.	6 	
	#J  		  		s    7 A 	AA	AAc                 $    d }  |d              y )Nc                       fd}|S )Nc                         t        d       y )Nzx + 1)rX  rC   s   r   rW   z1ScopeTests.testEvalFreeVars.<locals>.f.<locals>.g  s    Wr   r   rX   s   ` r   rY   z&ScopeTests.testEvalFreeVars.<locals>.f  s     Hr   rh   r   r   s     r   testEvalFreeVarszScopeTests.testEvalFreeVars  s    	 	!r   c                      G d d      }y )Nc                       e Zd Zd Zy)+ScopeTests.testFreeingCell.<locals>.Specialc                     t                y r   )nestedcell_getrt   s    r   r	  z3ScopeTests.testFreeingCell.<locals>.Special.__del__  s     r   N)r@   rA   rB   r	  r   r   r   Specialrh    s    !r   rk  r   )r   rk  s     r   testFreeingCellzScopeTests.testFreeingCell  s    	! 	!r   c                     d } |d      \  }}| j                   |       d       | j                   |       d       | j                   |       d       | j                   |       d       y )Nc                        fd} fd}||fS )Nc                       dz    S r  r   rC   s   r   r   z7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.inc      Qr   c                       dz    S r  r   rC   s   r   decz7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.dec  rp  r   r   )r   r   rr  s   `  r   rY   z*ScopeTests.testNonLocalFunction.<locals>.f  s     8Or   r   r   r   r   )r   rY   r   rr  s       r   testNonLocalFunctionzScopeTests.testNonLocalFunction  s^    		 Q4S""""r   c                    d } |d      }| j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       y )Nc                 *      G  fdd      } |       S )Nc                   "    e Zd Z fdZ fdZy)3ScopeTests.testNonLocalMethod.<locals>.f.<locals>.cc                     dz  S r  r   r"  s    r   r   z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.inc      FAHr   c                     dz  S r  r   r"  s    r   rr  z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.dec  ry  r   N)r@   rA   rB   r   rr  rC   s   r   rf   rw    s    r   rf   r   r   rf   s   ` r   rY   z(ScopeTests.testNonLocalMethod.<locals>.f  s      3Jr   r   r   r   )r   r   rr  r   rY   rf   s      r   testNonLocalMethodzScopeTests.testNonLocalMethod  sj    
	 aD!$!$!$!$r   c                 z    i }i }t        d||       | j                  d|d          | j                  d|d          y )NaC  if 1:
            def f():
                y = 1
                def g():
                    global y
                    return y
                def h():
                    return y + 1
                return g, h
            y = 9
            g, h = f()
            result9 = g()
            result2 = h()
            r   result2r-   result9)r   r   )r   local_ns	global_nss      r   #testGlobalInParallelNestedFunctionsz.ScopeTests.testGlobalInParallelNestedFunctions  sN    
 	  9	& 	Ii01Ii01r   c                     d } |d      }| j                  |j                         d       | j                  d|j                  j                         y )Nc                 *      G  fdd      } |       S )Nc                   $    e Zd ZW  dz    fdZy)2ScopeTests.testNonLocalClass.<locals>.f.<locals>.cr   c                     S r   r   r"  s    r   getz6ScopeTests.testNonLocalClass.<locals>.f.<locals>.c.get  r$  r   N)r@   rA   rB   r  rC   s   r   rf   r    s    Qr   rf   r   r{  s   ` r   rY   z'ScopeTests.testNonLocalClass.<locals>.f  s     
 3Jr   r   r   r   )r   r  r+  	__class____dict__r|  s      r   testNonLocalClasszScopeTests.testNonLocalClass  sB    	 aD!$akk223r   c                 `    d } |d      }| j                  t         |d            g d       y )Nc                       fd}|S )Nc              3   @   K   t        |       D ]  }dz    y wr  )r  )r   r  r   s     r   rW   z6ScopeTests.testNonLocalGenerator.<locals>.f.<locals>.g  s(     q AFAGs   r   rX   s   ` r   rY   z+ScopeTests.testNonLocalGenerator.<locals>.f  s    
 Hr   r   rZ   )r   r   rg   rh   rZ   )r   r*  rZ  s      r   testNonLocalGeneratorz ScopeTests.testNonLocalGenerator  s*    	 aDad_5r   c                 V    d } |d      } |       }| j                   |       d       y )Nc                       fd}|S )Nc                      dz  fd} | S )Nr   c                       dz    S )Nrh   r   rC   s   r   rV   z>ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g.<locals>.h  ry  r   r   )rV   r   s    r   rW   z3ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g  s    Q r   r   rX   s   ` r   rY   z(ScopeTests.testNestedNonLocal.<locals>.f  s     Hr   r   rg   r   )r   rY   rW   rV   s       r   testNestedNonLocalzScopeTests.testNestedNonLocal  s+    		 aDCa r   c                     d }d }y )Nc                      y r   r   r   s    r   topz/ScopeTests.testTopIsNotSignificant.<locals>.top  s    r   c                       y r   r   r   r   r   rd   z-ScopeTests.testTopIsNotSignificant.<locals>.b   r0  r   r   )r   r  rd   s      r   testTopIsNotSignificantz"ScopeTests.testTopIsNotSignificant  s    		r   c                     d G fdd      }| j                  |j                  d        G d d      }| j                  t        |d             | j                  d       y )NrS   c                   (    e Zd Zd e       d<   W  Zy8ScopeTests.testClassNamespaceOverridesClosure.<locals>.X+   r   N)r@   rA   rB   r  r   rC   s   r   Xr    s    FHSMAr   r  r  c                   "    e Zd Zd e       d<   [yr  )r@   rA   rB   r  r   r   r   r   r  z8ScopeTests.testClassNamespaceOverridesClosure.<locals>.X
  s    FHSMr   r   )r   r   assertFalsehasattr)r   r  r   s     @r   "testClassNamespaceOverridesClosurez-ScopeTests.testClassNamespaceOverridesClosure  sX    	 	 	b!	 	 	C)Br   c                      G d d      } |       }|j                          t        j                  |      }~t                | j	                   |              y )Nc                       e Zd Zd Zy)'ScopeTests.testCellLeak.<locals>.Testerc                 V     	 	 ddz   d  y # t         $ r}| _        Y d }~d  y d }~ww xY wr   )	Exceptionexc)r   r  s   ` r   digz+ScopeTests.testCellLeak.<locals>.Tester.dig  s9    #aC  ! #"DHH#s    	(#(N)r@   rA   rB   r  r   r   r   Testerr    s    r   r  )r  weakrefrefr   assertIsNone)r   r  testerr  s       r   testCellLeakzScopeTests.testCellLeak  sD    	 	 

kk&!#% r   N),r@   rA   rB   r    r(   r.   r9   rF   rO   r]   rk   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r-  r   r8  r?  rT  r[  ra  re  rl  rs  r}  r  r  r  r  r  r  r  r   r   r   r   r      s    ((('$((+"(#6J	$2224$  D"03"3*&9 Rh'.26 %B     + 3 3.S$!#&%$2046!"  ! !r   r   __main__)
unittestr  test.supportr   r   r   TestCaser   r@   mainr   r   r   <module>r     s@      9 #c!"" c!L zHMMO r   